Java教程

Mybatis入门(五)

本文主要是介绍Mybatis入门(五),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

一级缓存

一级缓存是SqlSession级别的,通过同一个SqlSession查询的数据会被缓存,下次查询相同的数据,就
会从缓存中直接获取,不会从数据库重新访问
使一级缓存失效的四种情况:
1) 不同的SqlSession对应不同的一级缓存:创建1个sqlSession进行查询操作,执行2次查询操作,控制台只打印了1次查询语句,第2次查询会从缓存中拿数据
    @Test
    public void testOneCache(){
        SqlSession sqlSession1 = SqlSessionUtils.getSqlSession();
        CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);
        Emp emp1 = mapper1.getEmpByEid(1);
        System.out.println(emp1);
        Emp emp2 = mapper1.getEmpByEid(1);
        System.out.println(emp2);
    }

# 创建2个sqlSession,2次执行同样的查询语句,控制台打印了2次查询语句,说明第2次查询并没有从缓存中拿数据
    @Test
    public void testOneCache(){
        SqlSession sqlSession1 = SqlSessionUtils.getSqlSession();
        CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);
        Emp emp1 = mapper1.getEmpByEid(1);
        System.out.println(emp1);
        SqlSession sqlSession2 = SqlSessionUtils.getSqlSession();
        CacheMapper mapper2 = sqlSession2.getMapper(CacheMapper.class);
        Emp emp2 = mapper2.getEmpByEid(1);
        System.out.println(emp2);
    }


2) 同一个SqlSession但是查询条件不同:使用同一个SqlSession进行的2次查询操作不一样时,第2次查询并不能从缓存中拿数据
    @Test
    public void testOneCache(){
        SqlSession sqlSession1 = SqlSessionUtils.getSqlSession();
        CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);
        Emp emp1 = mapper1.getEmpByEid(1);
        System.out.println(emp1);
        List<Emp> emp2 = mapper2.getAllEmp();
        System.out.println(emp2);
    }

3) 同一个SqlSession两次查询期间执行了任何一次增删改操作:使用同一个SqlSession进行的2次相同的查询操作,第1次查询执行完后,再执行1次(增删改)操作,这时mybatis会把缓存清空,最后执行相同的查询,就不能从缓存中拿数据了
    @Test
    public void testOneCache(){
        SqlSession sqlSession1 = SqlSessionUtils.getSqlSession();
        CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);
        Emp emp1 = mapper1.getEmpByEid(1);
        System.out.println(emp1);
        mapper1.insertEmp(new Emp(null,"abc",23,"男","123@qq.com"));
        Emp emp2 = mapper1.getEmpByEid(1);
        System.out.println(emp2);
    }

4) 同一个SqlSession两次查询期间手动清空了缓存
    @Test
    public void testOneCache(){
        SqlSession sqlSession1 = SqlSessionUtils.getSqlSession();
        CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);
        Emp emp1 = mapper1.getEmpByEid(1);
        System.out.println(emp1);
        sqlSession1.clearCache();      // 手动清空缓存
        Emp emp2 = mapper1.getEmpByEid(1);
        System.out.println(emp2);
    }
这篇关于Mybatis入门(五)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!