mybatis的二级缓存使用

我们首先要知道mybatis中的一级缓存是在没有关闭session的时候,执行相同的select时候,二次以后的查询不会发送select语句至数据库,以减少对数据库的联机操作。

二级缓存是建立了2个session以后执行相同的select语句后依然也不会再数据库执行select语句,而内容依然从缓存中读取出来。
我们看一下如果使用mybatis的二级缓存;希望大家可以仔细阅读,里面有一些注意细节,这些细节对于初学者很有帮助。
(1)在mybatis的核心配置文件中开启二级环境配置
在这里插入图片描述

 <settings>
         <!--开启二级缓存的全局配置 -->
        <setting name="cacheEnabled" value="true"/>
    </settings>

(2)pojo映射类实现Serializable接口

package com.zxf.pojo;



import java.io.Serializable;


public class Employee implements Serializable{
    private String emp_no;
    private String emp_name;
    private String dept_id;
    private String emp_gender;

    public String getEmp_gender() {
        return emp_gender;
    }

    public void setEmp_gender(String emp_gender) {
        this.emp_gender = emp_gender;
    }

    

    public String getDept_id() {
        return dept_id;
    }

    public void setDept_id(String dept_id) {
        this.dept_id = dept_id;
    }

   

    public String getEmp_name() {
        return emp_name;
    }

    public void setEmp_name(String emp_name) {
        this.emp_name = emp_name;
    }

    public String getEmp_no() {

        return emp_no;
    }

    public void setEmp_no(String emp_no) {
        this.emp_no = emp_no;
    }
}

(3) Mapper数据库操作接口

public interface EmployeeMapper {
 public List<Employee> getAll4();
}

(4) Mapper接口映射配置文件

<?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">
<mapper namespace="com.zxf.mapper.EmployeeMapper">
    <!--二级缓存 -->
    <cache eviction="FIFO" flushInterval="6000" readOnly="false" size="1024"></cache>
      <select id="getAll4" resultType="emp">
        select  <include refid="emp_1"/>    from employee_basic
    </select>
    </mapper>

(5)测试类

@Test
    public void test2() throws Exception{
        InputStream is= Resources.getResourceAsStream("mybatis_config.xml");
        SqlSessionFactory factory=new SqlSessionFactoryBuilder().build(is);
        SqlSession session1=factory.openSession();
        SqlSession session2=factory.openSession();
        EmployeeMapper mapper1 = session1.getMapper(EmployeeMapper.class);
        EmployeeMapper mapper2=session2.getMapper(EmployeeMapper.class);
        List<Employee> all_1 = mapper1.getAll4();
        List<Employee> all_2 = mapper2.getAll4();
        for(Employee e:all_1){
            System.out.println(e.getEmp_name()+":"+e.getEmp_no());
        }
         session1.close();
        /*
            这里要记住一个地方,第二次查询必须要等第一次的session关闭以后才可以。
            否则二级缓存没有作用,依然还会执行二次select语句发送至数据库
         */

        for(Employee e:all_2){
            System.out.println(e.getEmp_name()+"===>"+e.getEmp_no());
        }
         session2.close();

    }

(6)运行结果1
在这里插入图片描述
在这里插入图片描述
运行结果2
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/zhang6132326/article/details/106578583
今日推荐