hibernate缓存测试

测试一级缓存:当用load的时候先去hibernate缓存找,不会去发送sql,但是如果你要打印查询出来的值时,如果缓存没有就发送sql,如果有就直接用缓存的值,当用get的时候先是发送sql语句,不管你第一次是否使用都会发送sql,但是以后就到缓存里面查询

* 二级缓存测试:二级缓存不是hibernate自带的缓存,需要我们自己开启缓存才可以
* 当开启二级缓存的时候所有的session共享一个sessionFactory,所以每个session
* 都会到缓存区去查询是否有过相同的操作,有相同的操作就不值取出来。
* 开启二级缓存的步骤:
* 1> 在hibernate.cfg.xml文件配置如下属性
* <property name="hibernate.cache.use_second_level_cache">true</property>
* <property name="hibernate.cache.provider_class">org.hibernate.cache.EhCacheProvider</property>
*  2>在映射文件中采用<cache>标签<cache usage="read-only"/>
*  这个<cache>标签只能放在<class>标签的内部,而且必须处在<id>标签的前面

/**
* 测试查询缓存:查询缓存也不是hibernate自带的缓存,它也需要配置的,你每一次调用
* list方法是hibernate都会想数据库发送一次sql,当你启用查询缓存是每一个query对象
* 都必须要开启一个查询缓存,否则,当你在创建一个查询对象是它将不会去查询缓存中搜索
* 查询缓存就是一个map,你的查询sql就是map中的key,sql查询出来的值就是map中的值
* 当调用iterator方法时,没有都会到数据库中发送sql,但是查询数据的时候,它会调用load方法
* 这时load方法会到缓存中查询了。这就是iterator和list的区别
*
*/

/**
* 实现查询缓存时,hibernate回检测一级缓存是否开启,如果符合一级缓存开启的条件
* 就在一级缓存里面查询,一级缓存存放的是实体对象,其他的都不存放,如果一级缓存
* 开启的条件不满足就查询二级缓存,二级缓存也缓存的是对象,hibernate会检查二级
* 缓存是否开启,如果开启就到二级缓存区查询,若没有开启就进入查询缓存,查询缓存
* 是一map形式存放数据的,如果是实体对象,查询缓存会存放id,如果是一般的字段,
* 查询缓存会把所有字段的值保存在map的value里面,然后把sql保存在map的key中。
*/

你可能感兴趣的:(sql,Hibernate,xml,cache)