Select 的时候,缓存默认是打开的;
CUD 的时候,缓存默认是关闭的;
之前在利用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,那么默认是启用缓存的,所以,如果有必要,那么就需要人工修改配置,修改结果类似下面:
<select id="save" parameterType="XXXXXEO" statementType="CALLABLE" flushCache="true" useCache="false"> …… </select>
上面的statementType="CALLABLE"这个属性是我的项目中需要用到的,如果用不到就不用管它,注意后面的flushCache="true"和useCache="false",做了如上设置以后,发现问题就解决了。
相关推荐
从MyBatis 3.4.2开始,MyBatis增加了默认值,可以通过${username:ut_user}来设置默认值。可以通过配置property来启用默认值,或者设置默认值的分隔符。 MyBatis的加载顺序: MyBatis将按照以下顺序来加载属性: 1....
默认值为LocalCacheScope.SESSION,意味着整个Session期间的相同查询都可共享缓存数据。如果设置为LocalCacheScope.STATEMENT,那么每个SQL语句执行完毕后都会清除一级缓存,这种设置适用于防止脏读,但会降低缓存...
基于redis的mybatis二级缓存插件简介使用redis作为mybatis的缓存介质,通过使用mybatis的拦截器,在SQL执行的过程中,检查各个Mapper的二级缓存中过期的部分,匹配成功后删除过期的缓存,保证缓存的实时正确性。...
MyBatis 是一款著名的持久层框架,它支持定制化 SQL、存储过程以及高级映射。在 MyBatis 中,存在一些全局配置参数,这些参数能够影响整个 MyBatis 框架的行为。以下是对这些参数的详细解释: 1. `cacheEnabled`:...
- `settings`:用于调整MyBatis的行为,默认值通常是合理的,但有时需要根据实际需求进行调整。 - `typeAliases`:为Java类型提供别名,方便在映射文件中使用。 - `typeHandlers`:类型处理器,用于定义特定类型...
控制MyBatis的本地缓存范围。`SESSION`缓存整个会话,`STATEMENT`仅缓存单个语句。默认值为`SESSION`。 17. **jdbcTypeForNull**: 当未指定参数的JDBC类型时,为空值使用的默认JDBC类型。常用值有`NULL`、`...
localCacheScope:该配置控制的是 MyBatis 中的本地缓存机制,可以设置为 SESSION 或 STATEMENT,默认值为 SESSION。 jdbcTypeForNull:该配置控制的是 MyBatis 中为空值指定的 JDBC 类型。默认值为 OTHER。 ...
MyBatis提供了两级缓存:一级缓存是SqlSession级别的,同一个SqlSession内的查询会先查找缓存;二级缓存是全局的,跨SqlSession,但需要在配置和Mapper中开启。 12. **MyBatis的插件机制是什么?** MyBatis允许...
MyBatis 支持两种级别的缓存:一级缓存和二级缓存。一级缓存默认开启,二级缓存需要手动配置。缓存的使用可以显著提高应用程序的性能。 #### 十、贡献文档 如果你发现文档有所欠缺或需要改进,MyBatis 社区欢迎你...
- **settings**:用于调整MyBatis的行为,默认值通常足够使用,但可以根据需要进行修改。 - **typeAliases**:为Java类型指定别名,简化XML配置文件中的类型引用。 - **typeHandlers**:定义如何将Java类型转换为SQL...
1. **`<settings>`**:用于设置与 MyBatis 行为相关的属性,例如缓存的开启与关闭、延迟加载的启用等。 2. **`<environments>`**:定义多个环境配置,每个环境都包含一个事务管理器(`<transactionManager>`)和一个...
* <cache> 元素用于配置缓存,<cache-ref> 元素用于从其他命名空间引用缓存配置。 第 3 章 * MyBatis 动态 SQL 中的常用元素包括:、、、、<set> 和 <foreach> 等。 * <if> 元素用于单条件判断,<choose> 元素用于...
在IT行业中,Java是一种广泛应用的编程语言,尤其在构建Web应用程序方面表现卓越。Spring框架是Java后端...在实际项目中,还可以结合其他技术和工具,如Spring Boot、Redis缓存等,进一步提升系统的性能和用户体验。
MP 不修改 MyBatis 的原有功能,而是作为一个增强工具,提供了许多便捷的功能,例如:自动 CRUD 操作、条件构造器、批量操作、缓存管理等。 在开始使用 MyBatisPlus 之前,需要了解的基础知识包括 Mybatis、Spring ...
当系统达到阈值时,可以执行降级策略,比如返回预定义的默认值或错误提示。 2. **分布式锁**:在并发环境下,确保同一商品在同一时刻只能被一个用户秒杀,可以使用Redis或者Zookeeper实现分布式锁。 3. **异步处理...
Redis是一个高性能的键值存储系统,常用于缓存、消息队列等场景。SpringBoot提供了对Redis的简单集成,通过配置可以轻松使用RedisTemplate和StringRedisTemplate操作数据。 【Mybatisweb】 Mybatisweb是Mybatis的...
另外,还有一些成熟的第三方库,如PageHelper、Mybatis-Plus等,提供更强大的分页功能,如动态SQL、缓存等。 在实际应用中,考虑性能优化,可以结合索引、存储过程、缓存等策略,以减少数据库的负担。同时,为了...
Java知识还包括JVM内存管理、多线程与并发编程、Spring框架、Mybatis持久层框架、SpringBoot微服务开发、MySQL数据库优化、SpringCloud微服务架构、Dubbo服务治理、Nginx反向代理与负载均衡、消息队列MQ、数据结构与...
- **MyBatis 动态 SQL:**MyBatis 提供了强大的动态 SQL 功能,其中 `$` 和 `#` 分别用于不同的场景。`$` 表示字符串拼接,而 `#` 代表参数化处理,有助于防止 SQL 注入攻击。 - **动态 SQL 处理:**在 MyBatis 中...