mybatis二级缓存

mybatis缓存的使用及理解                                     
    和hibernate一样,mybatis也有缓存机制
    一级缓存是基于 PerpetualCache(mybatis自带)的 HashMap 本地缓存,作用范围为session,所以当session commit或close后,缓存就会被清空

    二级缓存默认也是基于 PerpetualCache,但是可以为其制定存储源,比如ehcache 

    一级缓存缓存的是SQL语句,而二级缓存缓存的是结果对象,看如下例子(mybatis的日志级别设为debug)

    List<User> users = sqlSession.selectList("com.my.mapper.UserMapper.getUser", "jack");
    System.out.println(users);
     
    //sqlSession.commit();①
    
     
    List<User> users2 = sqlSession.selectList("com.my.mapper.UserMapper.getUser", "jack");//②admin
    System.out.println(users);

    结果是只发起一次SQL语句,如果我们把②出的参数jack改为admin,发现还是只发起一次SQL语句,但是会设置不同参数

    如果把①处去掉注释,会发现不会有缓存了


    下面就来启用二级缓存

    在配置文件中启用二级缓存

    <setting name="cacheEnabled" value="true" />
    在需要进行缓存的mapper文件UserMapper.xml中加上
    <cache readOnly="true"></cache>
    注意这里的readOnly设为true,默认是false,表示结果集对象需要被序列化


    我们打开①处注释,②处仍然使用jack,我们发现结果只执行了一次SQL语句

    但是如果把②处改为admin,执行了2次SQL语句,这说明二级缓存是缓存结果集对象的


    下面我们来使用ehcache

    在classpath下添加ehcache.xml

    在UserMapper.xml中添加:

    <!-- <cache readOnly="true" type="org.mybatis.caches.ehcache.LoggingEhcache"/>   -->
    <cache type="org.mybatis.caches.ehcache.EhcacheCache"/>
    用上面那个会输出更加详细的日志,下面的不会

    需要用到ehcache.jar,下载地址:http://sourceforge.net/projects/ehcache/files/ehcache/ehcache-2.7.0/ehcache-2.7.0-distribution.tar.gz/download

    mybatis-ehcache.jar下载地址:http://code.google.com/p/mybatis/downloads/detail?name=mybatis-ehcache-1.0.2-SNAPSHOT-bundle.zip&can=3&q=Product%3DCache

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值