📜  Hibernate – 查询语言

📅  最后修改于: 2022-05-13 01:54:24.944000             🧑  作者: Mango

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();

使用查询进行分页

MethodAction 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));