Memcache学习笔记二:Memcache做Mybatis的缓存
标签(空格分隔): Memcache Mybatis
一、简介
使用Memcache做Mybatis的缓存,Mybatis给我们提供了<cache>标签用于配置缓存。我们可以通过修改Mybatis的cache接口的实现类进行扩展自己的缓存。Memcache为我们做好了扩展,我们使用官方的jar即可进行缓存的替换。
二、导入相关jar包
mybatis-memcached-1.0.0.jar //Memcache和Mybatis整合jar
spymemcached-2.10.6.jar //Memcache连接jar
Spring的相关jar、Mybatis相关jar、Mysql相关jar、log4j相关jar //省略,不一一列举
三、简单示例
场景分析:
一个用户表和订单表,一个用户对应多个订单。
通过查询用户,同时查询出用户对应的订单。两种实现方式:通过表连接和子查询,在这里使用子查询方式。
对用户进行设置缓存<cache>,因为订单表示通过用户表的子查询查询的,Mybatis的机制会将订单表的查询数据同时进行缓存。对查询数据进行了缓存,如果对订单表的进行其他操作,如修改、删除、添加。就不能对通过用户表查询出来的订单数据缓存进行删除。这样就会导致一种情况数据能及时进行更新。
Mybatis的缓存机制是对命名空间的独自管理。所以,我们应该采取另外一个标签<cache-ref>。
需要注意:
①:在子查询的时候,Select标签需要使用因为查询在不同的Mapper文件中需要写全限定名。
②:用户的Mapper文件中的<cache>标签的type可以有两种:MemcachedCache和LoggingMemcachedCache,前者没有日志功能,后者具有日志功能。【详细介绍参考Memcached官方文档】
具体配置如下:
IUserDAO的Mapper文件
<?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="com.motui.dao.IUserDAO"> <cache type="org.mybatis.caches.memcached.LoggingMemcachedCache" /> <!-- 定义mapper --> <resultMap type="User" id="UserMapper"> <id column="id" property="id"/> <result column="name" property="name"/> <!-- 关系属性 --> <collection property="orders" ofType="Order" column="id" select="com.motui.dao.IOrderDAO.queryOrderByUserId"/> </resultMap> <!-- 查询语句 --> <select id="queryAll" resultMap="UserMapper" > select id,name from t_user </select> </mapper>
IOrderDAO的Mapper文件
<?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="com.motui.dao.IOrderDAO"> <cache-ref namespace="com.motui.dao.IUserDAO"/> <!-- 定义mapper --> <resultMap type="Order" id="OrderMapper"> <id column="id" property="id"/> <result column="name" property="name"/> </resultMap> <!-- 查询语句 --> <select id="queryOrderByUserId" resultMap="OrderMapper" parameterType="int" > select id,name from t_order where user_id=#{id} </select> </mapper>
memcache.properties配置文件
将该配置文件放到classPath下,如果没有改配置文件,默认使用默认设置,如下图的图表中的配置
官方文档截图://配置Memcache服务器 org.mybatis.caches.memcached.servers=192.168.0.167:11211 192.168.0.167:11212 //缓存过期时长 org.mybatis.caches.memcached.expiration=300 //其他配置参见默认配置
四、总结
Memcache做Mybatis的缓存需要了解Mybatis的缓存特点和配置。还有就是对Memcache的使用和集群的搭建的使用。详细的配置可参看Mybatis的官方文档和Memcache的官方文档。都有详细的介绍和配置的示例。
【源码链接】