关闭

MyBatis缓存

614人阅读 评论(0) 收藏 举报
分类:

一:MyBatis的一级缓存默认是开启的,但是如果MyBatis和Spring搭配后,一级缓存失效,如果想用一级缓存,加上@Transactional就可以了。




二:二级缓存:


        在mybatis.xml中加入<setting name="cacheEnabled" value="true" />  在PersonDao.xml中加入<cache />


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC  
    "-//mybatis.org//DTD Config 3.0//EN"  
    "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
	<settings>
		<setting name="cacheEnabled" value="true" />
	</settings>
	<mappers>
		<mapper resource="com/we/dao/PersonDao.xml" />
	</mappers>
</configuration>


<?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.we.dao.PersonDao">
	<select id="get" parameterType="com.we.entry.Person" resultMap="result">
		select * from person WHERE id=#{id}
	</select>

	<resultMap type="com.we.entry.Person" id="result">
		<id column="id" property="id" />
		<result column="name" property="name" />
	</resultMap>

	<update id="updateById" parameterType="com.we.entry.Person">
		update person set
		name=#{name} where id=#{id}
	</update>
	<cache />
</mapper>


三:可以通过对比日志查看到缓存是否成功。如果不加<cache />和加则是以下两种


DEBUG 2016-08-29 20:08:09,499 org.mybatis.spring.SqlSessionUtils: Creating a new SqlSession
DEBUG 2016-08-29 20:08:09,499 org.mybatis.spring.SqlSessionUtils: SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@253d9f73] was not registered for synchronization because synchronization is not active
DEBUG 2016-08-29 20:08:09,499 org.apache.ibatis.cache.decorators.LoggingCache: Cache Hit Ratio [com.we.dao.PersonDao]: 0.75
DEBUG 2016-08-29 20:08:09,499 org.mybatis.spring.SqlSessionUtils: Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@253d9f73]





2
DEBUG 2016-08-29 20:05:25,212 org.mybatis.spring.SqlSessionUtils: Creating a new SqlSession
DEBUG 2016-08-29 20:05:25,212 org.mybatis.spring.SqlSessionUtils: SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1941a8ff] was not registered for synchronization because synchronization is not active
DEBUG 2016-08-29 20:05:25,212 org.springframework.jdbc.datasource.DataSourceUtils: Fetching JDBC Connection from DataSource
DEBUG 2016-08-29 20:05:25,212 org.mybatis.spring.transaction.SpringManagedTransaction: JDBC Connection [com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl@2e1ef60] will not be managed by Spring
DEBUG 2016-08-29 20:05:25,212 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: ==>  Preparing: select * from person WHERE id=? 
DEBUG 2016-08-29 20:05:25,212 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: ==> Parameters: 1(Integer)
DEBUG 2016-08-29 20:05:25,228 org.apache.ibatis.logging.jdbc.BaseJdbcLogger: <==      Total: 1
DEBUG 2016-08-29 20:05:25,228 org.mybatis.spring.SqlSessionUtils: Closing non transactional SqlSession [org.apache.ibatis.session.defaults.DefaultSqlSession@1941a8ff]
DEBUG 2016-08-29 20:05:25,228 org.springframework.jdbc.datasource.DataSourceUtils: Returning JDBC Connection to DataSource
3






四 配置Ehcache:加入jar包

<dependency>
<groupId>net.sf.ehcache</groupId>
<artifactId>ehcache-core</artifactId>
<version>2.6.11</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis-ehcache</artifactId>
<version>1.0.0</version>
</dependency>
然后把上面的cacha换成下面两个的任意一个。可以看一下两个类的实现就可以发现,LoggingEhcache是对EhcacheCache的包装。(LoggingEhcache的构造方法)
     <cache type="org.mybatis.caches.ehcache.LoggingEhcache" />
     <cache type="org.mybatis.caches.ehcache.EhcacheCache"/> 



五:配置redis缓存  

MyBatis配置redis需要实现org.apache.ibatis.cache.Cache接口,然后把四中的类改为自己写的类就行了。例子待续。




注意:在cache标签中还有好几个属性需要挖掘。比如说eviction是配置缓存策略。还有

<cache type="org.mybatis.caches.ehcache.LoggingEhcache"  eviction="缓存策略" blocking="" flushInterval="" readOnly="" size="" />

0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

mybatis在xml文件中处理大于号小于号的方法

第一种方法: 用了转义字符把>和 SELECT * FROM test WHERE 1 = 1 AND start_date  &lt;= CURRENT_DATE AND end_date...
  • zheng0518
  • zheng0518
  • 2013-08-28 15:20
  • 248359

通过项目逐步深入了解Mybatis(四)

1、通过项目逐步深入了解Mybatis 2、通过项目逐步深入了解Mybatis 3、通过项目逐步深入了解Mybatis 本项目所有代码及文档都托管在 Github地址:https://git...
  • lc1010078424
  • lc1010078424
  • 2016-12-07 10:22
  • 2120

mybatis中>=和<=的实现方式

原因 mybatis使用的是xml格式的文件,使用>和=使用 =]]> ><=使用 <![CDATA[
  • u012150370
  • u012150370
  • 2015-07-14 21:39
  • 1637

mybatis实战教程(mybatis in action),mybatis入门到精通

MyBatis 目录(?)[-] mybatis实战教程mybatis in action之一开发环境搭建mybatis实战教程mybatis in action之二以接口的方式编程mybati...
  • techbirds_bao
  • techbirds_bao
  • 2013-07-03 14:34
  • 563046

【MyBatis学习02】走进MyBatis的世界

mybatis是个持久层的框架,用来执行数据库操作的,无外乎增删改查,上一节对mybatis有了宏观上的了解后,这一篇博客主要通过一个小示例来入门mybatis,先看一下要写的示例需求: 根据...
  • eson_15
  • eson_15
  • 2016-06-09 22:30
  • 9962

Mybatis缓存

三、Mybatis缓存 1.一级缓存 1>. 什么是一级缓存? 为什么使用一级缓存? 每当我们使用MyBatis开启一次和数据库的会话,MyBatis会创建出一个SqlSession对象表示一次数...
  • u010558660
  • u010558660
  • 2016-07-01 14:41
  • 2701

Mybatis的缓存

1、关于缓存的介绍 Mybatis一级缓存的作用域是同一个SqlSession,在同一个sqlSession中两次执行相同的sql语句,第一次执行完毕会将数据库中查询到的数据写到缓存...
  • zbw18297786698
  • zbw18297786698
  • 2016-12-19 19:17
  • 665

Mybatis一级、二级缓存

一级缓存首先做一个测试,创建一个mapper配置文件和mapper接口,我这里用了最简单的查询来演示。 SELEC
  • u011403655
  • u011403655
  • 2015-06-30 15:07
  • 8526

Hibernate缓存机制和MyBatis缓存机制

原文地址:https://my.oschina.net/u/1445731/blog/416200?p=%7B%7BtotalPage%7D%7D 摘要: mybatis缓存分为1级缓存和2级缓存 ...
  • tanga842428
  • tanga842428
  • 2016-09-29 09:42
  • 9174

mybatis 一级缓存和二级缓存简介

正如大多数持久层框架一样,MyBatis 同样提供了一级缓存和二级缓存的支持 一级缓存: 基于PerpetualCache 的 HashMap本地缓存,其存储作用域为 Session,当 Ses...
  • zhongzh86
  • zhongzh86
  • 2015-11-24 23:10
  • 4491
    个人资料
    • 访问:57851次
    • 积分:1648
    • 等级:
    • 排名:千里之外
    • 原创:102篇
    • 转载:4篇
    • 译文:0篇
    • 评论:12条
    文章分类
    最新评论