1、mybatis缓存机制
mybatis缓存机制分为一级缓存和二级缓存。
mybatis默认开启一级缓存,二级缓存需要更改配置文件开启。数据库操作时需要构造sqlSession对象,sqlSession中有一个内存区域存储缓存,当sqlSession关闭,会清空缓存数据。
一级缓存是sqlSession级别的,即一个sqlSesion先后发起同一个查询请求时,第一个查询结束后,会将数据缓存到一级缓存里,第二个查询请求将不走数据库,而直接从一级缓存中获取数据,提高查询效率。
二级缓存是mapper级别的缓存。当两个sqlSesion查询同一个nameSpace下的同一sql时,第二个查询不走数据库,直接从缓存中获取。
当sqlSession执行commit操作时,会清空缓存,是为了缓存中数据是最新的,避免出现脏读。
开启二级缓存:
两种方式:
1.在SqlMapConfig.xml配置二级缓存总开关
<settings>
<setting name="cacheEnabled" value="true"/>
</settings>
2.在mapper.xml单独开启此mapper的二级缓存
通过<cache/>,<cache-ref/>或@CacheNamespace,@CacheNamespaceRef标记使用缓存的Mapper.xml或Mapper接口(同一个namespace,不能同时使用)才会有二级缓存。
3、#和$的区别
$只是将值简单的进行字符串拼接,有sql注入的危险。#以绑定变量的方式将值传入。