您的位置:首页 > 汽车 > 时评 > 国庆贺卡制作图片_拓者设计吧论坛_网络营销教程_上海抖音seo

国庆贺卡制作图片_拓者设计吧论坛_网络营销教程_上海抖音seo

2024/12/26 19:53:19 来源:https://blog.csdn.net/qq_39879340/article/details/142953399  浏览:    关键词:国庆贺卡制作图片_拓者设计吧论坛_网络营销教程_上海抖音seo
国庆贺卡制作图片_拓者设计吧论坛_网络营销教程_上海抖音seo

1、mybatis的一级缓存

在同一次查询会话(SqlSession)中如果出现相同的语句及参数,就会从缓存中取出,不再走数据库查询。一级缓存只能作用于查询会话中,所以也叫做会话缓存。

2、一级缓存生效的条件

必须是相同的会话;

必须是同一个 mapper,即同一个 namespace;

必须是相同的 statement,即同一个 mapper 中的同一个方法;

必须是相同的 sql 和参数;

查询语句中间没有执行 session.clearCache() 方法;

查询语句中间没有执行 insert/update/delete 方法(无论变动记录是否与缓存数据有无关系)

3、一级缓存与spring结合失效的原因

因为一级缓存是会话级别的,要生效的话,必须要在同一个 SqlSession 中。但是与 springboot 集成的 mybatis,默认每次执行sql语句时,都会创建一个新的 SqlSession!所以一级缓存才没有生效。

4、如何解决一级缓存失效

只要将方法开启事务,那么一级缓存就会生效。

5、二级缓存

它脱离于会话之外,多个会话可以使用相同的缓存。二级缓存需要手动来开启,mybatis 默认没有开启二级缓存。

1)在 yaml 中配置 cache-enabled 为 true

2)Mapper 接口上添加 @CacheNamespace 注解

3)实体类实现 Serializable 接口

6、生效的条件

当会话提交或关闭之后才会填充二级缓存;

必须是同一个 mapper,即同一个命名空间;

必须是相同的 statement,即同一个 mapper 中的同一个方法;

必须是相同的 SQL 语句和参数;

如果 readWrite=true(默认就是true),实体对象必须实现 Serializable 接口

7、缓存清除条件

只有修改会话提交之后,才会执行清空操作;

xml 中配置的 update 不能清空 @CacheNamespace 中的缓存数据;

任何一种增删改操作都会清空整个 namespace 中的缓存;

8、为什么mybatis默认不开启二级缓存?

二级缓存虽然能带来一定的好处,但是有很大的隐藏危害!它的缓存是以 namespace(mapper) 为单位的,不同 namespace 下的操作互不影响。且 insert/update/delete 操作会清空所在 namespace 下的全部缓存。那么问题就出来了,假设现在有 ItemMapper 以及 XxxMapper,在 XxxMapper 中做了表关联查询,且做了二级缓存。此时在 ItemMapper 中将 item 信息给删了,由于不同 namespace 下的操作互不影响,XxxMapper 的二级缓存不会变,那之后再次通过 XxxMapper 查询的数据就不对了,非常危险。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com