#MyBatis中使用Ehcache缓存框架

MyBatis简介

MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的持久层框架。MyBatis 避免了几乎所有的 JDBC 代码和手工设置参数以及抽取结果集。MyBatis 使用简单的 XML 或注解来配置和映射基本体,将接口和 Java 的 POJOs(Plain Old Java Objects,普通的 Java对象)映射成数据库中的记录。

Ehcache简介

Ehcache是一种广泛使用的开源Java分布式缓存。主要面向通用缓存,Java EE和轻量级容器。它具有内存和磁盘存储,缓存加载器,缓存扩展,缓存异常处理程序,一个gzip缓存servlet过滤器,支持REST和SOAP api等特
点。

使用Ehcache的目的

为了提高MyBatis的性能,我们需要加入缓存的支持。

MyBatis中使用Ehcache

jar包

ehcache-core-2.6.10.jar
mybatis-ehcache-1.0.3.jar

ecache配置文件,文件名必须为ehcache.xml

<?xml version="1.0" encoding="UTF-8"?>
<ehcache xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
        xsi:noNamespaceSchemaLocation="http://ehcache.org/ehcache.xsd" updateCheck="false">  

    <diskStore path="java.io.tmpdir" /> <!-- 缓存存放目录(此目录为放入系统默认缓存目录),也可以是”D:/cache“ java.io.tmpdir -->
    <defaultCache  
            maxElementsInMemory="10000"  
            eternal="false"  
            timeToIdleSeconds="120"  
            timeToLiveSeconds="120"  
            overflowToDisk="true"  
            maxElementsOnDisk="10000000"  
            diskPersistent="false"  
            diskExpiryThreadIntervalSeconds="120"  
            memoryStoreEvictionPolicy="LRU" >
    </defaultCache>
</ehcache>


<!--
    name:Cache的唯一标识
    maxElementsInMemory:内存中最大缓存对象数
    maxElementsOnDisk:磁盘中最大缓存对象数,若是0表示无穷大
    eternal:Element是否永久有效,一但设置了,timeout将不起作用
    overflowToDisk:配置此属性,当内存中Element数量达到maxElementsInMemory时,Ehcache将会Element写到磁盘中
    timeToIdleSeconds:设置Element在失效前的允许闲置时间。仅当element不是永久有效时使用,可选属性,默认值是0,也就是可闲置时间无穷大
    timeToLiveSeconds:设置Element在失效前允许存活时间。最大时间介于创建时间和失效时间之间。仅当element不是永久有效时使用,默认是0.,也就是element存活时间无穷大
    diskPersistent:是否缓存虚拟机重启期数据
    diskExpiryThreadIntervalSeconds:磁盘失效线程运行时间间隔,默认是120秒
    diskSpoolBufferSizeMB:这个参数设置DiskStore(磁盘缓存)的缓存区大小。默认是30MB。每个Cache都应该有自己的一个缓冲区
    memoryStoreEvictionPolicy:当达到maxElementsInMemory限制时,Ehcache将会根据指定的策略去清理内存。默认策略是LRU(最近最少使用)。你可以设置为FIFO(先进先出)或是LFU(较少使用)
-->

在mybatis的mapper中启用

ehcache已经配置好了,之后我们只需要在需要缓存的mapper配置文件里面加入<cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>,该查询语句得到的结果将会被缓存

有两种写法

<cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>
<cache type="org.mybatis.caches.ehcache.EhcacheCache"/>

第一个可以输出日志,第二个不输出日志

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" 
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="UserXMapper">

    <!--
    ehcache已经配置好了,然后只需要在想要缓存的mapper配置文件里面加入以下内容,该查询语句得到的结果将会被缓存
    以下两个<cache>标签都可以,第一个可以输出日志,第二个不输出日志
     <cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>
     <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    -->
    <cache type="org.mybatis.caches.ehcache.LoggingEhcache"/>  



    <!-- 用户列表(全部) -->
    <select id="listAllUser" parameterType="pd" resultType="pd" useCache="false">
        select  u.USER_ID,
                u.USERNAME,
                u.PASSWORD,
                u.LAST_LOGIN,
                u.NAME,
                u.IP,
                u.EMAIL,
                u.NUMBER,
                u.PHONE,
                r.ROLE_ID,
                r.ROLE_NAME
        from SYS_USER u, SYS_ROLE r 
        where u.ROLE_ID = r.ROLE_ID 
        and u.USERNAME != 'admin'
        <if test="USERNAME != null and USERNAME != ''"><!-- 关键词检索 -->
            and
                (
                     u.USERNAME LIKE CONCAT(CONCAT('%', #{USERNAME}),'%')
                     or 
                     u.EMAIL LIKE CONCAT(CONCAT('%', #{USERNAME}),'%') 
                     or
                     u.NUMBER LIKE CONCAT(CONCAT('%', #{USERNAME}),'%')
                     or
                     u.NAME LIKE CONCAT(CONCAT('%', #{USERNAME}),'%')
                      or
                     u.PHONE LIKE CONCAT(CONCAT('%', #{USERNAME}),'%')
                )
        </if>
        <if test="ROLE_ID != null and ROLE_ID != ''"><!-- 角色检索 -->
            and u.ROLE_ID=#{ROLE_ID} 
        </if>
        <if test="lastLoginStart!=null and lastLoginStart!=''"><!-- 登录时间检索 -->
            and u.LAST_LOGIN &gt;= #{lastLoginStart} 
        </if>
        <if test="lastLoginEnd!=null and lastLoginEnd!=''"><!-- 登录时间检索 -->
            and u.LAST_LOGIN &lt;= #{lastLoginEnd} 
        </if>
        order by u.LAST_LOGIN desc
    </select>

</mapper>
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值