美文网首页
Mybatis 踩坑第六弹—缓存

Mybatis 踩坑第六弹—缓存

作者: hellohuan | 来源:发表于2018-09-22 01:14 被阅读0次

Mybatis 支持两级缓存,分别是一级缓存(session 级别,又称本地缓存)和二级缓存(namespace 级别,又称全局缓存);

其中一级缓存默认开启,在于数据库相同的会话期间查询到的数据会放在本地缓存,之后再查询相同的数据会直接从本地缓存中取;但在四种情况下,一级缓存会失效:

1、使用不同的会话请求相同的数据;

2、使用相同的会话,请求不同的数据;

3、使用相同的会话,在请求之间执行了增删改操作,不论该操作是否针对一级缓存中的数据;

4、使用相同的会话,在请求之间主动清楚了一级缓存(session.clearCache());

二级缓存默认开启(但未配置),工作机制为:当使用 session 查询完数据之后将数据先保存在一级缓存中,在 session 关闭时,将一级缓存的数据取出并放进与之对应的 map 中,不同的 namespace 之间不共享 map;使用流程:

1)开启全局缓存配置;

2)在 mapper.xml 文件中配置使用二级缓存(因为二级缓存是基于 namespace 的,每个 mapper.xml 文件对应一个 namespace)

3)对应的 POJO 或者 PO 必须实现序列化接口(因为当 readOnly=false 时,缓存在返回数据的时候会使用到序列化的技术)

注意事项:

1)对于首次查询到的数据,默认都是放在一级缓存中的,只有当 session 提交或者关闭之后,数据才会转移到二级缓存中,也就是说在 session 提交或者关闭之前,二级缓存中是没有相关数据的;

2)cache 标签中中的 cacheEnabled=false 只会关闭二级缓存,而不会关闭一级缓存;select 标签中的 useCache=false 也只会关闭二级缓存,优先级高于 cache 标签;

3)对于每一个增删改标签中都有 flushCache 属性,当 flushCache=true时,每次执行完增删改之后会同时清空一级缓存和二级缓存;对于查询标签,默认 flushCache=false,当 flushCache=true 时,每个查询操作执行完,都会清空一级缓存和二级缓存;

4)session.clearCache 只会清空一级缓存;

5)localCacheScope 全局设置可以配置一级缓存的作用域,默认值为 session(使用一级缓存),当设定值为 statement 时,相当于禁用一级缓存;

第三方缓存整合:

1)导入第三方缓存的 jar 包;

2)导入 Mybatis 与第三方缓存的适配包(GitHub 上的 Mybatis 顶级项目下);

3)在 mapper.xml 中使用 cache 标签,通过 type 属性指定适配包接口的全类名。

关注微信公众号:Javall咖啡屋
每天更新各种技术学习心得体会


相关文章

  • Mybatis 踩坑第六弹—缓存

    Mybatis 支持两级缓存,分别是一级缓存(session 级别,又称本地缓存)和二级缓存(namespace ...

  • mybatis 缓存失效和坑

    mybatis 缓存失效和坑 mybatis 缓存类型 local cache,也就是所谓的局部缓存。由以下参数控...

  • 深度解析Mybatis缓存

    本期看点 本文从源码分析Mybatis一级和二级缓存的应用,进而阐述Mybatis缓存的“坑”。 一级缓存:Sql...

  • mybatis 踩坑

    1.mybatis generate 自动生成的xml默认增加行数,不覆盖,会生成多个resultMap2.核对...

  • mybatis-generator:generate 生成代码配

    mybatis-generator:generate 生成代码配置踩坑不少,在此留下笔记以便后续填坑 一、mysq...

  • MyBatis缓存和注解

    Mybatis缓存和注解 学习目标 1、mybatis缓存 2、mybatis注解 学习内容 1、mybatis缓...

  • MyBatis 踩坑笔记

    查询一个表中多个元素时,返回的List为空集合 现象 原Mapper中的select代码,Base_Column_...

  • mybatis 的缓存

    一、前言 因为在做项目时候遇到了mybatis缓存的坑,所以全面学习了下mybaits的缓存知识,一来避免后面再次...

  • mybatis对MySQL和SqlServer的like查询是不

    mybatis对MySQL和SqlServer的like查询是不同的。。。 已经踩了多少次坑了。。

  • MyBatis缓存书目录

    MyBatis缓存 MyBatis介绍 MyBatis一级缓存 1、什么是一级缓存? 为什么使用一级缓存? 2、M...

网友评论

      本文标题:Mybatis 踩坑第六弹—缓存

      本文链接:https://www.haomeiwen.com/subject/mpjtoftx.html