## 说明

Hibernate Query language,语法同SQL基本一致,但其中使用的实体类和类的属性,而非表名和表的列名

声明

1
Query query = session.createQery(String hql);

查询

list

返回List对象

1
List<POJO> list = query.list();

iterate

返回Iterator对象

1
Iterator<POJO> it = query.iterate();

list和iterate的区别

  • list会一次性查询所有结果。
  • iterate会一次性查询所有主键,并在调用 iterator.next()时优先查询缓存中该主键对应的记录。
  • iterate会更好的利用缓存。

select

选择多个列时,返回List<Object[]>列表

占位符

?

PreparedStatement一样,可以使用占位符’?’

1
query.setType(index, value); //index从0开始

使用名称

在需要设置占位符的地方使用 ‘:占位名’

1
query.setType("占位名", value);

迫切连接

使用join时,只有在调用多方结果实体的具体属性时才会真正进行查询。

可使用迫切内连接一次性取出所有对象

在join后添加fetch关键词

命名的HQL

配置

可在配置文件中定义HQL后再代码中调用

1
2
3
<query name="命名">
<![CDATA[ HQL语句]]>
</query>

调用

1
Query query = session.getNameQuery("命名");