首页 > 其他分享 >MyBatis整合第三方缓存EHCache

MyBatis整合第三方缓存EHCache

时间:2024-02-04 13:34:39浏览次数:27  
标签:EHCache xml 缓存 二级缓存 MyBatis logback

EHCache缓存针对于MyBatis的二级缓存。
MyBatis默认二级缓存是SqlSessionFactory级别的。

添加依赖

<!-- MyBatis-EHCache整合包 -->
<dependency>
	<groupId>org.mybatis.caches</groupId>
	<artifactId>mybatis-ehcache</artifactId>
	<version>1.2.1</version>
	<!-- 排除冲突包 -->
	<exclusions>
		<exclusion>
			<groupId>org.slf4j</groupId>
			<artifactId>slf4j-api</artifactId>
		</exclusion>
	</exclusions>
</dependency>
<!-- SLF4j日志接口的实现类 -->
<dependency>
	<groupId>ch.qos.logback</groupId>
	<artifactId>logback-classic</artifactId>
	<version>1.4.11</version>
	<scope>test</scope>
</dependency>

创建EHCache的配置文件ehcache.xml

配置文件名必须为ehcache.xml

<?xml version="1.0" encoding="utf-8" ?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:noNamespaceSchemaLocation="../config/ehcache.xsd">
    <!-- 本地磁盘保存路径 -->
    <diskStore path="D:\ehcache"/>
    <!-- 默认缓存设置 -->
    <defaultCache
            maxElementsInMemory="1000"
            maxElementsOnDisk="10000000"
            eternal="false"
            overflowToDisk="true"
            timeToIdleSeconds="120"
            timeToLiveSeconds="120"
            diskExpiryThreadIntervalSeconds="120"
            memoryStoreEvictionPolicy="LRU">
    </defaultCache>
</ehcache>
EHCache配置文件的配置项说明

image

创建logback日志文件

使用SLF4J日志时,log4j日志文件会失效,需要配置SLF4J的具体实现logback来打印日志。
创建logback的配置文件logback.xml

<?xml version="1.0" encoding="UTF-8"?>
<configuration debug="true">
    <!-- 指定日志输出的位置 -->
    <appender name="STDOUT"
        class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
        <!-- 日志输出的格式 -->
        <!-- 按照顺序分别是:时间、日志级别、线程名称、打印日志的类、日志主体内容、换行-->
        <pattern>[%d{HH:mm:ss.SSS}] [%-5level] [%thread] [%logger]
        [%msg]%n</pattern>
        </encoder>
    </appender>
    <!-- 设置全局日志级别。日志级别按顺序分别是:DEBUG、INFO、WARN、ERROR -->
    <!-- 指定任何一个日志级别都只打印当前级别和后面级别的日志。 -->
    <root level="DEBUG">
    <!-- 指定打印日志的appender,这里通过“STDOUT”引用了前面配置的appender -->
        <appender-ref ref="STDOUT" />
    </root>
    <!-- 根据特殊需求指定局部日志级别 -->
    <logger name="com.evan.mybatis.mapper" level="DEBUG"/>
</configuration>

mapper.xml设置二级缓存的类型

<!-- 使用Ehcache缓存作为二级缓存 -->
<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>

测试

public class CacheTest {

    private static final Logger LOGGER = LoggerFactory.getLogger(CacheTest.class);

    @Test
    public void test2() {
        try {
            //读取MyBatis核心配置文件中的信息
            InputStream is = Resources.getResourceAsStream("mybatis-config.xml");
            //通过SqlSessionFactory创建SqlSession对象
            SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().build(is);

            SqlSession sqlSession1 = sqlSessionFactory.openSession(true);
            SqlSession sqlSession2 = sqlSessionFactory.openSession(true);

            CacheMapper mapper1 = sqlSession1.getMapper(CacheMapper.class);
            List<Emp> emps1 = mapper1.getEmpByDeptId(1);
            emps1.forEach(System.out::println);
            //关闭sqlSession的时候才会把保存在一级缓存中的数据保存到二级缓存中
            sqlSession1.close();

            CacheMapper mapper2 = sqlSession2.getMapper(CacheMapper.class);
            List<Emp> emps2 = mapper2.getEmpByDeptId(1);
            emps2.forEach(System.out::println);
            //关闭sqlSession的时候才会把保存在一级缓存中的数据保存到二级缓存中
            sqlSession2.close();
        } catch (IOException e) {
            LOGGER.error("测试方法:test2异常:{0}",e);
        }
    }
}

输出结果:
image

标签:EHCache,xml,缓存,二级缓存,MyBatis,logback
From: https://www.cnblogs.com/lisong0626/p/18005494

相关文章

  • Mybatis
    一、自定义持久层框架1.1分析持久层。与数据交互的一层。Dao层 。可能存在的问题:问题代码解决方案硬编码。对底层驱动和数据库配置信息硬编码Class.forName("com.mysql.jdbc.Driver");connection=DriverManager.getConnection("jdbc:......
  • 解决缓存与数据库同步下的同步锁问题之分段锁
    契子  在实际业务会我们会使用第三方的缓存例如:Reids、Memcache等;但是,并且我们在查询使用缓存时都得尽可能的保证缓存的一致性,在读取时得保证尽可能的保证缓存拿到的是数据库的最新数据,那么在实现的逻辑上一般都为这样:1、请求线程先读取缓存实现2、如果缓存没有数据的话触发......
  • 本地缓存Ehcache的应用实践 | 京东云技术团队
    java本地缓存包含多个框架,其中常用的包括:Caffeine、GuavaCache和Ehcache,其中Caffeine号称本地缓存之王,也是近年来被众多程序员推崇的缓存框架,同时也是SpringBoot内置的本地缓存实现。但是除了Caffeine之外,还有一款也不错的本地缓存框架Ehcache,具有快速、灵活,并支持内存和磁盘缓......
  • mybatis
    一.传参参数类型parameterType推荐不写,除非自定义类型与引用的第三方类型重名,需要特别指定。(1)传递一个参数(基本类型或其包装类型)mapper接口:publicinterfacePersonMapper{//根据员工编号获取员工信息和员工部门publicPersongetPersonById(Integerid);}x......
  • MyBatis动态SQL教程
    动态SQL是MyBatis中非常强大且灵活的功能,允许你根据不同的条件构建SQL查询。这主要通过<if>、<choose>、<when>、<otherwise>、<foreach>等标签实现。查询场景/***根据条件查询员工信息*@paramemp*@return*/List<Emp>getEmpCondition(Empemp);if标签的使用......
  • MyBatis的常用动态标签
    1、<sql><!--<sqlid=""></sql>:设置一段SQL片段,即公共SQL,可以被当前映射文件中所有的SQL语句所访问<includerefid="empColumns"></include>:访问某个SQL片段--><sqlid="empColumns">selecteid,ename,age,sex,d......
  • MyBatis的XML配置文件及注释
    mybatis.xml<?xmlversion="1.0"encoding="UTF-8"?><!DOCTYPEconfigurationPUBLIC"-//mybatis.org//DTDConfig3.0//EN""http://mybatis.org/dtd/mybatis-3-config.dtd"><configuration>......
  • Mybatis之resultMap详解
    resultMap作用是处理数据表中字段与java实体类中属性的映射关系。准备工作①创建数据库&数据表CREATEDATABASE`dbtest1`;CREATETABLE`t_emp`(`emp_id`intNOTNULLAUTO_INCREMENT,`emp_name`varchar(20)DEFAULTNULL,`age`intDEFAULTNULL,`gender`......
  • Spring-xml(+注解)方式整合第三方的框架-mybatis
    1)不需要自定义命名空间:MyBatisSpring整合Mybatis的步骤如下://原始配置<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.49</version></dependency><dependenc......
  • MyBatis查询功能演示
    准备工作①创建数据库&数据表##创建数据库CREATEDATABASE`dbtest1`;##创建数据表CREATETABLE`t_user`(`id`INTNOTNULLAUTO_INCREMENT,`username`VARCHAR(20)DEFAULTNULL,`password`VARCHAR(20)DEFAULTNULL,`age`INTDEFAULTNULL,`gender......