一. 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查询。