Mybatis配置文件
configure配置文件头:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
mapping映射文件头:
<?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">
所含有元素
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration> <!-- 配置 -->
<properties/> <!-- 属性 -->
<settings/> <!-- 设置 -->
<typeAliases/> <!-- 类型命名 -->
<typeHandlers/> <!-- 类型处理器 -->
<objectFactory/> <!-- 对象工厂 -->
<plugins/> <!-- 插件 -->
<environments> <!-- 配置环境 -->
<environment> <!-- 环境变量 -->
<transactionManager/> <!-- 事务管理器 -->
<dataSource/> <!-- 数据源 -->
</environment>
</environments>
<databaseIdProvider/> <!-- 数据库厂商标识 -->
<mappers/> <!-- 映射器 -->
</configuration>
但是需要注意的是,MyBatis 配置项的顺序不能颠倒。如果颠倒了它们的顺序,那么在 MyBatis 启动阶段就会发生异常,导致程序无法运行。
1.typeAliases作用
标签介绍:
在MyBatis的SQL映射配置文件中,常使用 parameterType、resultType之类的参数设置SQL语句的输入/输出参数,一般参数都是一个Java类型的数据,有基本数据类型或封装类型,但是一般都要声明该类型的全路径名称,例如“java.lang.String”、“java.util.HashMap”或者“com.pjb.mybatis.po.User”,如下:
<select id="findUserByUsername" parameterType="java.lang.String" resultType="com.gaga.shopping.pojo.User">
SELECT * FROM USER WHERE username LIKE '%${value}%'
</select>
那么,是否可以像在Java类中一样,在某个地方声明该类的全路径名称,然后在使用是仅使用该类型的别名呢?通过设置MyBatis的全局配置文件中的typeAliases属性,就可以为SQL映射文件中的输入/输出参数设置类型别名,然后在SQL映射配置文件中指定输入/输出参数类型时使用别名,配置如下:
<!--别名设置-->
<typeAliases>
<typeAlias alias="user" type="com.gaga.shopping.pojo.User"/>
<typeAlias alias="str" type="java.lang.String"/>
</typeAliases>
此时在SQL映射配置文件中可以使用别名来指定输入/输出参数的类型:
<select id="findUserByUsername" parameterType="str" resultType="user">
SELECT * FROM USER WHERE username LIKE '%${value}%'
</select>
当然,一般会将JavaBean类型的封装类放置在一个包下面(如本示例中的 com.pjb.mybatis.po 包)一个一个配置别名很繁琐,所以MyBatis提供了批量定义别名的方法,指定包名即可,程序会为该包下的所有包装类加上别名。c程序定义别名的规则就是对应包装类的类名首字母变为小写。配置如下:
<!--别名设置-->
<typeAliases>
<package name="com.gaga.shopping.pojo"/>
</typeAliases>
别名也可以使用注解来实现,实现方式就是在需要指定别名的类声明头添加“@Alias”注解,其中的参数就是该类对应的别名,代码如下:
@Alias("user")
public class User{
//其他代码
}
settings标签
在 MyBatis 中 settings 是最复杂的配置,它能深刻影响 MyBatis 底层的运行,但是在大部分情况下使用默认值便可以运行,所以在大部分情况下不需要大量配置它,只需要修改一些常用的规则即可,比如自动映射、驼峰命名映射、级联规则、是否启动缓存、执行器(Executor)类型等。settings 配置项说明
settings 的配置项很多,但是真正用到的不会太多,我们把常用的配置项研究清楚就可以了,比如关于缓存的 cacheEnabled,关于级联的 lazyLoadingEnabled 和 aggressiveLazy Loading,关于自动映射的 autoMappingBehavior 和 mapUnderscoreToCamelCase,关于执行器类型的 defaultExecutorType 等。
这里给出一个全量的配置样例:
<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>