mybatis缓存
三:
一:cache,mybatis将某些数据保存于内存中;
二:一级缓存;二级缓存;
三:提高系统的性能(前提:缓存的命中率要高,如果低,就没有意义);
一级缓存:
一:本地缓存;
二:在参数和sql完全一样的情况下,SqlSession不会每次都发送sql到数据库查询数据,浪费资源,于是在没有声明需要刷新的情况下,mybatis会在第一次执行sql时,将查询到的数据保存在内存中,以备二次使用;(如果N次需要查询的结果都是一样,那就可以将数据保存在内存中,以备使用,N:可以是两次或者多次,不是固定的,是相对的,相对于用和不用所带来的性能影响;故兵无常势,水无常形;能因敌变化而取胜者,谓之神);
三:所有的增删改都不缓存;相对于同一个SqlSession的缓存而已;
二级缓存:
一:全局缓存;
二:基于namespace级别的缓存,一个名称空间,对应一个二级缓存;一个会话查询一条数据,该数据会被放到一级缓存中,但是当该缓存关闭时,我们还需要数据,于是将一级缓存的数据保存到二级缓存中。
三:新的会话查询信息也可以从二级缓存中得到;不同的mapper查询出来的数据保存在对应的缓存(map)中;
开启缓存方式:
一:
<?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.nbg.dao.UserMapper"> <cache eviction="FIFO" flushInterval="60000" size="512" readOnly="true"/> </mapper>
二:
<settings> <setting name="cacheEnabled" value="true"/> </settings>
三:
<select id="getUserById" resultType="User" useCache="true">/select>
自定义缓存:eacache;