频道栏目
首页 > 资讯 > HTML/CSS > 正文

hibernate一级二级缓存代码实例

18-05-11        来源:[db:作者]  
收藏   我要投稿

hibernate一级二级缓存代码实例

指定实体类

举得是一对多的例子

如果没有开启二级缓存,和指定类实体的情况下

get获取department时此时一级缓存只是保存了除emplyoee属性的其他属性信息,当在执行department.employee时此时由于缓存中没有员工信息,所以仍会再执行一次语句通过departmentId来查询员工信息的

1.当save()时 会缓存department的所有信息

2.当开启了二级缓存,并且指定了实体类Department和指定了员工集合 并未指定实体类Emplyoeen

如果初次department.emplyoee正常执行

另外一个department.emplyoee时

get获取department时此时一级缓存只是保存了除emplyoee属性的其他属性信息,二级缓存也是保存一级缓存同样信息,当在执行department.employee时此时由于一级缓存中没有员工信息但有department的ID,缓存机制第一次利用departmentID查到了department对象却没有员工信息,此时会利用员工emplyoeeId一个一个查询,当在一级缓存中cache.get()没有查询到会在二级cache.get()耳机没有查询到,所以会直接利用员工ID在数据库查询,有多少个员工执行多少句sql语句

3.当在2的基础上也指定了员工类此时员工信息也会缓存到二级一级缓存内,所以当别的seesionf调用department.emplyoee时直接在二级缓存获取不再执行语句

4.creatquery().list

默认不会使用缓存但是他会把数据放在缓存中

开启缓存 creatquery().setcacheable(true).list() //使用查询缓存 和配置文件中的true//查询缓存的开关

但两次seesion查询的语句必须一样此时缓存才有效

5.creatquery.iterate()迭代器

会使用缓存 如果条件语句是emplyoee.id<10; 此时会1,2,3......9一个一个的查询因为缓存机制是利用ID缓存的所以会一个个的查询并缓存 此时执行 10次语句 一次总的9次分开的

另外一个seesion查询时会执行一次总语句然后在缓存里的不再执行,不再缓存里的继续去数据库查询执行语句

语句 总的+不在缓存去数据库执行的语句

6.如果第一个session在get时二级一级都缓存时,中间执行了一次createquery()对缓存中缓存的对象所在数据库的信息进行更新,会是二级缓存的数据失效,对一级缓存没有影响,当另外一个session从二级缓存中获取时由于二级缓存数据失效,会重新执行查询语句找到最新的数据

所以仍会再执行一次语句通过departmentId来查询员工信息的

相关TAG标签
上一篇:Win10系统安装TensorFlow-GPU教程
下一篇:小程序之界面跳转传值实现方法
相关文章
图文推荐

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站