检索方式简介
HQL检索方式:
使用面向对象的HQL查询语言。
- QBC检索方式:
使用QBC(Query By Criteria)API来检索对象。这种API封装了基于字符串形式的查询语句,提供了更加面向对象的接口。
- 本地SQL检索方式:
使用本地数据库的SQL查询语句。
HQL(Hibernate Query Language)简介
- HQL是一种面向对象的查询语言,和SQL查询语言有些类似。
- 在Hibernate提供的各种检索方式中,HQL是使用最广的一种检索方式。
- Query接口是HQL查询接口,提供各种查询功能。
HQL实体检索
1.全名查询
- HQL语句中关键字大小写无关,但习惯将关键字小写。
- from 关键字后面是类名不是数据库表名,类名需区分大小写。
等价于:
1.HQL使用别名查询 - HQL检索一个类的实例时,如果查询语句的其它地方需要引用它,可以给类指定一个别名。
as 关键字用来指定别名,as 关键字也可以省略。
3.where 子句(条件查询) - where 子句中给出的是类的属性名而不是数据库表字段名,其中属性名必须区分大小写。
String sql="from User where userName=?";
Query query=session.createQuery(hql);
query.setParameter(0,"张三");//注意下标是从0开始的
List userList=query.list();
4.在HQL查询语句中按参数名称绑定参数(具名查询)
HQL检索单个对象
- HQL查询对象返回结果方法:
list():返回List类型的查询结果,返回所有满足条件额对象。
uniqueResult():返回单个对象
Query query=session.createQuery("from User u where u.userName='张三'");
User user =(User) query,uniqueResult();
HQL分组与排序
- 1.order by 子句
- 2.group by 子句
- 3.having 子句
- 4.左连接查询–inner join
Query query= session.createQuery("select d.name,e.name,e.id from Department d inner join d.employees e");
/*
* Department是实体类的名称
d是它的别名
inner join是内连接的关键字
d.employees 是Department实体类的 一个属性
*/
List<Object[]> list=query.list();
for (Object[] objects : list) {
for (Object object : objects) {
System.out.print(object+"\t");
}
System.out.println();
}
- 5.左连接查询–left join
Query query= session.createQuery("select e.id,d.name,e.name from Department d left join d.employees e");
List<Object[]> list=query.list();
for (Object[] objects : list) {
for (Object object : objects) {
System.out.print(object+"\t");
}
System.out.println();
}
HQL分页查询
- 做批量查询时,如果数据量很大就需要分页功能,HQL提供了用于分页查询的方法:
setFirstResult(int firstResult)//调用的是query对象 - 设定从哪个对象开始检索。
setMaxResult(int maxResult)
- 设定一次检索对象的数目。//就是一页显示多少条数据
QBC(Query By Criteria)简介
-
QBC可以看作是传统SQL的对象化表示,更加面向对象。
-
主要由Criteria接口、Criterion接口、Restrictions 类组成。
-
Criterion 是 Criteria 的查询条件。
-
Criterion 的实例可以通过 Restrictions 工具类来创建
-
QBC表达式
检索姓名为 张% 的所有员工。
步骤:
调用 Session 的 createCriteria() 创建 Criteria 实例;
通过 Restrictions 设定查询条件;
调用 Criteria 实例的 list() 方法执行查询。
本地SQL查询
- HQL 和 QBC 查询,Hibernate 会生成标准的 SQL 语句适合不同的数据库平台。
- 有时需要根据底层数据库生成特殊的 SQL 查询语句, Hibernate 对本地 SQL 查询提供了内置支持。
步骤:
调用session.createSQLQuery()创建SQLQuery实例,并指定查询的实体类型;
调用SQLQuery实例的list() 方法执行查询(如果查询单个对象,调用uniqueResult() )。