mybatis(9)--整合ehcache

来源:互联网 发布:sqsxfree类似软件 编辑:程序博客网 时间:2024/05/22 16:53

ehcache是什么?

1.what?
它是一个分布式缓存框架

(1)什么叫分布式缓存呢?

我们系统为了提高系统并发,性能等,一半对系统进行分布式部署(集群部署方式)

这里写图片描述

当用户在服务器1中登录,它的信息将会存储在1中的缓存中,但当下次去服务器2中访问时,2中的缓存中并没有,所以我们将缓存集中式管理起来。如果不使用分布式缓存,缓存的数据将在各个服务器的缓存中单独存储,不方便系统开发。
mybatis不支持分布式缓存。需要和其他分布式缓存整合

2.how?
mybatis提供了一个cache接口,如果要实现自己的缓存逻辑,实现cache接口开发就可以
mybatis和ehcache整合,在mybatis的包里,有这样一个cache接口的实现类
这里写图片描述

mybatis自己有个实现了cache接口的类

public class PerpetualCache implements Cache {...}

要和ehcache整合的话,需要先加入jar包
这里写图片描述

我们发现包下有这样的类:
这里写图片描述

我们在cache的type中将其设置为ehcache的实现类。

<!-- 指定cache接口实现类的类型,mybatis默认使用PerpetualCache  -->    <cache type="org.mybatis.caches.ehcache.EhcacheCache.class">    </cache>

加入ehcache的配置文件ehcache.xml

这里写图片描述

配置好了之后我们再去看测试代码:

还是刚才的测试二级缓存的代码:

Cache Hit Ratio [com.ddd.mybatis.mapper.UserMapper]: 0.02017-07-19 11:59:44,377 [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-[DEBUG] Opening JDBC Connection2017-07-19 11:59:45,019 [main] [org.apache.ibatis.datasource.pooled.PooledDataSource]-[DEBUG] Created connection 763812049.2017-07-19 11:59:45,019 [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-[DEBUG] Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@2d86d8d1]2017-07-19 11:59:45,021 [main] [com.ddd.mybatis.mapper.UserMapper.findUserById]-[DEBUG] ==>  Preparing: SELECT * FROM USER WHERE id=? 2017-07-19 11:59:45,068 [main] [com.ddd.mybatis.mapper.UserMapper.findUserById]-[DEBUG] ==> Parameters: 1(Integer)2017-07-19 11:59:45,339 [main] [com.ddd.mybatis.mapper.UserMapper.findUserById]-[DEBUG] <==      Total: 1User [id=1, username=王思聪, sex=男, birthday=Tue Jul 18 00:00:00 CST 2017, address=北京市海淀区, ordersList=null]2017-07-19 11:59:45,344 [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-[DEBUG] Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@2d86d8d1]2017-07-19 11:59:45,344 [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-[DEBUG] Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@2d86d8d1]2017-07-19 11:59:45,345 [main] [org.apache.ibatis.datasource.pooled.PooledDataSource]-[DEBUG] Returned connection 763812049 to pool.2017-07-19 11:59:45,345 [main] [com.ddd.mybatis.mapper.UserMapper]-[DEBUG] Cache Hit Ratio [com.ddd.mybatis.mapper.UserMapper]: 0.52017-07-19 11:59:45,345 [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-[DEBUG] Opening JDBC Connection2017-07-19 11:59:45,345 [main] [org.apache.ibatis.datasource.pooled.PooledDataSource]-[DEBUG] Checked out connection 763812049 from pool.2017-07-19 11:59:45,345 [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-[DEBUG] Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@2d86d8d1]2017-07-19 11:59:45,346 [main] [com.ddd.mybatis.mapper.UserMapper.updateUser]-[DEBUG] ==>  Preparing: UPDATE USER SET username=?,birthday=?,sex=?,address=? WHERE id=? 2017-07-19 11:59:45,348 [main] [com.ddd.mybatis.mapper.UserMapper.updateUser]-[DEBUG] ==> Parameters: 王思聪(String), 2017-07-18 00:00:00.0(Timestamp), 男(String), 北京市海淀区(String), 1(Integer)2017-07-19 11:59:45,425 [main] [com.ddd.mybatis.mapper.UserMapper.updateUser]-[DEBUG] <==    Updates: 12017-07-19 11:59:45,425 [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-[DEBUG] Committing JDBC Connection [com.mysql.jdbc.JDBC4Connection@2d86d8d1]User [id=1, username=王思聪, sex=男, birthday=Tue Jul 18 00:00:00 CST 2017, address=北京市海淀区, ordersList=null]2017-07-19 11:59:45,521 [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-[DEBUG] Resetting autocommit to true on JDBC Connection [com.mysql.jdbc.JDBC4Connection@2d86d8d1]2017-07-19 11:59:45,522 [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-[DEBUG] Closing JDBC Connection [com.mysql.jdbc.JDBC4Connection@2d86d8d1]2017-07-19 11:59:45,522 [main] [org.apache.ibatis.datasource.pooled.PooledDataSource]-[DEBUG] Returned connection 763812049 to pool.2017-07-19 11:59:45,523 [main] [com.ddd.mybatis.mapper.UserMapper]-[DEBUG] Cache Hit Ratio [com.ddd.mybatis.mapper.UserMapper]: 0.33333333333333332017-07-19 11:59:45,523 [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-[DEBUG] Opening JDBC Connection2017-07-19 11:59:45,523 [main] [org.apache.ibatis.datasource.pooled.PooledDataSource]-[DEBUG] Checked out connection 763812049 from pool.2017-07-19 11:59:45,523 [main] [org.apache.ibatis.transaction.jdbc.JdbcTransaction]-[DEBUG] Setting autocommit to false on JDBC Connection [com.mysql.jdbc.JDBC4Connection@2d86d8d1]2017-07-19 11:59:45,527 [main] [com.ddd.mybatis.mapper.UserMapper.findUserById]-[DEBUG] ==>  Preparing: SELECT * FROM USER WHERE id=? 2017-07-19 11:59:45,527 [main] [com.ddd.mybatis.mapper.UserMapper.findUserById]-[DEBUG] ==> Parameters: 1(Integer)2017-07-19 11:59:45,530 [main] [com.ddd.mybatis.mapper.UserMapper.findUserById]-[DEBUG] <==      Total: 1User [id=1, username=王思聪, sex=男, birthday=Tue Jul 18 00:00:00 CST 2017, address=北京市海淀区, ordersList=null]

测试成功!ehcache整合结束。