一.缓存
1.分类
a) 一级缓存(存放session)
可以直接使用
私有的
--当查询时,如果有缓存,先查缓存,如果没有,才查数据库
session.clear(); //清除所有缓存
session.evict(s1); //清空一个缓存
b) 二级缓存(存放sessionFactory)
需要配置才能使用
b1) 复制二级缓存实现类放在lib下 ehcache.jar
b2) 在总的配置文件使用这个实现类(在show_sql)
cache.provider_class=org.hibernate.cache.EhCacheProvider
b3) 哪张表使用二级缓存就在哪个映射文件中配置(如下)
<hibernate-mapping>
<class name="com.pojo.Emp" table="emp" catalog="s3839">
<!--在class里,在id前配置下面这条语句 nonstrict-read-write:读写 read-only :只读 -->
<cache usage="nonstrict-read-write"/>
<id name="empId" type="java.lang.Integer">
<column name="empId" />
<generator class="native" />
</id>
</class>
</hibernate-mapping>
c) 查询缓存(存放sessionFactory) hql语句使用
c1) 配置好二级缓存(b1步,b2步)
c2) 在总的配置文件中开启查询缓存开关(show_sql)
cache.use_query_cache=true
c3) 哪个语句要使用查询缓存就在哪个query后面.setCacheable(true)
二.pojo对象的三种状态
状态 | 在一级缓存 | 在数据库 | 示例 |
---|---|---|---|
临时(transient) | false | false | new POJO() /session.delete |
持久(persistent) | true | true | session.save/update/get/load/saveOrUpdate/lock |
游离(detached) | false | true | session.clear/evict/close |
三. dao的操作(session操作)
session.save 保存
session.update 修改
session.saveOrUpdate 保存或修改
session.merge 合并(保存或修改)
session.delete 删除
session.get 查询
session.load
session.clear
session.evict
session.close
session.lock 锁入缓存
session.createQuery