2

在哪些情况下我们会选择 SQL、Hibernate Query Language 和 hibernate 的 Criteria API?

4

2 回答 2

2
  • 条件查询适用于创建动态查询。例如,根据参数的值动态添加一些排序或留下一些部分(例如限制)要容易得多。

  • 条件查询,由 Java 对象的实例定义,这些对象表示查询元素而不是字符串。这样做的好处是可以在编译时检测到错误。条件查询是类型安全的

  • HQL查询被定义为字符串,类似于 SQL。将HQL用于静态和复杂的查询,因为它更容易理解/阅读。

  • HQL也不依赖于数据库的表。我们可以在 HQL 中使用实体名称来代替表名。因此它可以用作独立于数据库的查询语言。

    @Entity(name="MyEntityName")
    @Table(name="MyEntityTableName")
    class MyEntity {
    
    //A table with name MyEntityTableName is created and the entity name is MyEntityName.
    //Your JPQL/HQL query would be :
    
    select * from MyEntityName
    
  • 这两者都允许您将应用程序与 SQL 分离。SQL 语法可能因数据库供应商(Oracle、MySQL 等)而异。所以,如果你想改变底层数据库,不会有任何影响(或最小影响)

  • 您可以利用供应商特定的优化 SQL 功能,但它们不符合 ANSI。诸如 Hibernate 之类的 ORM 工具负责处理它们,同时提供优化的解决方案。

  • 使用 JDBC 的SQL查询比 Criteria 查询和 HQL快一点。但是这种性能损失对于所获得的优势是非常值得的。

希望这可以帮助。

于 2015-12-04T05:11:16.753 回答
1

HQL - 这适用于大多数查询并且易于阅读和编写。

Criteria - 如果您不想编写查询,那么您可以使用 Criteria API。前任:-

SELECT * FROM employee WHERE emp_id =1

条件查询将是

 Criteria criteria = session.createCriteria(Employee.class)
  .add(Restrictions.eq("id", new Integer(1));

获取所有员工

  List customers = criteria.list();

除此之外,API 还提供分页、最大行 ID、子对象选择等。

SQL - 其他两个 API 不适合您的工作,然后使用本机 SQL。

于 2015-12-04T05:05:40.380 回答