<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数据源
properties属性
settings设置
typeAliases范例命名
typeHandlers范例处置惩罚器
objectFactory对象工场
plugins插件
environments环境
映照器
下面就对各个属性设置做出细致引见
properties
这些是外部化的,可替代的属性,这些属性也能够设置在典范的Java属性设置文件中,或许经过过程properties元素的子元夙来通报。
比方:
[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>
这个例子中的username和password将会由properties元素中设置的值来替代。driver和url属性将会从包含进来的jdbc_mysql.properties文件中的值来替代。
Settings
这些是极其重要的调解,它们会修正MyBatis在运行时的行动体式格局。下面这个表格形貌了设置信息,它们的寄义和默许值。
设置参数 形貌
cacheEnabled 这个设置使全局的映照器启用或禁用缓存。
lazyLoadingEnabled 全局启用或禁用耽误加载。当禁用时,一切关联对象都邑立即加载。
aggressiveLazyLoading 当启用时,有耽误加载属性的对象在被挪用时将会完整加载恣意属性。不然,每种属性将会按须要加载。
multipleResultSetsEnabled 许可或不许可多种效果集从一个零丁的语句中返回(须要适宜的驱动)。
useColumnLabel 运用列标签替代列名。差别的驱动在这轻易表现差别。参考驱动文档或充足测试两种要领来决议所运用的驱动。
useGeneratedKeys 许可JDBC支撑生成的键。须要适宜的驱动。假如设置为true则这个设置强迫生成的键被运用,只管一些驱动谢绝兼容但仍然有用(比方Derby)。
autoMappingBehavior 指定MyBatis怎样自动映照列到字段/属性。PARTIAL只会自动映照简朴,没有嵌套的效果。FULL会自动映照恣意庞杂的效果(嵌套的或其他状况)。
defaultExecutorType 设置默许的实行器。SIMPLE实行器没有什么特别之处。REUSE实行器重用预处置惩罚语句。BATCH实行器重用语句和批量更新
defaultStatementTimeout 设置超时时候,它决议驱动守候一个数据库相应的时候。
一个设置信息元素的示例,完整的设置以下所示:
<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>
typeAliases
范例别号是为Java范例命名一个短的名字。它只和XML设置有关,只用来削减类完整限命名的过剩部份。比方:
[html] view plain copy <typeAliases> [html] view plain copy <typeAlias alias="Author" type="domain.blog.Author"/> [html] view plain copy <typeAlias alias="Blog" type="domain.blog.Blog"/> [html] view plain copy <typeAlias alias="Comment" type="domain.blog.Comment"/> [html] view plain copy <typeAlias alias="Post" type="domain.blog.Post"/> [html] view plain copy <typeAlias alias="Section" type="domain.blog.Section"/> [html] view plain copy <typeAlias alias="Tag" type="domain.blog.Tag"/> [html] view plain copy </typeAliases>
运用这个设置,“Blog”能够恣意用来替代“domain.blog.Blog”所运用的处所。
typeHandlers
无论是MyBatis在预处置惩罚语句中设置一个参数,照样从效果集合掏出一个值时,范例处置惩罚器被用来将猎取的值以适宜的体式格局转换成Java范例。下面这个列表形貌了默许的范例处置惩罚器。 依次是 范例处置惩罚器 Java范例 JDBC范例
BooleanTypeHandler Boolean,boolean 任何兼容的布尔值
ByteTypeHandler Byte,byte 任何兼容的数字或字节范例
ShortTypeHandler Short,short 任何兼容的数字或短整型
IntegerTypeHandler Integer,int 任何兼容的数字和整型
LongTypeHandler Long,long 任何兼容的数字或长整型
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 映照设置文件的实例详解的细致内容,更多请关注ki4网别的相干文章!