一、学习目标
在简单学习了创建mybatis程序和和利用xml映射文件实现简单的增删改查操作后,接下来按照官方文档学习mybatis的配置和优化。在文档中提到,MyBatis 的配置文件包含了会深深影响 MyBatis 行为的设置和属性信息,配置文档的顶层结构如下:
二、配置优化
1.属性优化
属性可以在外部进行配置,并可以进行动态替换。你既可以在典型的 Java 属性文件中配置这些属性,也可以在 properties 元素的子元素中设置。
以第一天博客里的mybatis程序为例,其中的mybatisConfig.xml文件里
<properties resource="db.properties"/>
设置好的属性可以在整个配置文件中用来替换需要动态配置的属性值,例如在mybatisconfig.XMl文件中,下图中的 username 和 password 将会由 db.properties中设置的相应值来替换。 driver 和 url 属性将会由 config文件中对应的值来替换
<environments default="development">
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED">
<!-- JDBC 驱动-->
<property name="driver" value="${mysql.driver}"/>
<!-- url数据库的 JDBC URL地址。-->
<property name="url" value="${mysql.url}"/>
<property name="username" value="${mysql.username}"/>
<property name="password" value="${mysql.password}"/>
</dataSource>
</environment>
</environments>
db.properties如下:
除了以上方式外,也可以在 SqlSessionFactoryBuilder.build() 方法中传入属性值。感兴趣的可自行了解。
此外还有需要注意的是,如果一个属性在不只一个地方进行了配置,那么,MyBatis 将按照下面的顺序来加载:
- 首先读取在 properties 元素体内指定的属性。
- 然后根据 properties 元素中的 resource 属性读取类路径下属性文件,或根据 url 属性指定的路径读取属性文件,并覆盖之前读取过的同名属性。
- 最后读取作为方法参数传递的属性,并覆盖之前读取过的同名属性。
2.别名优化
类型别名可为 Java 类型设置一个缩写名字。 它仅用于 XML 配置,意在降低冗余的全限定类名书写。
<typeAliases>
<typeAlias type="com.tyut.pojo.User" alias="user"/>
</typeAliases>
以第二天的学习为例,如果在配置了mybatisconfig.xml配置文件中进行了上述配置,则可在usermapper.xml文件中进行简化。将com.tyut.pojo.User替换成user,如下所示。
<select id="selectUser" resultType="user">
select * from users
</select>
除了上述方式,也可以采取指定一个包名的方式,如下所示,MyBatis 会在com.tyut.pojo包下面搜索需要的 Java Bean。
<typeAliases>
<package name="com.tyut.pojo"/>
</typeAliases>
要注意的是在没有注解的情况下,会使用 Bean 的首字母小写的非限定类名来作为它的别名!
<select id="selectUser" resultType="user">
select * from users
</select>
也可在java bean类上加上注释 @Alias("user")
@Alias("user")
public class User {
}
3.设置
设置是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。在mybatis官方文档中mybatis – MyBatis 3 | 配置,以表格形式详细描述了设置中各项设置的含义、默认值等,所以在这里就不多描述。
以上图为例,就是开启了是否开启驼峰命名自动映射和日志工厂。
4.映射器
在进行了上述配置后, 我们还要定义 SQL 映射语句了。 但是,最重要的一点是,我们需要告诉 MyBatis 到哪里去找到这些语句。 在自动查找资源方面,最好的办法是直接告诉 MyBatis 到哪里去找映射文件。
方法有多种, 你可以使用相对于类路径的资源引用,或完全限定资源定位符(包括 file:///
形式的 URL),或类名和包名等,以下以第一天的博客内容展示三种方式
1.方式一 :使用完全限定资源定位符
<mappers>
<!--引入映射文件-->
<mapper resource="Mapper/UserMapper.xml"/>
<!--mapper class="com.tyut.dao.UserMapper"/-->
<!--package name="com.tyut.dao"/-->
</mappers>
2.方式二 :使用映射器接口实现类的完全限定类名
注意接口和xml文件在同一包下
<mappers>
<!--引入映射文件-->
<!--mapper resource="Mapper/UserMapper.xml"/-->
<mapper class="com.tyut.dao.UserMapper"/>
</mappers>
3.方式三 :将包内的映射器接口全部注册为映射器
<mappers>
<!--引入映射文件-->
<!--mapper resource="Mapper/UserMapper.xml"/-->
<!--mapper class="com.tyut.dao.UserMapper"/-->
<package name="com.tyut.dao"/>
</mappers>