`

MyBatis的flushCache和useCache的使用注意

阅读更多
MyBatis的flushCache和useCache的使用注意
之前在利用MyBatis做开发的时候,遇到了一个问题,使用select配置的时候发现前后两次的结果是一样的,并且使用statementType="CALLABLE"配置,然后在配置中写PL/SQL代码去更新数据库的时候,发现只更新了第一次,第二次在对传进来的参数没有变化的情况下,就不会在进入PL/SQL代码中执行。后来发现,这是由于MyBatis缓存的原因。
在MyBatis中有flushCache、useCache这两个配置属性,分为下面几种情况:
(1)当为select语句时:
flushCache默认为false,表示任何时候语句被调用,都不会去清空本地缓存和二级缓存。
useCache默认为true,表示会将本条语句的结果进行二级缓存。
(2)当为insert、update、delete语句时:
flushCache默认为true,表示任何时候语句被调用,都会导致本地缓存和二级缓存被清空。
useCache属性在该情况下没有。
上面的信息我是从MyBatis官方文档中找到的,会发现当为select语句的时候,如果没有去配置flushCache、useCache,那么默认是启用缓存的,所以,如果有必要,那么就需要人工修改配置,修改结果类似下面:
1
2
3
<select id="save" parameterType="XXXXXEO" statementType="CALLABLE" flushCache="true" useCache="false">
    ……
</select>
上面的statementType="CALLABLE"这个属性是我的项目中需要用到的,如果用不到就不用管它,注意后面的flushCache="true"和useCache="false",做了如上设置以后,发现问题就解决了。
分享到:
评论

相关推荐

    第三章 MyBatis的核心配置.docx

    * useCache:用户控制二级缓存的开启和关闭 * timeout:用于设置超时参数 * fetchSize:获取记录的总条数设定 * statementType:用户设置mybatis使用那个JDBC的Statement工作 * resultSetType:表示结果集的类型 ...

    mybatis注解

    7. **@Options**: 此注解可以设置一些执行选项,如`flushCache`(是否清空缓存)和`useCache`(是否使用二级缓存)。 8. **动态SQL**: MyBatis也支持在注解中使用动态SQL,通过`&lt;if&gt;`、`&lt;choose&gt;`、`&lt;when&gt;`、`...

    MyBatis_Select

    5. **flushCache**: 默认为`false`,设置为`true`会在执行该语句前清空本地缓存和二级缓存,通常在更新操作后使用。 6. **useCache**: 默认为`true`,表示是否使用MyBatis的缓存机制。设置为`false`可禁用缓存。 7...

    Mybatis的缓存1

    总之,Mybatis的一级缓存和二级缓存是提高数据访问效率的有效手段,但正确理解和使用它们至关重要,避免因不当配置引发的问题。通过深入理解缓存机制并结合实际业务需求,我们可以合理地利用缓存,提升系统的整体...

    mybatis入门

    在本文中,我们将深入探讨 MyBatis 的基础概念和如何进行入门操作。 首先,我们来看一下 `select` 元素的使用。在 MyBatis 中,`select` 元素用于定义一个 SQL 查询,它在 XML 映射文件中声明。例如: ```xml ...

    Oracle结合Mybatis实现取表TOP 10条数据

    这里,`useCache="false"`和`flushCache="false"`属性分别表示不使用缓存和不刷新缓存,确保每次调用都能获取到序列的最新值。 总结起来,Oracle结合Mybatis实现取表TOP 10条数据的关键在于理解并正确使用`ROWNUM`...

    ibatis 完美例子 一对多 批处理 事务 和 spring struts2集成

    在Ibatis中,可以通过设置SqlSession的flushCache和useCache属性,以及使用批处理执行器ExecutorType.BATCH,来实现批量插入、更新或删除。例如,在插入1万条数据时,将这些操作放在同一个SqlSession中,而不是逐一...

    MyBatis关于二级缓存问题

    本文主要介绍了MyBatis关于二级缓存问题,包括二级缓存的概念、实现机制、配置方法、应用场景和局限性等。 一级缓存是sqlSession级别的缓存,不同的sqlSession之间的缓存互不影响。二级缓存是Mapper级别的缓存,多...

    MyBatis缓存实现原理及代码实例解析

    - `useCache`:每个`&lt;select&gt;`标签内的设置,控制是否使用缓存,默认为true。 - `flushCache`:在增删改操作的标签中设置,为true时会清除缓存。 - `localCacheScope`:控制一级缓存的作用域,可选SESSION(默认,...

    mybatis教程之增删改查_动力节点Java学院整理

    查询操作是最常见的,MyBatis使用`&lt;select&gt;`标签来定义。查询单个学生: ```xml SELECT ST.STUDENT_ID, ST.STUDENT_NAME, ST.STUDENT_SEX, ST.STUDENT_BIRTHDAY, ST.CLASS_ID FROM STUDENT_TBL ST WHERE ST....

    Java_ibatis-cache.rar_cache

    因此,在高并发环境下使用二级缓存时,需要谨慎设计和优化。 通过以上讲解,你应该对iBatis的一级缓存和二级缓存有了基础认识。在实际项目中,根据业务需求合理选择和配置缓存,能够显著提升系统的响应速度和资源...

Global site tag (gtag.js) - Google Analytics