时间:2021-05-19
客户端向数据库服务器发送同样的sql查询语句,如果每次都去访问数据库,会导致性能的降低。
那么怎么提高呢?
mybatis为我们提供了一级缓存的策略
在一个sqlSession开启和关闭之间,sqlSession对象内部(其实是Executor)会维护一个缓存的对象,当查询数据时候,先从缓存中寻找是否存在该条数据,存在就直接取出来,不存在,向数据库发送sql查询, 然后将查询后的数据存入缓存,和返回给程序。
这样会存在一个问题:
如果在第一次和第二次查询期间,有程序更改了要查讯的数据库的数据,就会引起读取的数据是错误的,也就是
脏读,其实是mybatis在sqlSession执行commit()方法后会清空这个缓存。第二次去查询,依然会从数据库中查询.
也可以手动调用sqlSession的clearCache()方法清除缓存
小例子:
@Test public void testCacheLever1() throws Exception{ SqlSession session = factory.openSession(); UserMapper mapper = session.getMapper(UserMapper.class); //第一次请求,查询id为1的用户 User user = mapper.findUserById(1); System.out.println(user); //更改数据,会清空缓存 user.setUsername("yyyy"); mapper.updateUser(user); session.commit(); //第二次查询会从缓存中找 User user2 = mapper.findUserById(1); System.out.println(user2); session.close(); }问题:
如果sqlSession关闭了,缓存也就清空了。这怎么使用缓存来提高效率呢?
好了,下篇文章给大家介绍mybatis二级缓存。
以上所述是小编给大家介绍的Mybatis一级缓存,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
mybatis中提供有一级缓存和二级缓存,这里记录一下一级缓存一级缓存(mybatis中默认开启)SqlSession级别的缓存,操作数据库时需要构造SQLSe
一、MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis同样提供了一级缓存和二级缓存的支持1.一级缓存:基于PerpetualCache的Hash
一.概述先讲缓存实现,主要是mybatis一级缓存,二级缓存及缓存使用后续补充Mybatis缓存的实现是基于Map的,从缓存里面读写数据是缓存模块的核心基础功能
上篇文章给大家介绍了mybatis一级缓存,有需要的朋友可以参考下。与一级缓存相比,二级缓存范围更大了一些,可以被多个SqlSession所共用。同样是发送同样
MD和Intel:巨大差异皆因设计不同缓存容量的差距,还得从两大CPU巨头对一级缓存的理解说起。对,没看错,就是平常曝光率远逊于二级缓存的“一级缓存