3.1、核心配置文件
- SqlMapConfig.xml
configuration(配置)
properties(属性)
settings(设置)
typeAliases(类型别名)
typeHandlers(类型处理器)
objectFactory(对象工厂)
plugins(插件)
environments(环境配置)
environment(环境变量)
transactionManager(事务管理器)
dataSource(数据源)
databaseIdProvider(数据库厂商标识)
mappers(映射器)
注意配置项的先后顺序:
The content of element type "configuration" must match "(properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)".
3.2、环境配置(environments)
MyBatis 可以配置成适应多种环境,这种机制有助于将 SQL 映射应用于多种数据库之中, 现实情况下有多种理由需要这么做。例如,开发、测试和生产环境需要有不同的配置;或者想在具有相同 Schema 的多个生产数据库中使用相同的 SQL 映射。还有许多类似的使用场景。
不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。
- 环境选择:environments标签的default属性的值即为选择的环境id;例如,选择测试环境,则default="test"(测试环境id="test")
<!-- 配置环境 -->
<environments default="development">
<!-- 开发环境 -->
<environment id="development">
<!-- 配置事务管理器类型 -->
<transactionManager type="JDBC"/>
<!-- 配置数据源(连接池) -->
<dataSource type="POOLED">
<!-- 配置连接数据库的4个基本信息 -->
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=ture&characterEncoding=UTF-8&serverTimezone=GMT%2B8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
<!-- 测试环境 -->
<environment id="test">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<property name="driver" value="com.mysql.cj.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/mybatis?useUnicode=ture&characterEncoding=UTF-8&serverTimezone=GMT%2B8"/>
<property name="username" value="root"/>
<property name="password" value="123456"/>
</dataSource>
</environment>
</environments>
Mybatis默认的事务管理器类型:JDBC,默认数据源(连接池):POOLED
3.3、属性(properties)
这些属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。
编写配置文件jdbcConfig.properties
jdbc.driver=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis?useUnicode=ture&characterEncoding=UTF-8&serverTimezone=GMT%2B8
jdbc.username=root
jdbc.password=123456
引入外部配置文件
<!-- 引入外部配置文件 -->
<properties resource="jdbcConfig.properties" />
调用外部配置文件变量
<!-- 测试环境 -->
<environment id="test">
<!-- 配置事务管理器类型 -->
<transactionManager type="JDBC"/>
<!-- 配置数据源(连接池) -->
<dataSource type="POOLED">
<!-- 配置连接数据库的4个基本信息 -->
<property name="driver" value="${jdbc.driver}"/>
<property name="url" value="${jdbc.url}"/>
<property name="username" value="${jdbc.username}"/>
<property name="password" value="${jdbc.password}"/>
</dataSource>
</environment>
-
可以直接引入外部文件
-
可以在其中增加一些配置
<!-- 引入外部配置文件并在其中添加一些配置 -->
<properties resource="jdbcConfig.properties">
<property name="username" value="root"/>
<property name="password" value="112233"/>
</properties>
- 当两个文件有同一字段时,优先使用外部文件的
3.4、类型别名(typeAliases)
类型别名可为 Java 类型设置一个缩写名字。它仅用于 XML 配置,意在降低冗余的全限定类名书写。
- 在SqlMapConfig.xml中配置别名
<!-- 配置别名 -->
<typeAliases>
<!-- 给实体类起别名 -->
<typeAlias type="com.mybatis.pojo.User" alias="User" />
</typeAliases>
- 在Mapper.xml中直接使用别名
<select id="findAll" resultType="User">
select * from user
</select>
也可以指定一个包名,MyBatis 会在包名下面搜索需要的 Java Bean
<!-- 配置别名 -->
<typeAliases>
<!-- 指定包名 -->
<package name="com.mybatis.pojo"/>
</typeAliases>
- 每一个在包
com.mybatis.pojo
中的 Java Bean,在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名。 比如com.mybatis.pojo.User
的别名为user
<select id="findAll" resultType="user">
select * from user
</select>
- 若有注解,则别名为其注解值
@Alias("hello")
public class User {
...
}
<select id="findAll" resultType="hello">
select * from user
</select>
**注意 :**注解需要配合 <package name="com.mybatis.pojo"/>
使用
**使用场景:**在实体来较少时使用第一种方式,如果实体类很多则建议使用第二种方式
3.5、设置(settings)
这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。
一个配置完整的 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>
我们暂时只需要了解以下三个:
3.6、映射器(mappers)
用于注册绑定Mapper配置文件
方式一:【推荐使用】
<!-- 使用相对于类路径的资源引用 -->
<mappers>
<mapper resource="com/mybatis/dao/UserMapper.xml"/>
</mappers>
方式二:
<!-- 使用映射器接口实现类的完全限定类名 -->
<mappers>
<mapper class="com.mybatis.dao.UserMapper"/>
</mappers>
方式三:
<!-- 将包内的映射器接口实现全部注册为映射器 -->
<mappers>
<package name="com.mybatis.dao"/>
</mappers>
注意点 :
-
接口和它的Mapper配置文件必须同名
-
Mapper配置文件存放路径有如下两种选择:
-
1、在 resources 目录下建与 java 目录的同结构目录
-
2、接口和它的Mapper配置文件必须在同一个包下(这种方式得解决Maven静态资源过滤问题,如下)
Maven静态资源过滤问题:在pom.xml中加入如下配置
<!-- 在build中配置resource,防止资源导出失败问题 --> <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build>
-
3.7、其他配置(初学暂时不做了解)
- typeHandlers(类型处理器)
- objectFactory(对象工厂)
- plugins(插件)
Q.E.D.