構成分析
コア構成ファイル
mybatis-config.xmlシステムコア構成ファイル
MyBatisの設定ファイルには、MyBatisの動作に大きく影響する設定と属性情報が含まれています。
設定できる内容は以下のとおりです。
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)
<!-- 注意元素节点的顺序!顺序不对会报错 -->
mybatis-config.xmlの上にあるdtdヘッダーファイルを読み取ることができます!
環境要素
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="..." value="..."/>
</transactionManager>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
MyBatisオペレーティング環境の複数のセットを構成し、SQLを複数の異なるデータベースにマップし、そのうちの1つをデフォルトのオペレーティング環境として指定する必要があります(デフォルトで指定)
子要素ノード:環境
dataSource要素は、標準のJDBCデータソースインターフェイスを使用して、JDBC接続オブジェクトのリソースを構成します。
データソースを構成する必要があります。
3つの組み込みデータソースタイプがあります
type="[UNPOOLED|POOLED|JNDI]")
-
unpooled:このデータソースの実装は、要求されるたびに接続を開いたり閉じたりするだけです。
-
プール:このデータソースの実現では、「プール」の概念を使用してJDBC接続オブジェクトを編成します。これは、並行Webアプリケーションが要求に迅速に応答できるようにする一般的な処理方法です。
-
jndi:このデータソースは、Springサーバーやアプリケーションサーバーなどのコンテナーで使用するように実装されています。コンテナーは、データソースを中央または外部で構成し、JNDIコンテキストへの参照を配置できます。
dbcp、c3p0、druidなどのデータソースのサードパーティ実装も多数あります...
どちらのトランザクションマネージャタイプでも、プロパティを設定する必要はありません。
IDを設定することで、特定の環境セットを区別でき、IDは一意であることが保証されます。
子要素ノード:transactionManager- [トランザクションマネージャー]
<!-- 语法 -->
<transactionManager type="[ JDBC | MANAGED ]"/>
子要素ノード:データソース(dataSource)
マッパー要素
mappers
mapper:マッピングSQLステートメントファイルを定義します
MyBatisの動作の他の要素が構成されたので、次にSQLマッピングステートメントを定義します。しかし、最初に、これらの文がどこにあるかをMyBatisに伝える必要があります。
Javaはこれを自動的に見つける良い方法を提供しないので、最良の方法はMyBatisにマッピングファイルの場所を教えることです。クラスパスに関連するリソース参照、完全修飾リソースロケーター(file:/// URLを含む)、またはクラス名とパッケージ名などを使用できます。
マッパーはMyBatisのコアコンポーネントの1つです。MyBatis3以前は、xmlマッパーのみがサポートされていました。つまり、すべてのSQLステートメントをxmlファイルで構成する必要があります。MyBatis 3以降、インターフェイスマッパーもサポートされています。このマッパーメソッドを使用すると、JavaコードでSQLステートメントに注釈を付けて定義できます。これは非常に簡潔です。
リソースの紹介
<!-- 使用相对于类路径的资源引用 -->
<mappers>
<mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
<!-- 使用完全限定资源定位符(URL) -->
<mappers>
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
</mappers>
<!--
使用映射器接口实现类的完全限定类名
需要配置文件名称和接口名称一致,并且位于同一目录下
-->
<mappers>
<mapper class="org.mybatis.builder.AuthorMapper"/>
</mappers>
<!--
将包内的映射器接口实现全部注册为映射器
但是需要配置文件名称和接口名称一致,并且位于同一目录下
-->
<mappers>
<package name="org.mybatis.builder"/>
</mappers>
マッパーファイル
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.kuang.mapper.UserMapper">
</mapper>
名前空間中国語の意味:名前空間、役割は次のとおりです。
名前空間の名前はインターフェースと同じである必要があります
インターフェイスのメソッドは、マッピングファイルのSQLステートメントIDに1対1で対応している必要があります
名前空間と子要素のIDは、異なるマッパーを区別するために、共同で一意であることが保証されています
DAOインターフェースをバインドする
名前空間の命名規則:パッケージ名+クラス名
MyBatisの真の力は、その魔法であるマッピングステートメントにあります。その並外れた能力のために、マッパーのXMLファイルは比較的単純です。同じ機能を持つJDBCコードと比較すると、コードの95%近くが保存されていることがすぐにわかります。
プロパティの最適化
データベースのこれらのプロパティは、外部で構成可能であり、動的に置き換えることができます。これらは、一般的なJavaプロパティファイルで構成することも、プロパティ要素のサブ要素を介して渡すこともできます。
1.リソースディレクトリに新しいdb.propertiesを作成します
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8
username=root
password=123456
2.ファイルをプロパティ構成ファイルにインポートします
<configuration>
<!--导入properties文件-->
<properties resource="db.properties"/>
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
</environment>
</environments>
<mappers>
<mapper resource="mapper/UserMapper.xml"/>
</mappers>
</configuration>
構成ファイルの優先順位の問題
新機能:プレースホルダーを使用する
typeAliasesの最適化
タイプエイリアスは、Javaタイプの短い名前を設定することです。これはXML構成にのみ関連しており、その重要性は、クラスの完全修飾名の冗長性を減らすことだけです。
<!--配置别名,注意顺序-->
<typeAliases>
<typeAlias type="com.kuang.pojo.User" alias="User"/>
</typeAliases>
このように構成すると、com.kuang.pojo.Userが使用されている場所であればどこでもUserを使用できます。
パッケージ名を指定することもできます。MyBatisは、次のように、パッケージ名の下で必要なJavaBeanを検索します。
<typeAliases>
<package name="com.kuang.pojo"/>
</typeAliases>
パッケージcom.kuang.pojo内の各JavaBeanは、アノテーションなしで、Beanの最初の文字の非修飾名と小文字をエイリアスとして使用します。
注釈がある場合、エイリアスは注釈値です。以下の例を参照してください。
@Alias("user")
public class User {
...
}
ライフサイクルと範囲
範囲とライフサイクル
誤った使用は非常に深刻な並行性の問題につながる可能性があるため、これまでに説明したさまざまなスコープとライフサイクルクラスを理解することが重要です。
スコープの理解
-
SqlSessionFactoryBuilderの機能は、SqlSessionFactoryを作成することです。作成が成功すると、SqlSessionFactoryBuilderはその機能を失います。そのため、SqlSessionFactoryBuilderは、長期間存在させるのではなく、SqlSessionFactoryを作成するメソッドにのみ存在できます。したがって、SqlSessionFactoryBuilderインスタンスの最適なスコープは、メソッドスコープ(つまり、ローカルメソッド変数)です。
-
SqlSessionFactoryは、データベース接続プールと見なすことができ、その役割はSqlSessionインターフェイスオブジェクトを作成することです。MyBatisの本質はJavaによるデータベースの操作であるため、SqlSessionFactoryのライフサイクルはMyBatisアプリケーション全体に存在します。したがって、SqlSessionFactoryが作成されると、MyBatisアプリケーションが使用されなくなるまで、長期間保存する必要があります。SqlSessionFactoryの寿命と見なすことができますこのサイクルは、MyBatisのアプリケーションサイクルと同等です。
-
SqlSessionFactoryはデータベースへの接続プールであるため、データベースの接続リソースを占有します。複数のSqlSessionFactoryを作成すると、データベースリソースの制御に役立たない複数のデータベース接続プールが存在し、データベース接続リソースの消費やシステムのダウンタイムなども発生するため、このような状況を回避するようにしてください。 。
-
したがって、一般的なアプリケーションでは、アプリケーションで共有できるように、SqlSessionFactoryをシングルトンとして使用することがよくあります。したがって、SqlSessionFactoryの最適なスコープはアプリケーションスコープです。
-
SqlSessionFactoryがデータベース接続プールと同等である場合、SqlSessionはデータベース接続(接続オブジェクト)と同等です。トランザクションで複数のSQLを実行し、コミット、ロールバック、およびその他のメソッドを使用してトランザクションを送信またはロールバックできます。したがって、ビジネスリクエストに存在する必要があります。完全なリクエストを処理した後、接続を閉じてSqlSessionFactoryに戻す必要があります。そうしないと、データベースリソースがすぐに消費され、システムが麻痺します。 …正しく閉じることを確認するためのステートメント。
-
したがって、SqlSessionの最適なスコープは、リクエストスコープまたはメソッドスコープです。