Mybatis全局配置文件元素详解(二)

(一)Mybatis全局配置文件简介

通常在项目中只配置一个Mybatis全局配置文件,并且编写后不会轻易改写。Mybatis全局配置文件通常用来配置数据库连接和加载Mapper.xml资源文件。
参考:Mybatis官方文档

(二)Mybatis全局配置文件主要元素

如图所示
这里写图片描述


项目结构

这里写图片描述这里写图片描述

1. <properties>元素

<properties> 是一个配置属性的元素,通常用来配置数据库连接的属性。

(一)在项目的src目录下创建db.properties文件

jdbc.driver=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/mybatis
jdbc.username=root
jdbc.password=root

(二)在mybatis-config.xml使用 <properties> 配置db.properties文件

<properties resource="db.properties"/>

(三)mybatis-config.xml的内容

<?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>
    <!--加载db.properties文件-->
    <properties resource="db.properties"/>
    <!--1.配置环境 ,默认的环境id为mysql -->
    <environments default="mysql">
        <!--1.2.配置id为mysql的数据库环境 -->
        <environment id="mysql">
            <!-- 使用JDBC的事务管理 -->
            <transactionManager type="JDBC" />
            <!--数据库连接池 -->
            <dataSource type="POOLED">
                <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>
    </environments>

</configuration>

2. <settings>元素

01.<settings>元素用于改变Mybatis运行时的行为,比如开启二级缓存、开启延时加载等操作。

02.<settings>元素的常见配置MyBatis XML配置

(一)一级缓存默认开启,缓存在sqlSession中

@Test//一级缓存默认开启,缓存在sqlSesssion中
    public void cacheOnetest() {
        SqlSession sqlSession = MybatisUtils.getSession();
        Customer customer = sqlSession.selectOne("com.wang.mapper" + ".CustomerMapper.findCustomerById", 1);
        System.out.println(customer.toString());

        //再次查询
        customer = sqlSession.selectOne("com.wang.mapper" + ".CustomerMapper.findCustomerById", 1);
        System.out.println(customer.toString());
        sqlSession.close();
    }

结果:

注意:只发送一条SQL语句

DEBUG [main] - ==>  Preparing: select*from t_customer where id=? 
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <==      Total: 1
Customer [id=1, username=joy, jobs=doctor, phone=18990123432]
Customer [id=1, username=joy, jobs=doctor, phone=18990123432]

(二)一级缓存默认开启,缓存在sqlSession中,并执行清空一级缓存操作


    @Test//一级缓存默认开启,缓存在sqlSesssion中
    public void cacheOnetest() {
        SqlSession sqlSession = MybatisUtils.getSession();
        Customer customer = sqlSession.selectOne("com.wang.mapper" + ".CustomerMapper.findCustomerById", 1);
        System.out.println(customer.toString());

        //清空一级缓存
        sqlSession.commit();
        //再次查询
        customer = sqlSession.selectOne("com.wang.mapper" + ".CustomerMapper.findCustomerById", 1);
        System.out.println(customer.toString());
        sqlSession.close();
    }

结果:

注意:向数据库发送两条SQL语句

DEBUG [main] - ==>  Preparing: select*from t_customer where id=? 
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <==      Total: 1
Customer [id=1, username=joy, jobs=doctor, phone=18990123432]
DEBUG [main] - ==>  Preparing: select*from t_customer where id=? 
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <==      Total: 1
Customer [id=1, username=joy, jobs=doctor, phone=18990123432]

(三)二级缓存在SqlSessionFactory中,需要手动在mybatis-config.xml开启。

第一步:在mybatis-config.xml<settings> 标签开启二级缓存
<?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>
    <!--加载db.properties文件 -->
    <properties resource="db.properties" />
    <settings>
        <!--开启二级缓存,true表示开启,默认是关闭的-->
        <setting name="cacheEnabled" value="true" />
    </settings>
    <!--1.配置环境 ,默认的环境id为mysql -->
    <environments default="mysql">
        <!--1.2.配置id为mysql的数据库环境 -->
        <environment id="mysql">
            <!-- 使用JDBC的事务管理 -->
            <transactionManager type="JDBC" />
            <!--数据库连接池 -->
            <dataSource type="POOLED">
                <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>
    </environments>

</configuration>
第二步:CustomerMapper.xml中使用<cache> 标签开启二级缓存
<?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">
<!-- namespace表示命名空间 -->
<mapper namespace="com.wang.mapper.CustomerMapper">

    <!--开启二级缓存,空标签即可表示开启缓存-->
    <cache/>
    <!--1.根据客户编号获取客户信息 -->
    <select id="findCustomerById" parameterType="Integer"
        resultType="com.wang.po.Customer">
        select*from t_customer where id=#{id}
    </select>
</mapper>
3.第三步:POJO类必须实现序列化接口
public class Customer implements Serializable{
    private Integer id;       
    private String username;  
    private String jobs;       
    private String phone;  
    ----省略setter和getter----
    @Override
    public String toString() {
        return "Customer [id=" + id + ", username=" + username + 
                       ", jobs=" + jobs + ", phone=" + phone + "]";
    }
}
4.测试二级缓存

    @Test
    public void cacheTwotest() {
        //第一次查询会话
        SqlSession sqlSession = MybatisUtils.getSession();
        Customer customer = sqlSession.selectOne("com.wang.mapper" + ".CustomerMapper.findCustomerById", 1);
        System.out.println(customer.toString());
        sqlSession.close();

        //第二次查询会话
        sqlSession = MybatisUtils.getSession();
        customer = sqlSession.selectOne("com.wang.mapper" + ".CustomerMapper.findCustomerById", 1);
        System.out.println(customer.toString());
        sqlSession.close();

    }

结果:

第一步:缓存中没有数据,再向数据库中发送SQL
DEBUG [main] - Cache Hit Ratio [com.wang.mapper.CustomerMapper]: 0.0
DEBUG [main] - ==>  Preparing: select*from t_customer where id=? 
DEBUG [main] - ==> Parameters: 1(Integer)
DEBUG [main] - <==      Total: 1
Customer [id=1, username=joy, jobs=doctor, phone=18990123432]

第二步:二级缓存保存了第一次查询的数据,所以第二次不需要再次向数据库发送SQL
DEBUG [main] - Cache Hit Ratio [com.wang.mapper.CustomerMapper]: 0.5
Customer [id=1, username=joy, jobs=doctor, phone=18990123432]

3. <typeAliases>元素

<typeAliases> 元素 用于为配置文件中的Java类型设置一个别名,目的是减少权限定类名的冗余。

01.配置单个POJO类

第一步:在mybatis-config.xml文件中添加<typeAliases>元素
<?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>
    <!-- 定义别名--> 
    <typeAliases>
       <typeAlias alias="customer" type="com.wang.po.Customer"/>
    </typeAliases>

</configuration>
第二步:使用mybatis-config.xml文件中配置的别名替换CustomerMapper.xml<select> 元素中的resultType属性的值。
<?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">
<!-- namespace表示命名空间 -->
<mapper namespace="com.wang.mapper.CustomerMapper">

     <!--1.resultType使用全限定类名 -->
    <select id="findCustomerById" parameterType="Integer"
        resultType="com.wang.po.Customer">
        select*from t_customer where id=#{id}
    </select>

    <!--2.使用别名代替-->
    <select id="findCustomerById" parameterType="Integer"
        resultType="customer">
        select*from t_customer where id=#{id}
     </select>
</mapper>

02.配置多个POJO类

第一步:在mybatis-config.xml文件中添加<typeAliases>元素
<?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>
    <!-- 使用自动扫描包来定义别名--> 
    <typeAliases>
      <package name="com.wang.po"/>
    </typeAliases>

</configuration>
第二步:CustomerMapper.xml<select> 元素中的resultType属性的值就是该包下类以首字母为小写的非限定类名来作为别名。
<?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">
<!-- namespace表示命名空间 -->
<mapper namespace="com.wang.mapper.CustomerMapper">

    <!--2.以Customer类首字母为小写作为别名-->
    <select id="findCustomerById" parameterType="Integer"
        resultType="customer">
        select*from t_customer where id=#{id}
     </select>
</mapper>

4. <mapper>元素

在mybatis-config.xml配置文件中,使用<mapper>元素元素指定Mybatis映射文件的位置。有以下4中引入映射文件的方式。

01.使用类路径引入
<mappers>
    <mapper resource="com/wang/mapper/CustomerMapper.xml" />
</mappers>
02.使用本地文件路径引入
<mappers>
    <mapper resource="file:///D:/com/wang/mapper/CustomerMapper.xml" />
</mappers>
03.使用接口类映入
<mappers>
    <mapper resource="com.wang.mapper.CustomerMapper" />
</mappers>
04.使用包引入
<mappers>
    <mapper resource="com.wang.mapper" />
</mappers>

5. <environments>元素

<environments>元素用来配置多种数据库。

<environments default="mysql">
        <!--1.2.配置id为mysql的数据库环境 -->
        <environment id="mysql">
            <!-- 使用JDBC的事务管理 -->
            <transactionManager type="JDBC" />
            <!--数据库连接池 -->
            <dataSource type="POOLED">
                <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>
    </environments>

猜你喜欢

转载自blog.csdn.net/weixin_36279318/article/details/79980541
今日推荐