缓存

延迟加载

概念:

   MyBatis中的延时加载,也称为懒加载,是指在进行表的关联查询时,按照设置延迟规则推迟对关联对象的select查询。在进行的时候,只查询出一方,当程序中需要多方数据时,mybatis再发出sql语句进行查询。这样子延迟加载就可以的减少数据库的压力。MyBatis的延迟加载只是对关联对象的查询有迟延设置对于主加载对象都是直接执行查询语句的。

加载时机:

直接加载:执行完对主加载对象的select语句,马上执行对关联对象的select查询。

侵入式延迟:

执行对主加载对象的查询时,不会执行对关联对象的查询。但当要访问主加载对象详情属性时。就会马上执行关联对象的select查询。

深度延迟:

执行对主加载对象的查询时,不会执行对关联对象的查询。访问主加载对象的详情时也不会执行关联对象的select查询。只有当真正访问关联对象的详情时,才会执行对关联对象的select查询。

缓存说明

MyBatis查询缓存的作用域是更据映射文件的namespace划分的,相同的namespacemapper查询数据放在同一个缓存区域。不同namespace下的数据互不干扰。

无论是一级缓存还是二级缓存都是按照namespace进行分别存放的。

一级、二级缓存的不同之处在于sqlSession一旦关闭,则SqlSession中的数据将 不存在,即一级缓存就不复存在了。而二级缓存的生命周期与整个 应用同步,与SqlSession是否关闭无关。换句话说,一级缓存是在同一线程(同一SQLSession)间共享数据,而二级缓存是在不同线程(不同的SqlSession)间共享数据。

一级缓存存在证明:

同一个会话(SqlSession)执行两次相同的Sql,观察控制台发送了几条Sql

一级缓存结论

1Mybatis框架天然集成一级缓存

2、一级缓存查询依据为SQLID+SQL语句

3、增删改会清空一级缓存

二级缓存使用步骤

1 mybatis-config.xml大配置文件开启二级缓存,默认 就是开启的二级缓存<setting neme=cacheEnabledvalue=true/>

2在小配置文件中,添加cache节点

3 Entity实现Serializable

 在测试类当中,创建不同的SqlSession,执行相同操作

增删改对二级缓存的影响:

一级缓存在增删改的情况下,不管是否commit()都会重新执行数据库查询操作(清空缓存数据)。

二级缓存在增删改的情况下,如果commit,重新执行数据库查询操作(清空缓存数据);如果不提交则还会查询缓存数据

 

flushCache:刷新缓存

select语句当中默认为false,也就是代表第一次执行sql时会查询数据库,将数据库的数据放入到缓存当中,那么但后续用时会查询缓存中在增删改时,默认值值为true,代表执行完增删改将会刷新缓存(前提时必须commit)。

UseCache:使用缓存:

 

select标签中,如果值为true代表使用推荐,值为false时,每一次查询都会去数据库查询只针对单个Select

posted on 2019-10-14 16:44  我胡闹i你善后i  阅读(112)  评论(0编辑  收藏  举报