MyBatis标签一(XML配置)
1.MyBatis的配置文件(configuration)包含:
properties(属性)
settings(设置)
typeAliases(类型命名)
typeHandler(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvide(数据库厂商标识)
mappers(映射器)
2.The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)". 这句话的意思呢? 元素类型“配置”的内容必须匹配。我们在配置的时候要按照这个顺序去配置。
3.properties属性是可以通过外部动态引入的。
在 properties 元素体内指定的属性首先被读取。
优先级最低的是properties,如果在多个地方配置该属性,则按照配置顺序加载。
如果有重复配置,则进行覆盖。
例如:
<properties resource="com/test/xml/config.properties">
<property name="username" value="${username}"/>
<property name="password" value="${password}"/>
</properties>
4.settings属性会改变mybatis的运行时行为,该配置比较重要。
5.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>
6.typeAliases 类型别名 是为Java类型设置的一个短的名字,它只和XML配置相关,存在的意义仅用来减少类完全限定名的冗余。
例如:
<typeAliases>
<typeAlias alias="user" type="com.test.bean.UserInfoBean"/>
</typeAliases>
或者配置到包名自动扫描 如:UserInfoBean 自动转换为userInfoBean 。首字母小写的方式作为限定类名的别名。或者在Bean上用@Alias("user")这样的注解命名别名。
<typeAliases>
<package name="com.test.bean"/>
</typeAliases>
7.typeHandlers 类型处理器 MyBatis在预处理语句(PreparedStatement)中设置一个参数的时候,或者从结果集(Resultset)中取出一个值时,都会用注册了的typeHandlers进行处理。或者自定义处理器。
例如:
<typeHandlers>
<typeHandler handler="ExampleTypeHandler"/>
</typeHandlers>
8.objectFactory 对象工厂 MyBatis每次创建结果对象的新实例时,都会使用对象工厂(objectFactory )实例来完成,默认的对象工厂需要做的仅仅是实例化目标类,要么通过默认构造方法,要么在参数映射存在的时候通过参数构造方法来实例化。一般情况下我们不用更改也不用配置它,MyBatis会调用默认的对象工厂进行处理。如果想要覆盖对象工厂可以自己创建一个对象工厂来实现。并且进行配置。
例如:
来自mybatis 官方文档
<objectFactory type="org.mybatis.example.ExampleObjectFactory">
<property name="someProperty" value="100"/>
</objectFactory>
public class ExampleObjectFactory extends DefaultObjectFactory {
public Object create(Class type) {
return super.create(type);
}
public Object create(Class type, List<Class> constructorArgTypes, List<Object> constructorArgs) {
return super.create(type, constructorArgTypes, constructorArgs);
}
public void setProperties(Properties properties) {
super.setProperties(properties);
}
public <T> boolean isCollection(Class<T> type) {
return Collection.class.isAssignableFrom(type);
}}
9.environments 环境配置 MyBatis可以注册多个数据源(DataSource) ,每个数据源分为两大部分,一个是数据源的配置,另一个是数据库事务(transactionManager)的配置。但是要注意,每个库要对应一个sqlSessionFactory,既有2个数据源 就要配2个实例。
例如:
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"></transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://127.0.0.1:3306/spring_test?useUnicode=true&characterEncoding=UTF-8"/>
<!-- 配置userName -->
<property name="username" value="root"></property>
<!-- 配置密码 -->
<property name="password" value="root"></property>
</dataSource>
</environment>
</environments>
注意关键点:
默认的环境 ID(比如:default=”development”)。
每个 environment 元素定义的环境 ID(比如:id=”development”)。
事务管理器的配置(比如:type=”JDBC”)。
数据源的配置(比如:type=”POOLED”)。
默认的环境和环境 ID 是一目了然的。随你怎么命名,只要保证默认环境要匹配其中一个环境ID。
POOLED PooledDataSourceFactory 使用连接池的数据源
UNPOOLED UnpooledDataSourceFactory 不使用连接池的数据源
JNDI JndiDataSourceFactory 使用JNDI实现的数据源
type=”POOLED” MyBatis会创建PooledDataSource实例 type=”UNPOOLED” MyBatis会创建UnpooledDataSource实例type=”JNDI” MyBatis会从JNDI服务上查找DataSource实例 。
10.transactionManager 事务管理器, 在MyBatis中有两种类型的事务管理器。
第一种 :transactionManager type="JDBC"
第二种 :transactionManager type="MANAGED"
JDBC 这个是直接使用JDBC的提交和回滚设置,它依赖于从数据源中得到的链接来管理事务作用域。
MANAGED这个配置不会提交和回滚事务,而是让容器来管理事务的整个生命周期。(例如服务器上下文)。默认情况下它会关闭链接。可以配置 closeConnection 属性设置为 false 来阻止它关闭连接。 如果用spring+myBatis 可以不用配置事务管理器,因为spring的事务会覆盖mybatis的事。以spring 的为准。
例如:
<transactionManager type="MANAGED">
<property name="closeConnection" value="false"/>
</transactionManager>
11.mappers 映射器 。映射器主要用于映射你的sql模板语句,我们要告诉MyBatis你的文件位置在什么地方。
例如:
<mappers>
<mapper resource="UserInfoMapping.xml"/>
<mapper resource="ScoreMapping.xml"/>
<!-- 如果用注解的方式需要配置上calss。因为mybatis底层是通过动态代理的方式来实现的=。= -->
<mapper class="com.test.service.interfaces.ScoreServiceInterface"/>
</mappers>
例如:UserInfoMapping.xml
<!-- 配置对应的映射 -->
<mapper namespace="com.test.service.imp.UserInfoServiceImp">
<!-- 通过id查询 resultType="user" 因为之前已经命名过别名了 -->
<select id="getUserInfoById" parameterType="int" resultType="user">
select * from userInfo where id =#{id}
</select>
</mapper>