1.mybatis初始化过程
a.调用SqlSessionFactoryBuilder对象的build(inputStream)方法
b.SqlSessionFactoryBuilder 根据inputStream 信息创建 XMLConfigBuilder对象
c.调用XMLConfigBuilder.parse解析配置返回 Configuration对象
d.根据Configuration对象创建一个DefaultSessionFactory对象
上述可见,mybatis依赖配置文件创建对象。
配置文件结构,顶层configuration,其他节点:
properties \ settins \ typeAliases \ typeHandlers \ plugins \ environments (environment \ transactionManager \ dataSource) \ databaseIdProvider \ mappers
1.properties 属性,可实现利用配置文件读取配置
<properties resource="db.properties">
便可以在其他地方使用该定义属性文件中的属性了,<dataSource type="POOLED"> <property name="driver" value="${driver}">....
2.setting 设置 ,极为重要。
cacheEnabled 默认true
lazyLoadingEnabled 默认false
aggressiveLazyLoading 默认true
multipleResultSetsEnabled 默认true
userColumnLabel(使用列标签代替列名) 默认 true
userGeneratedKeys(允许自动生成主键) 默认 true
autoMappingBehavior(指定如何映射到字段或属性。NONE - 取消自动映射|PARTIAL - 只映射没有定义嵌套结果集 |FULL - 自动映射所有结果集) 默认PARTIAL
autoMappingUnknownColumnBehavior (NONE - 什么都不做 | WARNING - 输出警告 | FAILING - 映射失败 ,抛出SqlSessionExcption ) 默认NONE
defaultExecutorType(SIMPLE - 普通执行器 | REUSE -执行器会重用预处理语句| BATCH 重用语句并) 默认 SIMPLE
defaultStatementTimeout 超时时间,秒。未设置 null
defaultFetchSize 结果集大小。 未设置 null
safeRowBoundsEnabled 允许在嵌套语句中使用分页(RowBounds)。默认false
mapUnderscoreToCamelCase 是否开启自动驼峰命名规则(camelcase)映射。默认 false
localCacheScope SESSION(默认)|STATEMENT 。默认 SESSION
jdbcTypeForNull 没指定JDBC类,未空指定JDBC类型。 NULL|VARCHAR|OTHER 。默认OTHER
lzyLoadTriggerMethods 指定哪个对象的方法触发一次延迟加载。list集合 。默认:equals,clone,hashCode,toString
defaultScriptingLanguage 动态SQL生成默认语言。默认 org.apache.ibatis.scripting.xmltags.XMLDynamicLanguageDriver
callSettersOnNulls 结果集中值为null时是否调用映射对象的setter。默认false
logPrefix 日志前缀 , String 默认未设置
logImpl 日志实现类 SLF4J|LOG4J|LOG4J2|JDK_LOGGING|COMMONS_LOGGING|STDOUT_LOGGIN|NO_LOGGING 。默认未设置
proxyFactory 延迟加载能力的对象用到的代理工具 CGLIB|JAVASSIST 。默认 JAVASSIST
3.typeAliases ,别名
a.<typeAliases> <typeAlias alias="user" type="org.test.domain.User"/></typeAliases>
b.<typeAliases><package name="org.test.domain"/></typeAliases> 这种方式,会使用Bean的手写字母,比如 org.test.domain.User ,就是user
c.注解方式。@Alias("user")
4.typeHandlers 类型处理器。该部分用于进行预处理、结果取值转换Java类型的处理器,一般采用默认即可。
5.objectFactory 对象工厂。 mybatis每次创建对象实例的上海,都会使用对象工厂实例来完成。若想覆盖默认,可自定义。
a.继承 DefaultObjectFactory类。
b.配置<objectFactory type="自定义的类"> <property name ="someProperty" value="100"/> </pbjectFactory>。property是对应类中 setProperties方法。
5.environments 配置环境,可配置多种环境。
<environments default="development">
<environment id="development">
<dataSource>
<property name="driver" value="${driver}">
<property name="url" value="${url}">
<property name="username" value="${username}">
<property name="password" value="${password}">
</dataSource>
<transactionManager type="JDBC">
<property name="..." value="..."/>
</transactionManager>
</environment>
</environments>
关键,默认环境ID ;每个environment都有ID,事务管理器,数据源。
事务管理器, JDBC \ MANAGED 。JDBC使用JDBC的提交和回滚,依赖数据源得到的连接来管理事务。 MANAGED ,从不提交会回滚连接,让容器来管理事务。比如JAEE应用服务器的上下文,默认情况会关闭连接,可以将closeConnection设为false来阻止。
<transactionManager type="MANAGER">
<property name="closeConnection" value="false"/>
</transactionManager>
dataSource 数据源连接有UNPOOLED\POOLED\JNDI 三种类型。主要说一下POOLED的,配置,poolMaximumActiveConnections 默认10,poolMaximumIdleConnections ,poolMaximumCheckoutTime 默认20000ms ,poolTimeToWait 默认20000ms ,poolPingQuery 默认 NO PING QUERY SET, poolPingEnabled 开启侦测查询 ,默认 false 。poolPingConnectionsNotUsedFor 默认0,。
6.mpper 映射
<mappers>
<mapper resource="../...xml"/> 使用资源文件
<mapper url="file:C://....xml" /> 使用绝对路径
<mapper class="org.test.mapper.UserMapper"/> 使用类
<package name="org.test.mapper"/> 使用包
</mappers>