引言
上一篇博客总结了mybatis框架的核心组件,本篇博客总结的内容是mybatis核心配置文件的元素信息以及配置元素的作用等。
概述
mybatis是通过核心配置文件实现ORM映射,一般起名为mybatis-config.xml。该配置文件中包含很多的元素,我们先通过一个mybatis核心配置文件的层次结构来简单认识一下这些元素。
<?xml version="1.0" encoding="UTF-8"?>
<configuration> <!--配置-->
<properties/><!--属性-->
<settings/> <!--设置-->
<typeAliases/> <!--类型命名-->
<typeHandlers/> <!--类型处理器-->
<objectFactory/><!--对象工厂-->
<plugins/> <!--插件-->
<environments> <!--配置环境-->
<environment> <!--环境变量-->
<transactionManager/><!--事务管理器-->
<dataSource/><!--数据源-->
</environment>
</environments>
<databaseIdProvider/> <!--数据库厂商标识-->
<mappers/> <!--映射器-->
</configuration>
内容
了解了概述中的目录结构中的元素,接下来我们就需要一一分析并理解各个元素的用法。
一 properties
1 作用:配置属性
2 配置方式:
(1)property子元素,配置代码示例如下
<properties>
<properties name="driver" value="com.mysql.jdbc.Driver"/>
<properties name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<properties name="username" value="root"/>
<properties name="password" value="****"/>
</properties>
配置参数在配置文件中怎么使用?
<dataSource type="POOLED">
<properties name="driver" value="${driver}"/>
<properties name="url" value="{url}"/>
<properties name="username" value="${username}"/>
<properties name="password" value="${password}"/>
</dataSource>
(2)properties配置文件:方便在多个配置文件中重复使用,便于修改和维护。
properties文件代码示例:
#数据库配置文件
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mybatis
username=root
password=****
如何使用?将该文件放到源包下,引入即可:<properties resource="jdbc.properties"/>
3 程序参数传递:有的时候为了数据的安全,在jdbc.properties配置密文,通过程序明文解密,保证系统的安全。
4 三种配置方式的优先级:第三种通过程序方法参数传递的属性具有最高优先级,resource/url属性中指定的配置文件次之,最低优先级是properties元素中指定的属性。
二 settings
settings是mybatis最复杂的配置,也是最重要的配置,配置内容繁多,这里不予总结,配置内容项自行了解,那么如何配置哪? 完整的配置示例如下
<settings>
<settings name="cacheEnable" value="true"/>
<settings name="lazyLoadingEnabled" value="true"/>
<settings name="multipleResultSetsEnabled" value="true"/>
<settings name="useColumnLabel" value="true"/>
<settings name="useGeneratedKeys" value="false"/>
<settings name="autoMappingBehavior" value="PARTIAL"/>
<settings name="defaultExecutorType" value="SIMPLE"/>
<settings name="defaultStatementTimeout" value="25"/>
<settings name="safeRowBoundsEnabled" value="false"/>
<settings name="mapUnderscoreToCamelCase" value="false"/>
<settings name="localCacheScope" value="SESSION"/>
<settings name="jdbcTypeForNull" value="OTHER"/>
<settings name="lazyLoadTriggerMethods" value="equals,clone,hashCode,toString"/>
</settings>
三 typeAliases
1 作用:别名可以代替过长类全限定名,在mybatis上下文中使用。
2 分类(1)系统自定义别名:如下表
(2)自定义别名:示例代码如下,使用role代替其类的全路径,减少配置的复杂度
<!--定义别名--!>
<typeAliases>
<typeAlias alias="role" type="com.liming.domain.po.Role"/>
</typeAlias>
四 typeHandler
1 作用:预处理语句(PreparedStatemen)中设置参数或者从结果集(ResultSet)中取值,都需要注册了的typeHandler进行类型转换。
2 分类:(1)系统定义
1)系统注册的TypeHandler
2)代码示例
public TypeHandlerRegistry(){
register(Boolean.class, new BooleanTypeHandler());
register(boolean.class, new BooleanTypeHandler());
register(JdbcType.BOOLEAN, new BooleanTypeHandler());
register(JdbcType.BIT, new BooleanTypeHandler());
......
register(Character.class, new CharacterTypeHandler());
register(char.class, new CharacterTypeHandler());
}
3)常用配置:java类型(javaType)、JDBC类型(jdbcType)。TypeHandler将参数从javaType转换为jdbcType,或者从数据库取出结果时把jdbcType转换为javaType。
(2)自定义
1)注册自定义typeHandler,重新覆盖字符串参数的typeHandler
<typeHandlers>
<typeHandler jdbc="VARCHAR" javaType="string"
handler="com.liming.domain.typeHandler.myStringTypeHandler"/>
</typeHandlers>
2)通过扫描注册typeHandle
<typeHandlers>
<package name="com.liming.domain.typeHandler"/>
</typeHandlers>
(3)枚举:mybatis提供了俩个转化枚举类型的typeHandle:org.apache.ibatis.type.EnumTypeHandler和org.apache.ibatis.type.EnumOrdinalTypeHandler。
五 ObjectFactory
1 作用:mybatis构建结果返回的时候,会使用ObjectFactory(对象工厂)构建POJO。
2 分类 :(1)默认的,mybatis中默认的ObjectFactory是由org.apache.ibatis.reflection.factory.DefaultObjectFactory来提供服务的。
(2)自定义 ,定义新的ObjectFactory代码示例如下,实现代码的时候,我们新的ObjectFactory类直接继承DefaultObjectFactory来实现ObjectFactory的接口。
<objectFactory type="com.liming.domain.objectFactory.MyObjectFactory">
<property name="name" value="MyObjectFactory"/>
</objectFactory>
六 plugins
七 environments
1 作用:主要是用来配置连接池的数据源。
2 数据源俩大部分:
(1)数据库源的配置,通过dataSource标签来配置数据源连接信息,通过子标签property来定义数据库的各类参数,type属性代表数据库连接方式的配置,提供如下四种:
1)UNPOOLED,非连接池数据库(UnpooledDataSource);
2)POOLED,连接池数据库(PooledDataSource);
3)JNDI,JNDI数据源(JNDIDataSource);
4)自定义数据源,必须实现org.apache.ibatis.datasource.DataSourceFactory接口
(2)数据库事务的配置,通过transactionManager标签来配置,通过子标签property来配置数据源的各类属性,type属性包含如下三种配置方式
1)JDBC,采用JDBC方式管理事务,在独立编码中常用;
2)MANAGED,采用容器方式管理事务,在JNDI数据源中常用;
3)自定义,由开发者自定义数据库事务管理方法,适用于特殊应用;
(3)一个数据源完整配置的代码示例
<environments default="development">
<environment id="development">
<transactionManager type="JDBC">
<property name="autoCommit" value="false">
</transactionManager>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis"/>
<property name="username" value="root"/>
<property name="password" value="****"/>
</dataSource>
</environment>
</environments>
备注:environment中的属性default,表明缺省情况下,我们启动哪个数据源配置。
八 databaseIdProvider:它的作用在于指定SQL到对应的数据库厂商提供的数据库中运行,一般应用较少,使用不同厂商数据库的情况较少。mybatis也为数据库厂商标识提供系统默认规则和自定义规则俩种方式,有兴趣自行了解即可。
九 mappers
1 概述:映射器是mybatis最复杂最核心的组件
2 引入映射器的方法:
(1)用文件路径引入映射器
<mappers>
<mapper resource="对应mapper接口全路径的配置文件">
</mappers>
(2)用包名引入映射器
<mappers>
<mapper resource="对应mapper接口包的全路基">
</mappers>
(3)用类注册引入映射器
<mappers>
<mapper resource="对应mapper接口类的路径">
</mappers>
(4)用xml配置文件引入映射器
<mappers>
<mapper url="file:///var/mappers+文件路径">
</mappers>
3 引入映射器步骤
(1)定义映射器接口
package com.liming.domain.mapper;
import java.util.List;
import com.liming.domain.po.User;
public interface UserMapper{
public User getUser(Int id);
}
(2)对应映射器接口的配置文件:定义mapper映射规则和SQL语句
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liming.domain.mapper.UserMapper">
<select id="getUser" parameterType="int"
resultType="com.liming.domain.po.User">
select id, role_name as roleName, note from t_role where id=#{id}
</select>
</mapper>
(3)在核心配置文件SqlMapConfig.xml中引入映射器
<mappers>
<mapper resource="com/liming/domain/mapper/userMapper.xml"/>
</mappers>
总结
mybatis的配置文件是学习mybatis必须要掌握的,核心是配置文件的编写过程与执行原理,前提需要我们了解配置文件的构成,以及配置文件的元素与内容。这些知识我们可以多多积累,不断丰富自己的经验。