0%

Mybatis-入门(三)

前言

经过了增删改查的编写,我们对 Mybatis 的使用有了一个大致的了解,但是仅仅知道增删改查的使用还不够,就好像我们使用 Nginx 去作为服务器,我们作为程序员不仅是要用,更多的是去配置他们一样。所以我们也要来学习一下 Mybatis 的配置,也是我们真正要掌握的能力。

核心配置文件

官方建议把配置文件命名为:mybatis-config.xml,配置文档中的层级机构如下:

  • configuration(配置)
    • properties(属性)[完全掌握]
    • settings(设置)[部分掌握]
    • typeAliases(类型别名)[完全掌握]
    • typeHandlers(类型处理器)[了解]
    • objectFactory(对象工厂)[了解]
    • plugins(插件)[了解]
    • environments(环境配置)[完全掌握]
      • environment(环境变量)
        • transactionManager(事务管理器)
        • dataSource(数据源)
    • databaseIdProvider(数据库厂商标识)[了解]
    • mappers(映射器)[完全掌握]

看着多,我们一个一个的看。我们进入配置的时候最先配置的肯定是连接数据库的环境配置。所以我们先看环境配置。

environments(环境配置)

Mybatis 是可以配置多个环境的,这种机制有助于 SQL 隐射应用于多个数据库之中。例如:开发的时候我们用开发数据库、生产的时候我们使用生产数据库。

不过要记住:尽管可以配置多个环境,但每个 SqlSessionFactory 实例只能选择一种环境。

我们来看看:配置中的一些描述,这个是我配置的环境

1
<?xml version="1.0" encoding="UTF-8" ?>
2
<!DOCTYPE configuration
3
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
4
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
5
<!-- 核心配置文件 -->
6
<configuration>
7
    <!-- 多个开发环境配置 -->
8
    <!-- 这里可以配置多个环境,但是default是指定我们默认使用的环境是哪个 -->
9
    <!-- 修改值,只需要对应 <environment> 的id即可,这里默认的是development -->
10
    <environments default="development">
11
        <!-- id 是对环境的命名 -->
12
        <environment id="development">
13
            <!-- 事务管理器 -->
14
            <transactionManager type="JDBC"/>
15
            <dataSource type="POOLED">
16
                <property name="driver" value="com.mysql.jdbc.Driver"/>
17
                <property name="url"
18
                          value="jdbc:mysql://localhost:3306/mybatis?useSSL=true&amp;useUnicode=true&amp;characterEncoding=utf8&amp;serverTimezone=Hongkong"/>
19
                <property name="username" value="root"/>
20
                <property name="password" value=""/>
21
            </dataSource>
22
        </environment>
23
24
        <environment id="test">
25
            <transactionManager type="JDBC"/>
26
            <dataSource type="POOLED">
27
                <property name="driver" value="com.mysql.jdbc.Driver"/>
28
                <property name="url"
29
                          value=""/>
30
                <property name="username" value=""/>
31
                <property name="password" value=""/>
32
            </dataSource>
33
        </environment>
34
    </environments>
35
</configuration>

通过上面例子,我们可以学会使用配置多套运行环境。Mybatis 默认的事务管理器就是 JDBC,默认连接池是 POOLED。

属性(properties)

我们可以通过 properties 属性来实现引用配置文件。这些属性是可以外部配置并且替换的,既可以在典型的 Java 属性文件中配置,亦可以通过 properties 元素的子元素来传递。

这里我们在 resources 中创建 db.properties 文件,输入以下内容

1
driver=com.mysql.jdbc.Driver
2
url=jdbc:mysql://localhost:3306/mybatis?useSSL=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Hongkong
3
username=root
4
password=

输入完成后,这个文件可以在我们的核心配置文件中引入,引入时,我们需要注意顺序,引入顺序如上面,核心配置文件下面给出的顺序跳转到配置处

修改后的配置文件如下:

1
<?xml version="1.0" encoding="UTF-8" ?>
2
<!DOCTYPE configuration
3
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
4
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
5
<!-- 核心配置文件 -->
6
<configuration>
7
    <!-- 引入外部配置文件 -->
8
    <!-- 因为 db.properties 和 mybatis-config.xml 在同一个文件下,我们直接输入文件名就好了。 -->
9
    <properties resource="db.properties"/>
10
11
    <!-- 多个开发环境配置 -->
12
    <environments default="development">
13
        <environment id="development">
14
            <!-- 事务管理 -->
15
            <transactionManager type="JDBC"/>
16
            <dataSource type="POOLED">
17
                <!-- 原来手写的文件,我们这里就可以直接使用 db.properties 中的定义的变量所代替 -->
18
                <property name="driver" value="${driver}"/>
19
                <property name="url" value="${url}"/>
20
                <property name="username" value="${username}"/>
21
                <property name="password" value="${password}"/>
22
            </dataSource>
23
        </environment>
24
    </environments>
25
26
    <!-- 每一个Mapper.xml都需要在mybatis核心配置文件中注册-->
27
    <mappers>
28
        <mapper resource="com/yubulang/dao/UserMapper.xml"/>
29
    </mappers>
30
</configuration>

当然,我们的<properties>标签之中还能写入单独的属性<property>,我们也可以把对应的属性单独定义在这里。具体的代码大家可以自己尝试一下。如果定义的属性同时存在于 resource 外部配置文件中,同时使用了<property>,他会有限使用外部文件中定义的变量。

别名(typeAliases)

  • 类型别名可以为 Java 类设置一个缩写的名字。
  • 它仅用于 XML 配置,意在降低冗余的全限定类名书写。

之前我们在 UserMapper.xml 中的类型上都需要使用全限定类名,这样写起来真的是又臭又长,就像下面这样

1
<select id="getUserList" resultType="com.yubulang.pojo.User">
2
    select * from users;
3
</select>

我们更加希望的是 resultType="User" 要达到这个目的,我们需要在 mybatis-config.xml 中设置<typeAliases>当然还是要提醒大家注意配置的顺序,必须按顺序配置,这里我给出了两个方式:

1
<?xml version="1.0" encoding="UTF-8" ?>
2
<!DOCTYPE configuration
3
        PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
4
        "http://mybatis.org/dtd/mybatis-3-config.dtd">
5
<!-- 核心配置文件 -->
6
<configuration>
7
    <!-- 引入外部配置文件 -->
8
    <properties resource="db.properties"/>
9
10
    <!-- 第一个方式:挨个给实体类起别名 -->
11
    <typeAliases>
12
        <typeAlias type="com.yubulang.pojo.User" alias="User"/>
13
    </typeAliases>
14
15
    <!-- 第二个方式:直接扫描指定包 -->
16
    <!-- 这里需要注意,我们扫描包的时候,它的默认别名是类名,首字母小写! -->
17
    <!-- <typeAliases>
18
        <package name="com.yubulang.pojo"/>
19
    </typeAliases> -->
20
21
    <!-- 多个开发环境配置 -->
22
    <environments default="development">
23
        <environment id="development">
24
            <!-- 事务管理 -->
25
            <transactionManager type="JDBC"/>
26
            <dataSource type="POOLED">
27
                <property name="driver" value="${driver}"/>
28
                <property name="url" value="${url}"/>
29
                <property name="username" value="${username}"/>
30
                <property name="password" value="${password}"/>
31
            </dataSource>
32
        </environment>
33
    </environments>
34
35
    <!-- 每一个Mapper.xml都需要在mybatis核心配置文件中注册-->
36
    <mappers>
37
        <mapper resource="com/yubulang/dao/UserMapper.xml"/>
38
    </mappers>
39
</configuration>

这个时候,我们的 com/yubulang/dao/UserMapper.xml 就可以使用指定的别名了,不需要再写常常的全限定类名。

何时使用别名(typeAliases),用哪种?

  • 在实体类比较少的时候,使用第一种
  • 在实体类比较多的时候,使用第二种

第一种可以自定义别名,第二种则不行,如果非要修改,可以使用 @Alias() 注解给对应的实体类起别名。像下面这样:

1
package com.yubulang.pojo;
2
3
import org.apache.ibatis.type.Alias;
4
5
@Alias("CustomUser")
6
class User {
7
    ...
8
}

Mybatis 为常见的 Java 类型内建的类型别名。它们都是不区分大小写的,注意,为了应对原始类型的命名重复,采取了特殊的命名风格。
❤【连接传送门】❤

设置(settings)

这是 MyBatis 中极为重要的调整设置,它们会改变 MyBatis 的运行时行为。目前记住对应的日志处理器怎么设置就好。具体的日志选项。

❤【连接传送门】❤

其他配置,用到再查,因为很少用。

  • typeHandlers(类型处理器)
  • objectFactory(对象工厂)
  • plugins(插件)
    • mybatis-generator-core
    • mybatis-plus
    • 通用 mapper

映射器(mappers)

MapperRegistry:注册绑定我们的 Mapper 文件;
方式一:

1
<mappers>
2
    <mapper resource="com/yubulang/dao/UserMapper.xml"/>
3
</mappers>

方式二:使用 class 文件绑定注册

1
<mappers>
2
    <mapper class="com.yubulang.dao.UserMapper"/>
3
</mappers>

方式三:使用扫描包进行注入绑定

1
<mappers>
2
    <package class="com.yubulang.dao"/>
3
</mappers>

方式二和三注意点:

  • 接口和他的 Mapper 配置文件必须同名
  • 接口和它的 Mapper 配置文件必须在同一包下

总结

通过学习这里的配置案例,我们应该已经达到以下的目的:

  • 将数据库配置文件外部引入
  • 实体类别名
  • 保证 UserMapper 接口和 UserMapper.xml 改为一致,并且放在同一个包下