MyBatis中的缓存介绍与示例

奋斗吧
奋斗吧
擅长邻域:未填写

标签: MyBatis中的缓存介绍与示例

2023-07-14 18:23:31 145浏览

在用户访问相同数据时,需要对数据库多次访问,导致产生大量IO、读写硬盘的操作,效率低下,有了缓存首次访问时,查询到数据库数据库,将数据库存储到缓存中,再次访问时,直接访问缓存减少IO的与赢哦读写,提高效率。

目录

什么是缓存?

一级缓存

实例效果

二次缓存

示例效果


什么是缓存?

在用户访问相同数据时,需要对数据库多次访问,导致产生大量IO、读写硬盘的操作,效率低下,有了缓存首次访问时,查询到数据库数据库,将数据库存储到缓存中,再次访问时,直接访问缓存减少IO的与赢哦读写,提高效率

一级缓存

是指同一个sqlsession发起的多次同构查询,会将数据保存在一级缓存中

实例效果

@Test
public void OneText(){
    SqlSession session = MyBatisUtils.getSession();
    UserDao userDao = session.getMapper(UserDao.class);
    User user = userDao.selectById(1);
    System.out.println(user);
    System.out.println("-------一级缓存-------");
​
    SqlSession session1 = MyBatisUtils.getSession();
    UserDao mapper = session.getMapper(UserDao.class);
    User user1 = mapper.selectById(1);
    System.out.println(user1);
}

二次缓存

是指只要sqlSessionFactory是同一个即可取出缓存

注意事项:对事务进行提交或关闭才能有二级缓存

@Test
public void TwoText(){
    SqlSession session = MyBatisUtils.getSession();
    UserDao userDao = session.getMapper(UserDao.class);
    User user = userDao.selectById(1);
    session.close();sqlSession2.close(); //缓存未击中,重新查询数据库、重新缓存
​
    SqlSession session3 = MyBatisUtils.getSession();
    UserDao mapper2 = session3.getMapper(UserDao.class);
    User user3=new User();
    user3.setId(2);
    user3.setSex("333");
    user3.setPassword("000");
    user3.setName("@@@");
    mapper2.updateUser(user3);
    session3.commit();
    session3.close();
​
    System.out.println("------二级缓存开始-------");
​
    SqlSession session1 = MyBatisUtils.getSession();
    UserDao mapper = session1.getMapper(UserDao.class);
    User user1 = mapper.selectById(1);
    session1.close();//关闭才能产生缓存
​
    System.out.println("------二级缓存继续------");
​
    SqlSession session2 = MyBatisUtils.getSession();
    UserDao mapper1 = session2.getMapper(UserDao.class);
    User user2 = mapper1.selectById(1);
    session2.close();
​
    System.out.println("------我们继续二级缓存------");
    SqlSession session4 = MyBatisUtils.getSession();
    UserDao mapper3 = session4.getMapper(UserDao.class);
    User user4 = mapper3.selectById(1);
    session4.close();
    System.out.println(user4);
}

示例效果

好博客就要一起分享哦!分享海报

此处可发布评论

评论(0展开评论

暂无评论,快来写一下吧

展开评论

您可能感兴趣的博客

客服QQ 1913284695