mybatis 启用二级缓存:
<setting name="cacheEnabled" value="true"/>
<cache eviction="LRU" flushInterval="60000" size="1024" readOnly="true" />
一级缓存的作用域仅限于一个sqlsession,但是二级缓存的作用域是一个namespace。
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.defaults.DefaultSqlSessionFactory;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import cn.mgr.user.po.UserPO;
//mybatis二级缓存:不同的会话且查询语句相同且查询参数相同
/*
* 启用二级缓存<cache eviction="LRU" flushInterval="60000" size="1024" readOnly="true" />
eviction是缓存的淘汰算法,可选值有"LRU"、"FIFO"、"SOFT"、"WEAK",缺省值是LRU
flashInterval指缓存过期时间,单位为毫秒,60000即为60秒,缺省值为空,即只要容量足够,永不过期
ize指缓存多少个对象,默认值为1024
readOnly是否只读,如果为true,则所有相同的sql语句返回的是同一个对象(有助于提高性能,但并发操作同一条数据时,可能不安全),如果设置为false,则相同的sql,后面访问的是cache的clone副本。
上面这个是全局设置,在每条单独的sql语句上,还可以有局部设置,比如:
<select id="getOrder" parameterType="int" resultType="TOrder" useCache="false"> ... </select>
useCache="false"表示该select语句不使用缓存
一级缓存的作用域仅限于一个sqlsession,但是二级缓存的作用域是一个namespace。
但并不是意味着同一个namespace创建的mapper可以互相读取缓存内容,这里的原则是,
如果开启了二级缓存,那么在关闭sqlsession后,会把该sqlsession一级缓存中的数据添加到namespace的二级缓存中。
<setting name="cacheEnabled" value="true"/>
*/
public class CacheTest {
public static void main(String[] args) {
ClassPathXmlApplicationContext app = new ClassPathXmlApplicationContext("applicationContext.xml");
DefaultSqlSessionFactory factory = (DefaultSqlSessionFactory)app.getBean("sqlSessionFactory");
mybatisSecondCache(factory); //二级缓存
//mybatisSecondCache2(factory);
}
/**
* mybatis二级缓存: 不同的会话且同一个mapper
* 查询语句相同且查询参数相同
* @param factory
*/
static void mybatisSecondCache(DefaultSqlSessionFactory factory){
SqlSession session = factory.openSession();
String statement = "cn.mgr.user.mapper.UserMapper.findByID";
UserPO user = new UserPO();
user.setUserId(100);
UserPO u = session.selectOne(statement, user);
System.out.println("第一次查询:"+u.getUserName());
session.close();
session = factory.openSession();
user = new UserPO();
user.setUserId(100);
u = session.selectOne(statement, user);
System.out.println("第二次查询:"+u.getUserName());
session.close();
}
/**
* mybatis二级缓存:
* 查询语句相同且查询参数不同
* @param factory
*/
static void mybatisSecondCache2(DefaultSqlSessionFactory factory){
SqlSession session = factory.openSession();
String statement = "cn.mgr.user.mapper.UserMapper.findByID";
UserPO user = new UserPO();
user.setUserId(100);
UserPO u = session.selectOne(statement, user);
System.out.println("第一次查询:"+u.getUserName());
session.close();
session = factory.openSession();
user = new UserPO();
user.setUserId(101);
u = session.selectOne(statement, user);
System.out.println("第二次查询:"+u.getUserName());
session.close();
}
}
相关推荐
MyBatis二级缓存是MyBatis框架中的一个重要特性,它允许我们在多个SqlSession之间共享数据,从而提高应用性能。本文将深入探讨MyBatis二级缓存的工作原理、配置方式以及如何在实际开发中有效利用。 一、MyBatis二级...
基于 SpringBoot 从0搭建一个企业级开发项目,基于SpringBoot 的项目,并集成MyBatis-Plus、Redis、Druid、Logback ,并使用 Redis 配置 MyBatis 二级缓存。
在大型系统中,为了提高数据访问效率,MyBatis提供了二级缓存机制。本文将深入探讨如何对MyBatis的二级缓存进行扩展,并将其与Redis集成,以充分利用分布式缓存的优势。 MyBatis的二级缓存是基于全局的,它允许不同...
"深入理解MyBatis中的一级缓存与二级缓存" MyBatis是一种流行的持久层框架,它提供了缓存机制来提高应用程序的性能。在MyBatis中,有两种类型的缓存:一级缓存和二级缓存。下面我们将深入了解MyBatis中的一级缓存和...
"深入了解MyBatis二级缓存" MyBatis是一种流行的Java持久层框架,它提供了强大的缓存机制以提高应用程序的性能。其中,二级缓存是MyBatis中的一种高级缓存机制,它可以将查询结果缓存在内存中,以便下次查询时直接...
MyBatis 二级缓存 关联刷新实现1、MyBatis缓存介绍2、二级缓存问题2.1、数据不一致问题验证2.2、问题处理思路3、关联缓存刷新实现 1、MyBatis缓存介绍 Mybatis提供对缓存的支持,但是在没有配置的默认情况下,它只...
Apache Ignite是一款开源的...以上就是使用Apache Ignite实现MyBatis二级缓存的基本知识点,希望对你有所帮助。在实际开发中,还可能涉及到其他细节,如错误处理、日志配置等,需要根据具体需求进行深入学习和实践。
Mybatis二级缓存memcache项目源码,共20个文件,全部采用Java语言编写,涉及多种文件类型如Java源代码、XML配置文件、PREFS文件、CLASSPATH文件、Git忽略文件、PROJECT文件、LICENSE文件、NOTICE文件、README文件和...
MyBatis二级缓存的实现代码 MyBatis是当前Java领域中最流行的持久层框架之一,将SQL映射到Java对象的技术称为ORM(Object-Relational Mapping)。MyBatis提供了三级缓存机制,一级缓存是Session级别的缓存,二级...
其中,二级缓存是MyBatis优化数据库操作的重要特性之一。本文将深入探讨MyBatis的二级缓存机制,旨在帮助开发者更好地理解和利用这一功能。 首先,我们需要了解什么是缓存。缓存是一种存储技术,用于暂时保存经常...
本文将深入讲解 MyBatis 的一级缓存和二级缓存,并通过一个简单的示例进行说明。 ### 一级缓存 一级缓存是 Session 级别的缓存,也称为本地缓存(Local Cache)。每当我们在一个 SqlSession 中执行了 CRUD 操作,...
缓存是MyBatis性能优化的重要手段,分为一级缓存和二级缓存。在这篇文章中,我们将深入探讨这两个级别的缓存机制及其工作原理。 **一级缓存** 一级缓存是SqlSession级别的缓存,也称为局部缓存。当你执行一个查询...
此文章是对Mybatis框架的一级缓存一级二级缓存的描述,包括他们的作用,案例,以及部分源码分析,对一级缓存以及二级缓存进行了详细的描述以及概括,还有如何使用等内容
"springMybatis+redis三级缓存框架"是一个高效且灵活的解决方案,它将MyBatis的二级缓存与Redis相结合,形成一个三级缓存体系,以优化数据读取速度并减轻数据库压力。 首先,MyBatis作为一款轻量级的持久层框架,其...
Spring Boot 使用 Redis 集群替换 MyBatis 二级缓存 Spring Boot 作为当前流行的 Java Web 框架,提供了许多便捷的功能来快速开发 Web 应用程序。其中,缓存机制是 Spring Boot 中一个非常重要的组件,缓存机制...
**MyBatis二级缓存** MyBatis是一个轻量级的SQL映射框架,它的二级缓存功能允许结果集在多会话间共享,减少了数据库交互。MyBatis的二级缓存配置包括: 1. 在mybatis-config.xml中开启二级缓存,并指定缓存实现...
在MyBatis中,二级缓存是用于存储多个SqlSession之间共享的数据,旨在提高系统性能,减少对数据库的访问次数。然而,当遇到"二级缓存Cache Hit Ratio始终等于0"的问题时,意味着缓存没有起到预期的效果,每次查询都...
在 MyBatis 中,一级缓存和二级缓存是两个重要的性能优化手段,它们可以有效减少对数据库的访问,提高系统的响应速度。下面将详细阐述这两个缓存机制。 ### 一级缓存 一级缓存是 MyBatis 默认开启的本地会话缓存,...