• HQL查询语言——转载(http://www.cnblogs.com/20gg-com/p/6045739.html)


    Hibernate查询语言(HQL)是一种面向对象的查询语言,类似于SQL,但不是对表和列操作,HQL适用于持久对象和它们的属性。 HQL查询由Hibernate转换成传统的SQL查询,这在圈上的数据库执行操作。

    虽然可以直接使用SQL语句和Hibernate使用原生SQL,但建议使用HQL尽可能避免数据库可移植性的麻烦,并采取Hibernate的SQL生成和缓存策略的优势。

    都像SELECT,FROM和WHERE等关键字不区分大小写,但如表名和列名的属性是区分在HQL敏感。

    FROM 语句
    使用FROM子句,如果要加载一个完整的持久化对象到内存中。下面是一个使用FROM子句的简单的语法:

    1 String hql = "FROM Employee";//Employee 是实体类名,严格区分大小写
    2 Query query = session.createQuery(hql);
    3 List results = query.list();

    如果需要完全限定在HQL一个类名,只需指定如下的包和类名:

    1 String hql = "FROM com.shuyinghengxie.haha.Employee";
    2 Query query = session.createQuery(hql);
    3 List results = query.list();

    AS 语句
    AS子句可以用来别名分配给类中的HQL查询,特别是当有很长的查询。例如,我们前面简单的例子是以下几点:

    String hql = "FROM Employee AS E";
    Query query = session.createQuery(hql);
    List results = query.list();

    AS关键字是可选的,也可以直接在之后的类名指定别名,如下所示:

    1 String hql = "FROM Employee E";
    2 Query query = session.createQuery(hql);
    3 List results = query.list();

    SELECT 子句
    SELECT子句提供了更多的控制权比from子句的结果集。如果想获得对象而不是整个对象的几个属性,使用SELECT子句。下面是一个使用SELECT语句来获取Employee对象只是FIRST_NAME字段的简单的语法:

    String hql = "SELECT E.firstName FROM Employee E";
    Query query = session.createQuery(hql);
    List results = query.list();

    值得注意的是在这里,Employee.firstName是Employee对象的一个属性,而不是EMPLOYEE表的一个字段。

    WHERE 子句
    如果想缩小了从存储返回的特定对象,可以使用WHERE子句。下面是一个使用WHERE子句的简单的语法:

    String hql = "FROM Employee E WHERE E.id = 10";
    Query query = session.createQuery(hql);
    List results = query.list();

    ORDER BY 子句
    若要排序HQL查询的结果,将需要使用ORDER BY子句。您可以在结果集按升序(ASC)或降序(DESC)通过在对象的任何属性排序结果。下面是一个使用ORDER BY子句的简单的语法:

    String hql = "FROM Employee E WHERE E.id > 10 ORDER BY E.salary DESC";
    Query query = session.createQuery(hql);
    List results = query.list();

    如果想通过一个以上的属性进行排序,你会仅仅是额外的属性添加到由子句用逗号隔开,如下所示的命令的结尾:

    String hql = "FROM Employee E WHERE E.id > 10 " +
           "ORDER BY E.firstName DESC, E.salary DESC ";
    Query query = session.createQuery(hql);
    List results = query.list();

    GROUP BY 子句
    该子句允许从Hibernate的它基于属性的值的数据库和组提取信息,并且通常使用结果包括总值。下面是一个使用GROUP BY子句的语法很简单:

    String hql = "SELECT SUM(E.salary), E.firtName FROM Employee E " +
           "GROUP BY E.firstName";
    Query query = session.createQuery(hql);
    List results = query.list();

    使用命名参数
    Hibernate命名在其HQL查询参数支持。这使得编写接受来自用户的输入容易,不必对SQL注入攻击防御HQL查询。下面是一个使用命名参数的简单的语法:

    String hql = "FROM Employee E WHERE E.id = :employee_id";
    Query query = session.createQuery(hql);
    query.setParameter("employee_id",10);
    List results = query.list();

    UPDATE 子句
    批量更新是新的HQL与Hibernate3,以及不同的删除工作,在Hibernate 3和Hibernate2一样。 Query接口现在包含一个名为executeUpdate()方法用于执行HQL UPDATE或DELETE语句。

    在UPDATE子句可以用于更新一个或多个对象中的一个或多个属性。下面是一个使用UPDATE子句的简单的语法:

    复制代码
    1 String hql = "UPDATE Employee set salary = :salary " + 
    2        "WHERE id = :employee_id";
    3 Query query = session.createQuery(hql);
    4 query.setParameter("salary", 1000);
    5 query.setParameter("employee_id", 10);
    6 int result = query.executeUpdate();
    7 System.out.println("Rows affected: " + result);
    复制代码

    DELETE 子句
    DELETE子句可以用来删除一个或多个对象。下面是一个使用DELETE子句的简单的语法:

    1 String hql = "DELETE FROM Employee " + 
    2        "WHERE id = :employee_id";
    3 Query query = session.createQuery(hql);
    4 query.setParameter("employee_id", 10);
    5 int result = query.executeUpdate();
    6 System.out.println("Rows affected: " + result);

    INSERT 子句
    HQL支持INSERT INTO子句中只记录在那里可以插入从一个对象到另一个对象。以下是使用INSERT INTO子句的简单的语法:

    String hql = "INSERT INTO Employee(firstName, lastName, salary)" + 
           "SELECT firstName, lastName, salary FROM old_employee";
    Query query = session.createQuery(hql);
    int result = query.executeUpdate();
    System.out.println("Rows affected: " + result);
  • 相关阅读:
    垃圾回收器
    垃圾回收相关概念
    Spring Cloud 框架 -- Spring Cloud Gateway
    Spring Cloud 框架 -- Zuul
    报错:Failed to read artifact descriptor for org.springframework.cloud:spring-cloud-starter-netflix-zuul:jar:2.2.2.RELEASE
    Spring Cloud 框架 -- Resilience4j
    Spring Cloud 框架 -- OpenFeign
    Spring Cloud 框架 -- Eureka 服务的注册与消费
    Spring Cloud 框架 -- Hystrix 的基本介绍与使用
    打包 Spring Boot 项目报错:Failed to execute goal on project provider: Could not resolve dependencies for project com.example:provider:jar:0.0.1-SNAPSHOT
  • 原文地址:https://www.cnblogs.com/jingzhenhua/p/6045810.html
Copyright © 2020-2023  润新知