Hibernate HQL的5种常见检索方式详解
1. 指定别名
HQL 语句与 SQL 语句类似,也可以使用 as 关键字指定别名。在使用别名时,as 关键字可以省略。下面通过案例演示如何在 HQL 语句中使用别名。
package com.mengma.test;
import java.util.List;
import org.hibernate.Query;
import org.hibernate.Session;
import org.junit.Test;
import com.mengma.domain.HibernateUtils;
import com.mengma.domain.User;
public class HQLTest {
// 指定别名
@Test
public void test1() {
Session session = HibernateUtils.getSession(); // 得到一个 Session
session.beginTransaction();
String hql = "from User as u where u.name='zhangsan '"; // 编写 HQL
Query query = session.createQuery(hql); // 创建 Query对象
List<User> list = query.list(); // 执行查询,获得结果
for (User u : list) {
System.out.println(u);
}
session.getTransaction().commit();
session.close();
}
}
2. 投影查询
《指定别名》案例查询出了对象的所有属性,但在实际需求中,可能只需要查询对象的部分属性。此时,可以采用 Hibernate 的投影查询方式查询对象的部分属性。
使用投影查询时的语法结构如下所示:
select 需要查询的属性 from 实体类名
// 投影查询
@Test
public void test2() {
Session session = HibernateUtils.getSession(); // 得到一个 Session
session.beginTransaction();
String hql = "select u.name, u.age from User as u"; // 编写 HQL
Query query = session.createQuery(hql); // 创建Query对象
List<Object[]> list = query.list(); // 执行查询,获得结果
Iterator<Object[]> iter = list.iterator();
while (iter.hasNext()) {
Object[] objs = iter.next();
System.out.println(objs[0] + " \t" + objs[1]);
}
session.getTransaction().commit();
s