HQL了解
官方文档
Hibernate查询语言(HQL)和Java持久性查询语言(JPQL)都是面向对象模型的查询语言,本质上类似于SQL。
演示代码
package query;
import java.util.Arrays;
import java.util.List;
import org.hibernate.ScrollableResults;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.query.Query;
import org.junit.jupiter.api.Test;
import orm.entity.Event;
import util.SessionUtil;
/**
* HQL语句测试
*/
public class HQLTest {
private Session session = SessionUtil.getSession();
private Transaction transaction = session.beginTransaction();
private String hql;
// 查询所有
@Test
public void test01() {
// form 后面是实体类名,不是表面,通过类对象来查询
hql = \"from Event\";
Query<Event> query = session.createQuery(hql, Event.class);
System.out.println(query.list());
transaction.commit();
}
// 带参数查找
@Test
public void test02() {
// 格式: ?1, ?2, ?3
hql = \"from Event where id = ?1 and title = ?2\";
Query<Event> query = session.createQuery(hql, Event.class);
// 第几个参数, 参数值
query.setParameter(1, Long.valueOf(1));
query.setParameter(2, \"标题一\");
System.out.println(query.list());
transaction.commit();
}
// 带参数查找
@Test
public void test03() {
// 格式: :id, :name, :abc, :asdasudyu
hql = \"from Event where id = :id\";
Query<Event> query = session.createQuery(hql, Event.class);
// 第几个参数, 参数值
query.setParameter(\"id\", Long.valueOf(1));
System.out.println(query.list());
transaction.commit();
}
// 查找指定字段
@Test
public void test04() {
// 实体类的属性名: id, title, date
hql = \"select title from Event\";
// 这个Query查找的就不是对象了,而是对象数组
// 需要滚动结果集接收,不懂的查看一下官方文档,或者API, 类似于Result
ScrollableResults scrollableResults = session.createQuery(hql).scroll();
while (scrollableResults.next()) {
Object[] row = scrollableResults.get();
System.out.println(Arrays.toString(row));
}
}
// 分页查询
@Test
public void test05() {
hql = \"from Event\";
int first = 0; // 从第几行开始
int size = 10; // 每页的大小
Query<Event> query = session.createQuery(hql, Event.class);
query.setFirstResult(first);
query.setMaxResults(size);
List<Event> events = query.list();
for (int i = 0; i < events.size(); i++) {
Event event = events.get(i);
System.out.println(event);
}
}
/**
* 聚集函数的使用
*/
@Test
public void test06() {
hql = \"SELECT count(*) FROM Event\";
Object obj = session.createQuery(hql).getSingleResult();
System.out.println(obj);
}
}
版权声明
本文仅代表作者观点,不代表百度立场。
本文系作者授权百度百家发表,未经许可,不得转载。




