spring-mybatis配置
applicationContext-mybatis.xml
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<!--配置MyBaties全局配置文件-->
<property name="configLocation" value="classpath:config/mybatis-config.xml"/>
<!--扫描 mapper需要的xml文件 -->
<property name="mapperLocations" value="classpath:com/dn/spring/mybatis/xml/*Mapper.xml"/>
</bean>
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<!-- 扫描 mapper 接口所在的包-->
<property name="basePackage" value="com.dn.spring.mybatis.dao"/>
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory"/>
</bean>
mybatis 全局配置
mybatis-config.xml 全局配置文件
- Properties(属性)
- Settings(全局参数设置)
- typeAliases(类型别名)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
- environments(环境信息集合)
- environment(单个环境信息)
- transactionManager(事物)
- dataSource(数据源)
- mappers(映射器)
Properties(属性)
properties元素主要是用来定义配置外在化,比如数据库的连接属性等。
<properties resource="org/mybatis/example/config.properties">
<property name="username" value="dev_user"/>
<property name="password" value="F2Fa3!33TYyg"/>
</properties>
其中的属性就可以在整个配置文件中使用来替换需要动态配置的属性值。比如在数据源中使用的例子:
<dataSource type="POOLED">
<property name="driver" value="${driver}"/>
<property name="url" value="${url}"/>
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</dataSource>
在properties元素体内指定的属性首先被读取。
然后根据properties元素中的resource属性读取类路径下属性文件或根据url属性指定的路径读取属性文件,
并覆盖已读取的同名属性。
Settings(全局参数设置)
<!-- settings是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。-->
<settings>
<!-- 该配置影响的所有映射器中配置的缓存的全局开关。默认值true -->
<setting name="cacheEnabled" value="true"/>
<!--延迟加载的全局开关。当开启时,所有关联对象都会延迟加载。
特定关联关系中可通过设置fetchType属性来覆盖该项的开关状态。
默认值false
-->
<setting name="lazyLoadingEnabled" value="true"/>
<!-- 是否允许单一语句返回多结果集(需要兼容驱动)。 默认值true -->
<setting name="multipleResultSetsEnabled" value="true"/>
<!--
使用列标签代替列名。不同的驱动在这方面会有不
同的表现,具体可参考相关驱动文档或通过测试这两种不同的模式来观察所用驱动的结果。
默认值true -->
<setting name="useColumnLabel" value="true"/>
<!--
允许 JDBC 支持自动生成主键,需要驱动兼容。
如果设置为 true 则这个设置强制使用自动生成主键,尽管一些驱动不能兼容但仍可正常工作(比如 Derby)。
默认值false -->
<setting name="useGeneratedKeys" value="false"/>
<!--
指定 MyBatis 应如何自动映射列到字段或属性。
NONE 表示取消自动映射;
PARTIAL 只会自动映射没有定义嵌套结果集映射的结果集。
FULL 会自动映射任意复杂的结果集(无论是否嵌套)。
默认值PARTIAL
-->
<setting name="autoMappingBehavior" value="PARTIAL"/>
<setting name="autoMappingUnknownColumnBehavior" value="WARNING"/>
<!--
配置默认的执行器。
SIMPLE 就是普通的执行器;
REUSE 执行器会重用预处理语句(prepared statements);
BATCH 执行器将重用语句并执行批量更新。
默认SIMPLE
-->
<setting name="defaultExecutorType" value="SIMPLE"/>
<!-- 设置超时时间,它决定驱动等待数据库响应的秒数。 -->
<setting name="defaultStatementTimeout" value="25"/>
<setting name="defaultFetchSize" value="100"/>
<!-- 允许在嵌套语句中使用分页(RowBounds)默认值False -->
<setting name="safeRowBoundsEnabled" value="false"/>
<!--
是否开启自动驼峰命名规则(camel case)映射,
即从经典数据库列名 A_COLUMN 到经典 Java 属性名 aColumn 的类似映射。
默认false
-->
<setting name="mapUnderscoreToCamelCase" value="false"/>
<!--
MyBatis 利用本地缓存机制(Local Cache)防止循环引用(circular references)和加速重复嵌套查询。
默认值为 SESSION,这种情况下会缓存一个会话中执行的所有查询。
若设置值为 STATEMENT,本地会话仅用在语句执行上,对相同 SqlSession 的不同调用将不会共享数据。
-->
<setting name="localCacheScope" value="SESSION"/>
<!--
当没有为参数提供特定的 JDBC 类型时,为空值指定 JDBC 类型。
某些驱动需要指定列的 JDBC 类型,多数情况直接用一般类型即可,
比如 NULL、VARCHAR 或 OTHER。
-->
<setting name="jdbcTypeForNull" value="OTHER"/>
<!-- 指定哪个对象的方法触发一次延迟加载。 -->
<setting name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
typeHandlers(类型处理器)
无论是 MyBatis 在预处理语句(PreparedStatement)中设置一个参数时,还是从结果集中取出一个值时, 都会用类型处理器将获取的值以合适的方式转换成 Java 类型。
下表描述了一些默认的类型处理器。
可以重写类型处理器或创建自己的类型处理器来处理不支持的或非标准的类型。
具体的做法为:实现org.apache.ibatis.type.TypeHandler接口,或继承一个很便利的类org.apache.ibatis.type.BaseTypeHandler,
然后可以选择性地将它映射到一个JDBC类型。
比如:
<typeHandlers>
<typeHandler handler="org.mybatis.example.ExampleTypeHandler"/>
</typeHandlers>
plugins(插件)
MyBatis允许你在已映射的语句执行过程中的某一点进行拦截调用。默认情况下,Mybatis允许使用插件来拦截的方法调用包括:
Executor(update,query,flushStatements,commit,rollback,getTransaction,close,isClosed)
ParameterHandler(getParameterObejct,setParameters)
ResultSetHandler(handlerResultSets,handlerOutputParameters)
StatementHandler(prepare,parameterize,batch,update,query)
通过MyBatis提供强大的机制,使用插件是非常简单的,只需要实现Interceptor接口,并指定想要拦截的方法签名即可
。
@Intercepts({@Signature(
type= Executor.class,
method = "update",
args =
{MappedStatement.class,Object.class})})
public class ExamplePlugin implements Interceptor {
public Object intercept(Invocation invocation) throws Throwable {
return invocation.proceed();
}
public Object plugin(Object target) {
return Plugin.wrap(target, this);
}
public void setProperties(Properties properties) {
}
}
<plugins>
<plugin interceptor="org.mybatis.example.ExamplePlugin">
<property name="someProperty" value="100"/>
</plugin>
</plugins>
参考
mybatis --XML 映射配置文件
mybatis配置参数及默认值
jdbc,mybatis中fetchsize使用,批处理方案