MyBatis关闭一级缓存的两种方式(分注解和xml两种方式)

目录
  • 问题:为什么有缓存
  • 什么场景下必须需要关闭一级缓存
  • 关闭一级缓存方法(针对使用MyBatis场景)
    • 第一种:xml形式(关闭所有一级缓存)
    • 第二种:注解形式(可指定仅仅某个Mapper关闭注解)
    • 第三种:sql动态拼接传入的随机数

问题:为什么有缓存

mybatis默认开启一级缓存

什么场景下必须需要关闭一级缓存

场景:执行2次相同sql,但是第一次查询sql结果会加工处理,比如解析铭文,或者反编译加密解密用户名/密码字符串等等,如果不关闭一级缓存,等第二次再查询相同sql时不会去数据库表重新查询,而是直接使用缓存,从而导致后面拿到的不是原始数据而处理出错

关闭一级缓存方法(针对使用MyBatis场景)

第一种:xml形式(关闭所有一级缓存)

<settings>
<setting name="cacheEnabled" value="false"/>
</settings>

第二种:注解形式(可指定仅仅某个Mapper关闭注解)

@Options(flushCache = Options.FlushCachePolicy.TRUE)
@Select("select * from ge_jdbc_datasource where id = #{id,jdbcType=BIGINT} and status = 1")
@ResultMap("resultMap")
JdbcDataSource find(Long id);

第三种:sql动态拼接传入的随机数

比如sql传参random()数值 或者 sql传入当前时间毫秒数,切记一定要从方法形参传过去而不要在sql中拼写,否则无效

举例说明:下面方式无效

select id from ge_jdbc_datasource where id = 1 and STATUS = 1 AND NOW()=NOW()

到此这篇关于MyBatis关闭一级缓存的两种方式(分注解和xml两种方式)的文章就介绍到这了,更多相关MyBatis关闭一级缓存内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • MybatisPlus开启、关闭二级缓存方法

    目录 一.开启MybatisPlus的全局配置: 二.在对应的xml文件中,添加配置: 三.如果有写接口无需二级缓存,可在对应的地方添加:useCache="false" 一.开启MybatisPlus的全局配置: #二级缓存 mybatis-plus.global-config.configuration.map-underscore-to-camel-case= true mybatis-plus.global-config.configuration.cache-enabled=

  • MyBatis的注解使用、ORM层优化方式(懒加载和缓存)

    目录 Mybatis注解 Mybatis对ORM层的优化 缓存 懒加载 MyBatis缓存机制 二级缓存 Mybatis注解 查找 @Select( "SELECT * FROM tt_user WHERE username Like #{id};") User findUserByName(String name); <!--以map为输入参数查找--> @Select("select * from tt_user where username= #{name}

  • Java的MyBatis框架中XML映射缓存的使用教程

    MyBatis包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制.默认情况下是没有开启缓存的,要开启二级缓存,你需要在你的SQL映射文件中添加一行: <cache/> 字面上看就是这样.这个简单语句的效果如下: 1.映射语句文件中的所有select语句将会被缓存. 2.映射语句文件中的所有insert,update和delete语句会刷新缓存. 3.缓存会使用Least Recently Used(LRU,最近最少使用的)算法来收回. 4.根据时间表(比如 no Flush Inter

  • Mybatis如何通过注解开启使用二级缓存

    这篇文章主要介绍了Mybatis基于注解开启使用二级缓存,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 本文主要是补充一下Mybatis中基于注解的二级缓存的开启使用方法. 1.在Mybatis的配置文件中开启二级缓存 <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.or

  • MyBatis 的 XML 配置文件和缓存使用步骤

    目录 MyBatis缓存介绍 MyBatis的XML整体介绍 一.整体配置文件介绍 二.Mybatis拦截器[不做要求] 参考案例 三.缓存 使用步骤 MyBatis缓存介绍 正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 1.一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该Session中的所有 Cache 就将清空.2. 二级缓存与一级缓存其机制相同

  • MyBatis关闭一级缓存的两种方式(分注解和xml两种方式)

    目录 问题:为什么有缓存 什么场景下必须需要关闭一级缓存 关闭一级缓存方法(针对使用MyBatis场景) 第一种:xml形式(关闭所有一级缓存) 第二种:注解形式(可指定仅仅某个Mapper关闭注解) 第三种:sql动态拼接传入的随机数 问题:为什么有缓存 mybatis默认开启一级缓存 什么场景下必须需要关闭一级缓存 场景:执行2次相同sql,但是第一次查询sql结果会加工处理,比如解析铭文,或者反编译加密解密用户名/密码字符串等等,如果不关闭一级缓存,等第二次再查询相同sql时不会去数据库表

  • 关于mybatis的一级缓存和二级缓存的那些事儿

    一.缓存是什么 缓存其实就是存储在内存中的临时数据,这里的数据量会比较小,一般来说,服务器的内存也是有限的,不可能将所有的数据都放到服务器的内存里面,所以, 只会把关键数据放到缓存中,缓存因为速度快,使用方便而出名! 二.为什么需要缓存 BS架构里面,用户的所有操作都是对数据库的增删改查,其中查询的操作是最多的,但如果用户想要某个数据时每次都去数据库查询,这无疑会增加数据库的压力,而且获取时间效率也会降低,所以为了解决这些问题,缓存应用而生,使用了缓存之后,服务器只需要查询一次数据库,然后将数据

  • 解决spring结合mybatis时一级缓存失效的问题

    之前了解到mybatis的一级缓存是默认开启的,作用域是sqlSession,是基 HashMap的本地缓存.不同的SqlSession之间的缓存数据区域互不影响. 当进行select.update.delete操作后并且commit事物到数据库之后,sqlSession中的Cache自动被清空 <setting name="localCacheScope" value="SESSION"/> 结论 spring结合mybatis后,一级缓存作用: 在未

  • Mybatis的一级缓存和二级缓存原理分析与使用

    目录 Mybatis的一级缓存和二级缓存 1 Mybatis如何判断两次查询是完全相同的查询 2 二级缓存 2.1 二级缓存配置 2.2 二级缓存特点 2.3 配置二级缓存 2.4 测试 Mybatis的一级缓存和二级缓存 Mybatis会将相同查询条件的SQL语句的查询结果存储在内存或者某种缓存介质中,当下次遇到相同的SQL时不执行该SQL,而是直接从缓存中获取结果,减少服务器的压力,尤其是在查询越多.缓存命中率越高的情况下,使用缓存对性能的提高更明显. Mybatis缓存分为一级缓存和二级缓

  • Mybatis 一级缓存与二级缓存的实现

    mybatis缓存 mybatis作为一个流行的持久化工具,缓存必然是缺少不了的组件.通过这篇文章,就让我们来了解一下mybatis的缓存. mybatis缓存类型 说起mybatis的缓存,了解过的同学都知道,mybatis中可以有两种缓存类型: 第一种,我们通常称为以及缓存,或者sqlSession级别的缓存,这种缓存是mybatis自带的,如果mapper中的配置都是默认的话,那么一级缓存也是默认开启的. 第二种,就是非sqlSession级别的缓存了,我们通常称为二级缓存,mybatis

  • mybatis教程之查询缓存(一级缓存二级缓存和整合ehcache)

    1 缓存的意义 将用户经常查询的数据放在缓存(内存)中,用户去查询数据就不用从磁盘上(关系型数据库数据文件)查询,从缓存中查询,从而提高查询效率,解决了高并发系统的性能问题. 2 mybatis持久层缓存 mybatis提供一级缓存和二级缓存 mybatis一级缓存是一个SqlSession级别,sqlsession只能访问自己的一级缓存的数据,二级缓存是跨sqlSession,是mapper级别的缓存,对于mapper级别的缓存不同的sqlsession是可以共享的. 3 一级缓存 3.1 原

  • mybatis中的一级缓存深入剖析

    mybatis中提供有一级缓存 和 二级缓存,这里记录一下一级缓存 一级缓存(mybatis中默认开启) SqlSession级别的缓存,操作数据库时需要构造SQLSession对象, 在对象中有一个数据结构(HashMap)用于存储缓存数据,不同的SQLSession对象之间的缓存数据是不共享的,即独立的 根据第一点,简单一点讲就是一级缓存是属于对象的(个人记法) 从别处搞来一个图,便于我们理解: 下面用spring整合mybatis来测试一下mybatis的一级缓存: 1.下面是servic

  • Mybatis一级缓存和结合Spring Framework后失效的源码探究

    1.在下面的案例中,执行两次查询控制台只会输出一次 SQL 查询: mybatis-config.xml <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd"

  • mybatis-plus如何禁用一级缓存的方法

    前言 用过mybatis-plus的朋友可能会知道,mybatis-plus提供了多租户插件的功能,这个功能可以让开发人员不用手动写租户语句,由该插件自动帮你加上租户语句.今天的素材来源就是取自业务开发人员使用多租户插件时,遇到的一个神奇的问题 问题重现 业务开发人员要实现根据手机号码更新租户的密码功能,其代码形如下 for(Tenant t : tenantList){ ApplicationChainContext.getCurrentContext().put(ApplicationCha

  • SpringBoot + Mybatis-plus实战之Mybatis-plus的一级缓存、二级缓存

    前言 现在的JAVA行业,貌似已经是SpringBoot + SpringCloud 的天下了,早期的SSH,SSM框架已经老去,与SpringBoot相结合的JPA框架虽然省去了很多的增删改查sql,但是比较笨拙,在面对一些复杂多变的逻辑时常常力不从心,而相对应的Mybatis由于其高度的灵活性受到广大JAVA攻城狮的欢迎.之前整合过了springboot+mybatis,前几天看到一个面试的问一个问题,Mybatis的一级缓存,二级缓存.我想这个应该也是一个重点吧,所以今天决定来详细解读一下

随机推荐