第三讲 Hibernate查询

一. Hibernate检索策略?

lazy="false" 立即加载 

lazy="true" 延迟加载 

连接查询

fetch="join"  

outer-join=true

批量检索数据

batch-size=3-10 

注意:批量查询数据Hibernate会自动将SQL语句,转换成in()或or查询;在数据库中in和or查询,称为全表扫描,性能低下。

二. Hibernate中的查询语句HQL?

HQL语句:

关键字不区分大小写,类、属性必须严格区分大小写。

1. 查询指定字段?

Select 属性名,属性名 from 类名;

注意返回List,List中存放数组。

2. 查询指定字段,并转换成对象?

Select new 类(属性名,….) from 类名;

注意:返回List,List中存放指定对象。(类中必须提供对应的构造方法)

3. 关联查询?

from 类名 join 属性(类的属性)

也可以使用配置文件进行连接查询:fetch=“join” |  outer-join=“true”

示例:

select new Emp(e.ename,d.dname) from Emp as e join e.dept as d where e.dept.dname='市场部'

 

4. 聚合函数、比较运算、模糊查询。。。。。

跟标准SQL完全一样。

5. HQL语句使用占位符?

跟JDBC中类似。(区别:JDBC从1开始占位,HQL中从0开始占位)

6. 分页查询?

setFirstResult() —— 设置第一行的位置

setMaxResult()—— 最大返回条数

 

三. Hibernate中的本地SQL语句?

优点:如果需要使用数据库本身提供的特殊处理函数。(convert(),datediff()等);必须使用本地化SQL语句。

问题:不能将查询结果转换成类的对象;而是将结果转换成Object的数组,再存入List。

session.createSQLQuery("原始的SQL语句(查询)").list();

 

四. Criteria 查询

List<Emp> list = session.createCriteria(Emp.class)

.add(Restrictions.gt("eid", 1))

.add(Restrictions.eq("ename", "王五"))

.list();

 

总结:

Hibernate最常用的查询:HQL查询(99%)。

特殊的数据库函数:本地SQL查询。

完全避免SQL,按照对象的方式进行查找:使用Criteria查询。

posted on 2012-11-05 09:11  somewhere!  阅读(314)  评论(0编辑  收藏  举报

导航