资讯专栏INFORMATION COLUMN

MyBatis理解与掌握(缓存)

马龙驹 / 891人阅读

摘要:理解与掌握缓存框架一级缓存默认就可以使用框架处理缓存是依赖映射,的内部缓存使用一个,为语句。一级缓存的作用域是一个,一旦发生变化,一级缓存失败在同一个中,执行相同的查询,第一次会去查询数据库,并写到缓存中第二次直接从缓存中取。

MyBatis理解与掌握(缓存)

@(MyBatis)[Java, 框架, MyBatis]

一级缓存(SqlSession)

默认就可以使用

框架处理缓存是 依赖sql映射id ,Mybatis的内部缓存使用一个HashMap,key为hashcode+statementId+sql语句。Value为查询出来的结果集映射成的java对象。

一级缓存的作用域是一个SqlSession ,一旦session发生变化,一级缓存失败

在同一个SqlSession中,执行相同的查询SQL,第一次会去查询数据库,并写到缓存中;第二次直接从缓存中取。当执行SQL时两次查询中间发生了增删改操作,则SqlSession的缓存清空。

每次查询会先去缓存中找,如果找不到,再去数据库查询,然后把结果写到缓存中。

二级缓存(SqlSessionFactory)

默认无法使用

如果想要使用,需要进行配置, 在映射文件中增加标签

要求缓存类必须实现可序列化接口

二级缓存是mapper级别的。Mybatis默认是没有开启二级缓存。

第一次调用mapper下的SQL去查询用户信息。查询到的信息会存到该mapper对应的二级缓存区域内。

第二次调用 相同namespace下的mapper映射文件中相同的SQL 去查询用户信息。会去对应的二级缓存内取结果。

如果调用相同namespace下的mapper映射文件中的增删改SQL,并执行了commit操作。此时会清空该namespace下的二级缓存。

使用二级缓存

(1)主配置文件mybatis-config.xml中做如下配置:


    
    
    

2)在映射文件中,加入以下内容,开启二级缓存:

eviction:移除策略。

LRU:最近最少使用的对象会被移除。

FIFO:First In First Out

flushInterval:缓存刷新时间(毫秒)

readOnly:只读。二级缓存中一旦修改了数据,别人取到的缓存数据就不准确了,所以要设置为readonly

size:1024(个)

(3)缓存类实现序列化
由于二级缓存的数据不一定都是存储到内存中,它的存储介质多种多样,所以需要给缓存的对象执行序列化。
如果该类存在父类,那么父类也要实现序列化。

禁用二级缓存

该statement中设置userCache=false可以禁用当前select语句的二级缓存,即每次查询都是去数据库中查询,默认情况下是true。

刷新二级缓存

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77235.html

相关文章

  • MyBatis理解掌握(原理分析)

    摘要:理解与掌握原理分析框架功能架构接口层提供给外部使用的接口,开发人员通过这些本地来操作数据库。流程分析数据处理过程根据的查找相应的对象。预处理对象,得到对象。传入和结果处理对象,通过的方法来执行,并对执行结果进行处理。 MyBatis理解与掌握(原理分析) @(MyBatis)[Java, 框架, MyBatis] 功能架构 showImg(https://segmentfault.co...

    keelii 评论0 收藏0
  • Java面试 32个核心必考点完全解析

    摘要:如问到是否使用某框架,实际是是问该框架的使用场景,有什么特点,和同类可框架对比一系列的问题。这两个方向的区分点在于工作方向的侧重点不同。 [TOC] 这是一份来自哔哩哔哩的Java面试Java面试 32个核心必考点完全解析(完) 课程预习 1.1 课程内容分为三个模块 基础模块: 技术岗位与面试 计算机基础 JVM原理 多线程 设计模式 数据结构与算法 应用模块: 常用工具集 ...

    JiaXinYi 评论0 收藏0
  • MyBatis理解掌握(简介)

    摘要:语句在代码中硬编码,造成代码不易于维护,实际应用变化的可能较大,变动需要改变代码。对结果集解析存在硬编码查询列名,变化导致解析代码变化,系统不易于维护,如果能将数据库记录封装成对象解析比较方便。 MyBatis理解与掌握(简介) @(MyBatis)[Java, 框架, MyBatis] 简介   Mybatis是一个数据持久层框架,MyBatis消除了几乎所有的JDBC代码和参数的手...

    Pocher 评论0 收藏0
  • MyBatis理解掌握(入门例子)

    摘要:的实例不是线程安全的,因此是不能被共享的,所以它的最佳的作用域是请求或方法作用域。下面的示例就是一个确保关闭的标准模式依赖注入框架可以创建线程安全的基于事务的和映射器并将它们直接注入到你的中,因此可以直接忽略它们的生命周期。 MyBatis理解与掌握(入门例子) @(MyBatis)[Java, 框架, MyBatis] 配置文件 mybatis-config.xml ...

    lufficc 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<