一,读取缓存(一级缓存,二级缓存)一级缓存可以理解为session对象的一个map
有很多方法可以往缓存中添加数据,
往二级缓存添加数据时,save方法不适合native生成方式的主键
但只有get,load和Iterator能从缓存中读取数据,其他的方法不可以(Query 不能从缓存里去对象)
Query,Criteria(查询缓存)由于命中率较低,所以hibernate缺省是关闭;修改cache.use_query_cache
为true
打开对查询的缓存,并且调用query.setCacheable(true)
或criteria.setCacheable(true)
。
二,清除缓存(防止内存溢出)
session.evict(obj); ----一条记录(在使用uuid生成策略时。你手动调用该方法会报错
)
session.clear();----所有的
sessionFactory.evict(User.class); ----所有的该类型对象
sessionFactory.evict(User.class,12); ----一条记录
session.flush() --------会发uuid没发的sql语句(在调用evict或clear方法前,先调用该方法)
作用:可以改变sql语句的执行顺序
(hibernate默认是save,update,delete
)
三,判断对象是否在数据库中存在
由hbm文件的id配置unsaved-value
決定
四,二级缓存
1.hibernate.cfg.xml里配置
<property name="cache.use_query_cache">true
</property>
<property name="cache.provider_class">org.hibernate.cache.OSCacheProvider
</property>
<class-cache class="yangzhibin.User" user="read-only
"/>
usage(策略)取值:
read-only
:
效率最高,但是对象不能修改,修改了会报异常(如:省市表)
read-write:严格的读写(如:银行)
nonstrict-read-write:不严格的读写(如:帖子的回帖量)效率高点
transactional:一般缓存没这个功能(jboss-cache实现了,oscache不提供这个功能)
2.User.hbm.xml里配置
<cache usage="read-write
"/>
五,hibernate参数
1.hibernate.generate_statistics
:产生统计信息
取值:false(默认) ,true
查看:
Statistics st = sessionFactory.getStatistics();
System.out.println(st);//查询全部
//查看二级缓存统计信息
System.out.println("put(放入):" + st.getSecondLevelCachePutCount());
System.out.println("hit(命中):" + st.getSecondLevelCacheHitCount());
System.out.println("miss(丢失):" + st.getSecondLevelCacheMissCount());
六,Session和StatelessSession的区别:StatelessSession 不跟缓存打交道
七,Query接口的executeUpdate()(3.0中增加的方法,用于进行批量处理,会把缓存中数据都清空了)
八,HQL和Criteria
1,Criteria查询
1.1
DetachedCriteria查询
:离线查询
(在处理动态查询时很有用)
为什么离线呢? 因为它的创建跟session无关,而Criteria的创建跟session有关
DetachedCriteria dc = DetachedCriteria.forClass(User.class);
String name = request.getParameter("name");
if (name != null)
{
dc.add(Restrictions.eq("name", name));
}
int age = request.getParameter("age");
if(age > 0)
{
dc.add(Restrictions.eq("age", age));
}
Criteria c = dc.getExecutableCriteria(session);//操作还是要通过Criteria来实现
1.2 Example
查询 :根据例子查询
Example.create(obj);
criteria.add(example)
九,Iterator查询(先把id都查询出来,再根据id来查询)N+1次查询
十,SQL和命名查询
Query q = session.createQuery(hql);
//sql查询
Query q = session.createSQLQuery("select * from user");//返回对象数组
Query q = session.createSQLQuery("select * from user").addEntity(User.class);//返回User对象list
//命名查询
Query q = session.getNamedQuery("queryUserById");
分享到:
相关推荐
Hibernate框架知识点的梳理;对HQL检索、检索策略、以及如何配置详细的进行描述
hibernate知识点的总结,适合初学者
Hibernate知识点总结,自己学习hibernate所坐的笔记,希望能帮助更多的朋友
本文档适用于J2EE初学者,主要是针对hibernate部分的知识点进行总结,有助于初学者迅速入门
2023年hibernate知识点详解王成敏.doc
Hibernate全部知识点
本文档总结了有关hibernate面试的知识点
Hibernate的一些学习知识点总结PPT等资源,适合初学者
hibernate主要知识点归纳,学习hibernate时自己总结的,还不错的东西,给大家分享下
该资源总结了java中常见的三大开源框架的知识点,便于初学者学习。
Hibernate知识文档: 一、第一个hibernate项目 1、新建一个java项目 2、创建User Library,加入jar包 * HIBERNATE_HOME/lib/*.jar * HIBERNATE_HOME/lib/hibernate3.jar * MySql JDBC驱动 3、提供hibernate....
Hibernate、JPA、JTA 核心接口
hibernate的学习笔记,hibernate所以知识点全,一看就能上手........包含代码和书写格式和图片分析~~~~hibernate的学习笔记,hibernate所以知识点全,一看就能上手........包含代码和书写格式和图片分析~~~~...
hibernate基本知识点,里面有关于hibernate的配置说明,hibernate的讲解
这个是HIbernate框架的练习代码,所有的练习的结果都是成功的,可以根据我的博客Hibernate的知识点来看
这是超强的学习笔记,包学包会,里面涵盖了hibernate的所有知识点,深入浅出
struts2+hibernate+spring三大框架知识点笔记
自己总结的一些hibernate的知识点
hibernate知识大全,详解啊,表关系,各种知识点啊,绝对犀利