转载:https://www.cnblogs.com/ysocean/p/7342498.html

mybatis 为我们提供了一级缓存和二级缓存,可以通过下图来理解:

【mybatis源码学习】mybtias一级,二级缓存

  ①、一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。

  ②、二级缓存是mapper级别的缓存,多个SqlSession去操作同一个Mapper的sql语句,多个SqlSession可以共用二级缓存,二级缓存是跨SqlSession的。

1、一级缓存

  ①、我们在一个 sqlSession 中,对 User 表根据id进行两次查询,查看他们发出sql语句的情况。

@Test
public void testSelectOrderAndUserByOrderId(){
    //根据 sqlSessionFactory 产生 session
    SqlSession sqlSession = sessionFactory.openSession();
    String statement = "one.to.one.mapper.OrdersMapper.selectOrderAndUserByOrderID";
    UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
    //第一次查询,发出sql语句,并将查询的结果放入缓存中
    User u1 = userMapper.selectUserByUserId(1);
    System.out.println(u1);
     
    //第二次查询,由于是同一个sqlSession,会在缓存中查找查询结果
    //如果有,则直接从缓存中取出来,不和数据库进行交互
    User u2 = userMapper.selectUserByUserId(1);
    System.out.println(u2);
     
    sqlSession.close();
}
View Code

相关文章:

  • 2021-12-06
  • 2021-11-19
  • 2021-12-20
  • 2021-06-26
  • 2021-04-17
猜你喜欢
  • 2022-01-03
  • 2021-11-19
  • 2021-09-18
  • 2021-12-09
  • 2022-12-23
  • 2022-01-20
  • 2022-01-12
相关资源
相似解决方案