[java] view plain copy
<span style="font-size:14px;"> My Batis 支持SQL查询,是一些高级映射在持久层的完美展示。他更多的使用简单的XML或注解用于配置和原始映射,<span style="color: rgb(54, 54, 54); font-family: 'Helvetica Neue', Helvetica, Arial, sans-serif; line-height: 24px; ">摒除了大量的JDBC代码、手工设置参数和结果集封装,提高了开发效率。</span></span>
MyBatis の XML 設定ファイルには、MyBatis の動作に大きく影響する設定と属性情報が含まれています。 XML ドキュメントの高レベル構造は次のとおりです。
configuration 構成
environment 環境変数
transactionManager トランザクションマネージャー
dataSource データソース
プロパティ
設定 settings
typeAliases タイプの名前付け
typeハンドラーの種類プロセッサ
objectFactory オブジェクト ファクトリ
プラグイン
環境
マッパー
以下は、各プロパティ設定の詳細な紹介です
プロパティ
これらは外部の置換可能なプロパティであり、一般的な Java プロパティ設定ファイルでも設定できます。または、properties 要素の子要素を介して渡されます。 R 例: re この例のユーザー名とパスワードは、Properties 要素で設定された値に置き換えられます。ドライバーと URL のプロパティは、付属の jdbc_mysql.properties ファイルの値に置き換えられます。
設定
これらは、実行時の MyBatis の動作を変更する非常に重要な調整です。設定情報とその意味、デフォルト値を次の表に示します。 パラメータの設定 この設定では、グローバル マッパーのキャッシュを有効または無効にします。
lazyLoadingEnabled 遅延読み込みをグローバルに有効または無効にします。無効にすると、関連するすべてのオブジェクトがその場でロードされます。
aggressiveLazyLoading 有効にすると、遅延読み込みプロパティを持つオブジェクトは呼び出されたときにすべてのプロパティを完全に読み込みます。それ以外の場合、各プロパティは必要に応じてロードされます。
multipleResultSetsEnabled 単一のステートメントから複数の結果セットを返すことを許可または禁止します (適切なドライバーが必要です)。
useColumnLabel 列名の代わりに列ラベルを使用します。ここでのドライバーの動作はドライバーごとに異なります。使用するドライバーを決定するには、ドライバーのドキュメントを参照するか、徹底的なテストを参照してください。
useGeneratedKeys JDBC が生成されたキーをサポートできるようにします。適切なドライバーが必要です。 true に設定すると、この設定により生成されたキーが強制的に使用されますが、一部のドライバーは互換性を拒否しても機能します (Derby など)。
autoMappingBehavior MyBatis が列をフィールド/プロパティに自動的にマップする方法を指定します。 PARTIAL は、単純な結果のみを自動的にマッピングし、ネストされた結果はありません。 FULL は、任意の複雑な結果 (ネストされているかどうか) を自動的にマッピングします。
defaultExecutorType デフォルトのエグゼキュータを構成します。 SIMPLE アクチュエータには特別なことは何もありません。 REUSE エグゼキュータは、準備されたステートメントを再利用します。 BATCH エグゼキューターはステートメントとバッチ更新を再利用します
defaultStatementTimeout ドライバーがデータベースの応答を待つ時間を決定するタイムアウトを設定します。
情報要素の設定例は次のとおりです:
[html] view plain copy <properties resource="jdbc_mysql.properties" /> [html] view plain copy <dataSource type="POOLED"> [html] view plain copy <property name="driver" value="${driver}"/> [html] view plain copy <property name="url" value="${url}"/> [html] view plain copy <property name="username" value="${username}"/> [html] view plain copy <property name="password" value="${password}"/> [html] view plain copy </dataSource>
typeAliases
型エイリアスは、Java 型に短い名前を付けるものです。これは XML 構成にのみ関連し、完全修飾クラス名の冗長部分を減らすためにのみ使用されます。例:<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="enhancementEnabled" value="false"/> <setting name="defaultExecutorType" value="SIMPLE"/> <setting name="defaultStatementTimeout" value="25000"/> </settings>
mybatis が前処理ステートメントでパラメータを設定するか、結果の集中から値を取得するかにかかわらず、取得した値を適切な方法で Java 型に変換するために型プロセッサが使用されます。次のリストでは、デフォルトのタイプ ハンドラーについて説明します。 順番に、タイプハンドラーJavaタイプJDBCタイプ
FloatTypeHandler Float,float 任何兼容的数字或单精度浮点型
DoubleTypeHandler Double,double 任何兼容的数字或双精度浮点型
BigDecimalTypeHandler BigDecimal 任何兼容的数字或十进制小数类型
StringTypeHandler String CHAR和VARCHAR类型
ClobTypeHandler String CLOB和LONGVARCHAR类型
NStringTypeHandler String NVARCHAR和NCHAR类型
NClobTypeHandler String NCLOB类型
ByteArrayTypeHandler byte[] 任何兼容的字节流类型
BlobTypeHandler byte[] BLOB和LONGVARBINARY类型
DateTypeHandler Date(java.util) TIMESTAMP类型
DateOnlyTypeHandler Date(java.util) DATE类型
TimeOnlyTypeHandler Date(java.util) TIME类型
SqlTimestampTypeHandler Timestamp(java.sql) TIMESTAMP类型
SqlDateTypeHandler Date(java.sql) DATE类型
SqlTimeTypeHandler Time(java.sql) TIME类型
ObjectTypeHandler Any 其他或未指定类型
EnumTypeHandler Enumeration类型 VARCHAR-任何兼容的字符串类型,作为代码存储(而不是索引)。
objectFactory
MyBatis每次创建结果对象新的实例时,它使用一个ObjectFactory实例来完成。如果参数映射存在,默认的ObjectFactory不比使用默认构造方法或带参数的构造方法实例化目标类做的工作多。
plugins
MyBatis允许你在某一点拦截已映射语句执行的调用。默认情况下,MyBatis允许使用插件来拦截方法调用:
Executor (update, query, flushStatements, commit, rollback, getTransaction, close, isClosed) ParameterHandler (getParameterObject, setParameters) ResultSetHandler (handleResultSets, handleOutputParameters) StatementHandler
(prepare, parameterize, batch, update, query)
这些类中方法的详情可以通过查看每个方法的签名来发现,而且它们的源代码在MyBatis的发行包中有。你应该理解你覆盖方法的行为,假设你所做的要比监视调用要多。如果你尝试修改或覆盖一个给定的方法,你可能会打破MyBatis的核心。这是低层次的类和方法,要谨慎使用插件。
使用插件是它们提供的非常简单的力量。简单实现拦截器接口,要确定你想拦截的指定签名。
java代码:
[javascript] view plain copy @Intercepts({@Signature(type= Executor.class,method = "update", [javascript] view plain copy args = {MappedStatement.class,Object.class})}) [javascript] view plain copy public class ExamplePlugin implements Interceptor { [javascript] view plain copy public Object intercept(Invocation invocation) throws Throwable [javascript] view plain copy { [javascript] view plain copy return invocation.proceed(); [javascript] view plain copy } [javascript] view plain copy public Object plugin(Object target) { [javascript] view plain copy return Plugin.wrap(target, this); [javascript] view plain copy } [javascript] view plain copy public void setProperties(Properties properties) { [javascript] view plain copy } [html] view plain copy MapperConfig.xml [html] view plain copy <plugins> [html] view plain copy <plugin interceptor="org.mybatis.example.ExamplePlugin"> [html] view plain copy <property name="someProperty" value="100"/> [html] view plain copy </plugin> [html] view plain copy </plugins> [html] view plain copy
上面的插件将会拦截在Executor实例中所有的“update”方法调用,它也是负责低层次映射语句执行的内部对象。
environments
[html] view plain copy <environments default="development"> <environment id="development"> <transactionManager type="JDBC" /> <dataSource type="POOLED"> <property name="driver" value="${jdbc.driver}" /> <property name="url" value="${jdbc.url}"/> <property name="username" value="${jdbc.user}" /> <property name="password" value="${jdbc.password}" /> <property name="poolPingEnabled" value="true"/> <property name="poolPingQuery" value="SELECT * FROM app_setup_setting WHERE name='allow_setup_unknown_app'" /> <property name="poolPingConnectionsNotUsedFor" value="7200000"/> </dataSource> </environment> </environments> dataSsource
dataSource元素使用基本的JDBC数据源接口来配置JDBC连接对象的资源。见上
transactionManager
在MyBatis中有两种事务管理器类型(也就是type=”[JDBC|MANAGED]”):
1.JDBC – 这个配置直接简单使用了JDBC的提交和回滚设置。它依赖于从数据源得到的连接来管理事务范围。
2.MANAGED – 这个配置几乎没做什么。它从来不提交或回滚一个连接。而它会让容器来管理事务的整个生命周期(比如Spring或JEE应用服务器的上下文)。默认情况下它会关闭连接。然而一些容器并不希望这样,因此如果你需要从连接中停止它,将closeConnection属性设置为false。例如:
[html] view plain copy <transactionManager type="MANAGED"> <property name="closeConnection" value="false"/> </transactionManager>
这两种事务管理器都不需要任何属性。然而它们都是类型别名,要替换使用它们,你需要放置将你自己的类的完全限定名或类型别名,它们引用了你对TransacFactory接口的实现类。
public interface TransactionFactory {
void setProperties(Properties props);
Transaction newTransaction(Connection conn, boolean autoCommit);
}
任何在XML中配置的属性在实例化之后将会被传递给setProperties()方法。你的实现类需要创建一个事务接口的实现,这个接口也很简单:
[html] view plain copy public interface Transaction { Connection getConnection(); void commit() throws SQLException; void rollback() throws SQLException; void close() throws SQLException; }
使用这两个接口,你可以完全自定义MyBatis对事务的处理。
mappers
既然MyBatis的行为已经由上述元素配置完了,我们现在就要定义SQL映射语句了。但是,首先我们需要告诉MyBatis到哪里去找到这些语句。Java在这方面没有提供一个很好的方法,所以最佳的方式是告诉MyBatis到哪里去找映射文件。你可以使用相对于类路径的资源引用,或者字符表示,或url引用的完全限定名(包括file:///URLs)。例如:
[html] view plain copy // Using classpath relative resources(首选) <mappers> <mapper resource="org/mybatis/builder/AuthorMapper.xml"/> <mapper resource="org/mybatis/builder/BlogMapper.xml"/> <mapper resource="org/mybatis/builder/PostMapper.xml"/> </mappers> // Using url fully qualified paths <mappers> <mapper url="file:///var/sqlmaps/AuthorMapper.xml"/> <mapper url="file:///var/sqlmaps/BlogMapper.xml"/> <mapper url="file:///var/sqlmaps/PostMapper.xml"/> </mappers>
以上がMy Batis XMLマッピング構成ファイルの詳細な例の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。