Mybatis-一级缓存

  1.Myabis的一级缓存

  一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就 会从缓存中直接获取,不会从数据库重新访问

  使一级缓存失效的四种情况:

    1) 不同的SqlSession对应不同的一级缓存

    2) 同一个SqlSession但是查询条件不同

    3) 同一个SqlSession两次查询期间执行了任何一次增删改操作

    4) 同一个SqlSession两次查询期间手动清空了缓存

    举例:
  同一个sqlSession方法同一个方法,只执行一次sql语句

    

     查看结果:

 

 

     可以看到只执行了一次sql语句 ,说明第二次查询时是从一级缓存中得到数据

          同一个SqlSession两次查询期间执行了任何一次增删改操作

    同一个sqlSession方法同一个方法,两次查询之间执行了任何一次增删改操作

    

 

 

     查看结果:

 

 

 

     可以看到 ,当两次相同查询语句之间执行了一次增删改操作,一共执行了三次sql语句,说明第二次查询时没有从一级缓存中取数据

 

               同一个SqlSession但是查询条件不同

    当同一个sqlSession执行同一个方法时,参数不一样时,第二次查询没有从一级缓存中获得数据

    

 

 

     查看结果:
    

 

 

       可以看到一共执行力两次sql语句,因为同一方法,不同参数

    

     同一个SqlSession两次查询期间手动清空了缓存

      在两次相同查询两个相同参数时,第一次查询完结果时清除缓存

    

 

     查看结果:  

 

     可以看到当第一次查询完结果时清除缓存,一级缓存失效,第二次查询时执行了sql语句

 

 

       不同的SqlSession对应不同的一级缓

    通过工具类创建两个sqlSession时,两次相同查询参数相同时

  

 

   查看结果:

  

 

       可以看到,执行了两次sql语句,说明一级缓存失效

 

  工具类编写  

package com.hrf.Utils;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;

import java.io.IOException;
import java.io.InputStream;

public class MybatisUtils {
    private static SqlSessionFactory factory= null;
        static {
            String config="Mybatis.xml";
            try {
                InputStream in =  Resources.getResourceAsStream(config);
                factory = new SqlSessionFactoryBuilder().build(in);
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    public static SqlSession getSqlSession(){
            SqlSession session = null;
            if (factory != null){
                session =factory.openSession(true);
            }
            return session;
    }
}

 

 

        

posted @ 2022-03-03 08:38  Soleili  阅读(92)  评论(0编辑  收藏  举报