MyBatisの-config.xmlに
次のように内容を設定することができます。
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)
<!-- 注意元素节点的顺序!顺序不对会报错 -->
環境要素
<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データベースの複数にマッピングされ、(デフォルトで指定された)デフォルトの実行環境として指定されなければならないの一つは
、例えば、開発、テスト、生産環境では、異なる構成を必要とするか、有するなど同じSQLマッピングを使用して、同一のデータベースの生産の複数のスキーマ。多くの同様の使用シナリオがあります。
しかし、覚えている:あなたは複数の環境を設定できますが、各SqlSessionFactory環境のインスタンスを1つだけ選択することができますが。
あなたは2つのデータベースを接続したいのであれば、あなたは、各データベースに1つずつSqlSessionFactory 2つのインスタンスを作成する必要があります。3つのデータベースは、次の3つのインスタンスを必要とする、というように、それは非常にシンプルであることを覚えています:環境
IDを設定することで区別環境の特定のセットには、IDは一意であることが保証しました!
トランザクションマネージャー - [主催]
<!-- 语法 -->
<transactionManager type="[ JDBC | MANAGED ]"/>
MyBatisの(すなわちタイプ=「[JDBC | MANAGED]」)とトランザクションマネージャの2種類があります。
- JDBC - この構成では、JDBCの直接使用がコミットされ、ロールバックは、トランザクションのスコープを管理するためにソースから取得した接続情報に依存し、提供されます。
- MANAGED - この構成はほとんどしませんでした。それはコミットしないか、接続をロールバックが、(そのような文脈JEEアプリケーションサーバなど)トランザクションのライフサイクル全体を管理するためのコンテナを聞かせてください。あなたは、デフォルトの動作が閉じられている防ぐために、falseにcloseConnectionプロパティに必要なので、デフォルトでは、それは接続を閉じます、しかし、いくつかのコンテナは、このことを望んでいません。例えば:
<transactionManager type="MANAGED">
<property name="closeConnection" value="false"/>
</transactionManager>
あなたは春+ MyBatisのを使用している場合は、春のモジュールは、以前の設定を上書きする独自のマネージャを使用するので、トランザクションマネージャを設定する必要はありません。
データソース(データソース)
- 標準JDBCデータ・ソース・インターフェイス構成リソースJDBC接続オブジェクトを使用して、DataSource要素。
- データソースを設定する必要があります。
- 組み込みデータ・ソースの3つのタイプがあります。
type="[UNPOOLED|POOLED|JNDI]")
- unpooled:開口部とこれを達成するための接続を閉じますが、各データ・ソースが要求されます。
- プールされた:このデータソースは、同時処理要求応答方法その人気のWebアプリケーションでJDBC接続オブジェクトを、組織する「セル」の概念を使用して実装されます。
- JNDI:これは、データソースは、集中またはコンフィギュレーション・データの外部ソースに、その後、基準JNDIコンテキストを配置することができる春または容器などのようなアプリケーションサーバで使用することができる実現することです。
- 達成するために、多くのサードパーティのデータソースは、DBCP、C3P0、ドルイドなどとして、もあります....
POOLED以上の特性:
poolMaximumActiveConnections -いつ活動には存在することができる(すなわち使用中の)接続の数は、デフォルト値:10
poolMaximumIdleConnections -アイドル接続の数は、任意の時点で存在してもよいです。
poolMaximumCheckoutTime -検出されたプールの接続に戻ることを余儀なくされる前に(チェックアウト)デフォルト値:20,000ミリ秒(すなわち20秒)
poolTimeToWait -取得した接続は非常に長い時間がかかる場合、これは、低設定で、接続プール20000ミリ秒(すなわち20秒):接続(避けるケースに誤設定さにすると静かに障害が発生している)、デフォルトを取得するために、印刷ステータスログと再トライ。
poolMaximumLocalBadConnectionTolerance -これはセット寛容、各試行のためにキャッシュプールからネジ接続を取得する役割に底面の接続不良です。このスレッドが接続不良であることを取得する場合、データソースは、このスレッドは、再取得に新しい接続を試みることができますが、再試行の回数はpoolMaximumLocalBadConnectionToleranceとpoolMaximumIdleConnectionsの合計を超えないようにしてください。デフォルト:3(3.4.5の新機能)
poolPingQuery -接続をテストするために使用され、検出するために、データベースにクエリを送信が正常に動作し、要求を受け入れる準備ができています。デフォルトでは、適切なエラーメッセージデータベース駆動型障害の大部分をもたらすことができる「NO PING QUERY SET」、です。
poolPingEnabled - ping照会を有効にするかどうか。偽:オンになっている場合、あなたは、実行可能なSQL文の(好ましくは、非常に高速なSQL文)として、デフォルト値をpoolPingQueryプロパティを設定する必要があります。
poolPingConnectionsNotUsedFor - 周波数配置のpoolPingQuery。0( - poolPingEnabledが真である場合もちろんのみ適用で、すなわち、すべての接続が毎回検出される)、デフォルト、不必要な検出を回避するために、同じデータベース接続タイムアウトに設定することができます。
マッパー要素
- マッパー:SQL文のファイルをマッピングするカスタム
- 私たちはどこそれらを見つけるためにMyBatisのを指示する必要があります。
、クラス及びパッケージ名、等:クラスがリソース参照パス、または(/// URLのファイルを含む)完全修飾リソースロケータに対して使用することができます。
リソースの方法をご紹介
<!-- 使用相对于类路径的资源引用 -->
<mappers>
<mapper resource="org/mybatis/builder/AuthorMapper.xml"/>
<mapper resource="org/mybatis/builder/BlogMapper.xml"/>
<mapper resource="org/mybatis/builder/PostMapper.xml"/>
</mappers>
<!-- 使用完全限定资源定位符(URL) -->
<mappers>
<mapper url="file:///var/mappers/AuthorMapper.xml"/>
<mapper url="file:///var/mappers/BlogMapper.xml"/>
<mapper url="file:///var/mappers/PostMapper.xml"/>
</mappers>
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
<mapper class="org.mybatis.builder.AuthorMapper"/>
<mapper class="org.mybatis.builder.BlogMapper"/>
<mapper class="org.mybatis.builder.PostMapper"/>
</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.a.b.UserMapper">
</mapper>
名前空間の中国の意味は次のように名前空間の役割は次のとおりです。
- ID名前空間と連帯保証一意のサブエレメントは、異なるマッパ区別します
- 結合DAOインタフェース
- 名前空間には、インターフェースと同じ名前で命名されなければなりません
- SQL文のidインターフェイスメソッドとマッピングファイルが対応している必要があります
名前空間の命名規則:パッケージ名+クラス名
要素のプロパティ
db.propertiesを作成します。
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8
username=root
password=123456
コンフィギュレーション・ファイルのプロパティにファイルをインポート
<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>
** properties要素指定されたインビボ特性は、最初に読み出されます。**
typeAliases(タイプの別名)
Java型のエイリアスを入力しますが、短い名前が設定されています。そして、存在の意味に関連した唯一のXML設定は、冗長性、完全修飾クラス名を低減するために使用されます。
<typeAliases>
<typeAlias alias="Author" type="domain.blog.Author"/>
<typeAlias alias="Blog" type="domain.blog.Blog"/>
<typeAlias alias="Comment" type="domain.blog.Comment"/>
<typeAlias alias="Post" type="domain.blog.Post"/>
<typeAlias alias="Section" type="domain.blog.Section"/>
<typeAlias alias="Tag" type="domain.blog.Tag"/>
</typeAliases>
ときにこのような構成、ブログのどこでもdomain.blog.Blogを使用することができます。
:あなたはまたのような、MyBatisのが必要なJavaビーンの下にパッケージ名を検索します、パッケージ名を指定することができます
<typeAliases>
<package name="domain.blog"/>
</typeAliases>
Java Beanが内の各パッケージdomain.blogは、コメントせずに、我々はそれの別名として豆非修飾クラス名を小文字最初の文字を使用します。例えば、作成者domain.blog.Author別名、注釈は、注釈値の別名である場合。次の例を参照してください。
@Alias("author")
public class Author {
...
}
設定の設定
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。
一个配置完整的 settings 元素的示例如下:
<settings>
<setting name="cacheEnabled" value="true"/>
<setting name="lazyLoadingEnabled" value="true"/>
<setting name="multipleResultSetsEnabled" value="true"/>
<setting name="useColumnLabel" value="true"/>
<setting name="useGeneratedKeys" value="false"/>
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<setting name="defaultExecutorType" value="SIMPLE"/>
<setting name="defaultStatementTimeout" value="25"/>
<setting name="defaultFetchSize" value="100"/>
<setting name="safeRowBoundsEnabled" value="false"/>
<setting name="mapUnderscoreToCamelCase" value="false"/>
<setting name="localCacheScope" value="SESSION"/>
<setting name="jdbcTypeForNull" value="OTHER"/>
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
生命周期和作用域
** 作用域(Scope)和生命周期 **
Mybatis的执行过程
- SqlSessionFactoryBuilder 的作用在于创建 SqlSessionFactory,创建成功后,SqlSessionFactoryBuilder 就失去了作用,所以它只能存在于创建 SqlSessionFactory 的方法中,而不要让其长期存在。因此 SqlSessionFactoryBuilder 实例的最佳作用域是方法作用域(也就是局部方法变量)。
- SqlSessionFactory 可以被认为是一个数据库连接池,它的作用是创建 SqlSession 接口对象。因为 MyBatis 的本质就是 Java 对数据库的操作,所以 SqlSessionFactory 的生命周期存在于整个 MyBatis 的应用之中,所以一旦创建了
- SqlSessionFactory,就要长期保存它,直至不再使用 MyBatis 应用,所以可以认为 SqlSessionFactory 的生命周期就等同于 MyBatis 的应用周期。
- 由于 SqlSessionFactory 是一个对数据库的连接池,所以它占据着数据库的连接资源。如果创建多个 SqlSessionFactory,那么就存在多个数据库连接池,这样不利于对数据库资源的控制,也会导致数据库连接资源被消耗光,出现系统宕机等情况,所以尽量避免发生这样的情况。
- 因此在一般的应用中我们往往希望 SqlSessionFactory 作为一个单例,让它在应用中被共享。所以说 SqlSessionFactory 的最佳作用域是应用作用域。
- 如果说 SqlSessionFactory 相当于数据库连接池,那么 SqlSession 就相当于一个数据库连接(Connection 对象),你可以在一个事务里面执行多条 SQL,然后通过它的 commit、rollback 等方法,提交或者回滚事务。所以它应该存活在一个业务请求中,处理完整个请求后,应该关闭这条连接,让它归还给 SqlSessionFactory,否则数据库资源就很快被耗费精光,系统就会瘫痪,所以用 try...catch...finally... 语句来保证其正确关闭。
- 所以 SqlSession 的最佳的作用域是请求或方法作用域。