0%

HQL

文章字数:234,阅读全文大约需要1分钟

HQLHibernate Query Language的缩写,提供更加丰富灵活、强大的查询能力,接近SQL语句。

和SQL的区别

  1. HQL:
  • 对查询对象进行了面向对象的封装。from 类名+类对象 where 对象属性
  • 区分大小写,关键字不区分大小写
  • 占位符下标从0开始计算(hibernate5 后不支持)
  • 支持命名参数
  1. SQL
  • 面向数据库表查询。from 表名 where 表中字段
  • 不区分大小写
  • 从1开始计算位置
  • 不支持:命名参数

查询返回结果

  1. 单个对象
  2. 多个
  • object[]
  • list
  1. Map

使用例子

1
2
3
4
5
6
7
public void test(){
Query query = session.createQuery("select new map(b.bookId, b.bookName) from Book b");
List<Map> list = query.list();
for(Map b : list){
System.out.println(b);
}
}
  1. 返回String

    1
    select b.bookName from book b
  2. 返回Object

    1
    select b.bookId,b.bookName from Book b
  3. 返回对象

    1
    select new Book(b.bookId, b.bookName) from Book b
  4. 返回Map

    1
    select new map(b.bookId,b.bookName) from Book b

占位符

1
2
3
Query query = session.createQuery("from Book where bookId in (:bookIds)");
query.setParameterList("bookIds", new Integer[] {1,2,3});
List list= query.list();

hibernate5之后

1
2
Query query = session.createQuery("from Book where bookId in (:bookIds)");
List list = query.setList("bookIds", xxxx).list();

连接查询

1
select o.orderNo,oi.quantity from Order o, OderItem oi where o = oi.order

函数

  • sun总共
  • avg平均
  • max最大
  • min最小
  • count总共

分页

1
2
3
4
Query query = session.createQuery("from Book");
query.setFirstResult(2);
query.setMaxResults(3);
List<Book> list = query.list();