mybatis_13一级缓存

1. Mybatis的缓存理解

  Mybatis的缓存,包括一级缓存和二级缓存,一级缓存是默认使用的。二级缓存需要手动开启。

  一级缓存指的就是sqlsession,在sqlsession中有一个数据区域,是map结构,这个区域就是一级缓存区域。一级缓存中的key是由sql语句、条件、statement等信息组成一个唯一值。一级缓存中的value,就是查询出的结果对象。

  二级缓存指的就是同一个namespace下的mapper,二级缓存中,也有一个map结构,这个区域就是一级缓存区域。一级缓存中的key是由sql语句、条件、statement等信息组成一个唯一值。一级缓存中的value,就是查询出的结果对象。

 

 

一个唯一值。一级缓存中的value,就是查询出的结果对象。

 

  

2 一级缓存

原理:

 

第一次查询之后, 由sql语句、条件、statement等信息组成一个唯一值作为key存到sqlsession中的map,查询结果作为value:

         如果没有进行其他增删改操作的话,再次查询(同第一次查询条件一样)会自动从sqlsession中读取

         如果进行了其他增删改操作,再次查询会重新执行SQL语句查询

 

3.两次相同查询之间不进行其他数据库操作

 @Test
    public void test() throws IOException {
        InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");
        SqlSessionFactory ssf=new SqlSessionFactoryBuilder().build(is);
        SqlSession sqlSession=ssf.openSession();
        UserMapper mapper=sqlSession.getMapper(UserMapper.class);

        User user=mapper.findUserById(1);
        System.out.println("user"+user);
//没有进行其他数据库操作,直接再次查询
        User user2=mapper.findUserById(1);
        System.out.println("user"+user2);

        sqlSession.commit();
        sqlSession.close();
    }

}


 测试结果:

 

4.两次相同查询之间插入一条记录

@Test

  public void test() throws IOException {

    InputStream is = Resources.getResourceAsStream("SqlMapConfig.xml");

    SqlSessionFactory ssf=new SqlSessionFactoryBuilder().build(is);

    SqlSession sqlSession=ssf.openSession();

    UserMapper mapper=sqlSession.getMapper(UserMapper.class);

  

    User user=mapper.findUserById(1);

    System.out.println("user"+user);

  

    //插入一条数据

    User user3=new User();

    user3.setUsername("刘海柱");

    user.setSex("2");

    user.setAddress("单挑王");

    mapper.save(user3);

  

    User user2=mapper.findUserById(10);

    System.out.println("user"+user2);

  

    sqlSession.commit();

    sqlSession.close();

}

 测试结果:

 


  

posted @ 2019-03-06 11:32  爱华顿g  阅读(299)  评论(0编辑  收藏  举报