HQL联接查询
HQL支持的联接类型
内联接:
- 语法:from Entity inner join [fetch] Entity.property
- 忽略fetch关键字,我们得到的结果集中,每行数据都是一个Object数组
本地SQL查询
Hibernate对本地SQL查询提供了内置的支持:
- Session的createSQLQuery()方法返回SQLQuery对象
- SQLQuery接口继承了Query接口
- SQLQuery接口的addEntity()方法将查询结果集中关系数据映射为对象
- 通过命名查询实现本地SQL查询
通过命名查询实现本地SQL查询:
- 使用<sql-query>元素定义本地SQL查询语句
- 与<class>元素并列
- 以<![CDATA[SQL]]>方式保存SQL语句
- 通过Session对象的getNamedQuery()方法获取该查询语句。
//原生SQL
@Test
public void test12(){
String hql= "select * from h_user";
SQLQuery query=session.createSQLQuery(hql);
//设置结果集转换的类型
query.addEntity(User.class);
List<User> list = query.list();
System.out.println(list);
}
Criteria查询(标准查询)
Criteria查询采用面向对象方式封装查询条件,又称为对象查询
对SQL语句进行封装
采用对象的方式来组合各种查询条件
由Hibernate 自动产生SQL查询语句
Criteria由Hibernate Session进行创建
Restrictions常用限定查询方法
Criteria查询实现分页、排序
排序
Criteria查询不仅能组合出SQL中where子句的功能,还可以组合出排序查询功能;
使用org.hibernate.criterion.Order对结果进行排序;
排序的方法为:
- asc()
- desc()
分页
Criteria的setMaxResults()方法可以限定查询返回数据的行数;
Criteria的setFirstResult()设定查询返回结果的第一行数据的位置;
结合以上的两个方法即可实现简单分页。