Hibernate – 查询语言
Hibernate 是一个Java框架,可以更轻松地创建与数据库交互的Java应用程序。在 HQL 中,它使用类名而不是表名。因此,它是一种独立于数据库的查询语言。 Hibernate 将 HQL 查询转换为 SQL 查询,然后用于执行数据库操作。尽管 Native SQL 可以直接与 Hibernate 一起使用,但鼓励在可行的情况下使用 HQL 以防止数据库可移植性问题。
HQL 有很多好处。一些好处是——它们独立于数据库,支持多态查询,并且对于Java程序员来说易于学习。
Query 接口为表示和操作 HQL 查询提供了面向对象的方法和功能。
示例: HQL FROM 子句
要将整个持久对象加载到内存中,可以使用 FROM 子句。
String hib = "FROM Student";
Query query = session.createQuery(hib);
List results = query.list();
示例: HQL SELECT 子句
当只需要对象的几个属性而不是整个对象时,使用 SELECT 子句。
String hib = "SELECT S.roll FROM Student S";
Query query = session.createQuery(hib);
List results = query.list();
示例: HQL WHERE 子句
过滤记录是使用 WHERE 子句完成的。它用于仅检索满足一组条件的记录。
String hib = "FROM Student S WHERE S.id = 5";
Query query = session.createQuery(hib);
List results = query.list();
示例: HQL ORDER BY 子句
ORDER BY 子句用于对 HQL 查询的结果进行排序。
String hib = "FROM Student S WHERE S.id > 5 ORDER BY S.id DESC";
Query query = session.createQuery(hib);
List results = query.list();
HQL 更新条款
UPDATE 子句是更新属性值所必需的。
String hib = "UPDATE Student set name=:n WHERE roll=:i";
Query q=session.createQuery(hib);
q.setParameter("n","John");
q.setParameter("i",23);
int status=q.executeUpdate();
System.out.println(status);
HQL 删除子句
需要删除属性的值。
String hib = "DELETE FROM Student where id=10";
Query query=session.createQuery(hib);
query.executeUpdate();
HQL INSERT 子句
需要将值插入到关系中。
String hib = "insert into Student(first_name, last_name)" +
"select first_name, last_name from backup_student";
Query query = session.createQuery(hib);
int result = query.executeUpdate();
使用查询进行分页
Method | Action Performed |
---|---|
Query setMaxResults(int max) | Instructs Hibernate to get a specific number of items |
Query setFirstResult(int starting_no) | Takes an integer as an argument that represents the first row in your result set, beginning with row 0. |
例子
String hib = "from Student"
Query query=session.createQuery(hib);
query.setFirstResult(5);
query.setMaxResult(10);
List list=query.list();
上面的示例返回从 5 到 10 的记录。
聚合方法
与 SQL 类似,HQL 有许多聚合技术。
示例 1:平均值
String hib = "select avg(marks) from Student";
Query q=session.createQuery(hib);
示例 2:最大值
String hib = "select max(marks) from Student";
Query q=session.createQuery(hib);
示例 3:分钟
String hib = "select min(marks) from Student";
Query q=session.createQuery(hib);
示例 4:计数
String hib = "select count(id) from Student";
Query q=session.createQuery(hib);
总和示例
String hib = "select sum(marks) from Student";
Query q=session.createQuery(hib);
List list=q.list();
System.out.println(list.get(0));