Hibernate中的HQL语句和SQL语句有什么区别?代码举例讲解

Hibernate中的HQL(Hibernate Query Language)语句和SQL语句有以下主要区别:

  1. 查询对象:
  • HQL查询对象是实体对象,SQL查询的对象是数据库表。
    例如:
Query hqlQuery = session.createQuery("from Customer");  // HQL查询Customer对象
Query sqlQuery = session.createSQLQuery("SELECT * FROM t_customer");  // SQL查询t_customer表
  1. 使用实体名和属性:
  • HQL使用实体名和属性,SQL使用表名和列名。
    例如:
Query hqlQuery = session.createQuery("from Customer c where c.name = ?");
Query sqlQuery = session.createSQLQuery("SELECT * FROM t_customer WHERE name = ?");
  1. 支持投影:
  • HQL支持SELECT子句,可以投影实体的部分属性。SQL查询默认为*。
    例如:
Query hqlQuery = session.createQuery("select c.name, c.age from Customer c");
Query sqlQuery = session.createSQLQuery("SELECT * FROM t_customer");   
  1. 支持联表查询:
  • HQL支持简单的联表查询,SQL支持所有类型的联表查询。
    例如:联表查询订单及关联的客户
    HQL:
Query hqlQuery=session.createQuery("from Order o inner join o.customer c where c.name = ?"); 
Query sqlQuery=session.createSQLQuery("SELECT * FROM t_order o INNER JOIN t_customer c ON o.customer_id = c.id WHERE c.name = ?");

除此之外,HQL还支持集合查询.分组.聚合.子查询等,功能较为强大。