Hibernate的三种查询方式分别是什么?各自的优缺点是什么?

Hibernate提供三种查询方式:

  1. HQL(Hibernate Query Language):
    HQL是Hibernate提供的面向对象的查询语言,语法类似SQL。优点是面向对象,隐藏底层数据库的差异。例如:
SELECT c FROM Customer c WHERE c.name LIKE 'J%'
  1. SQL(原生SQL):
    在HQL中可以直接使用SQL语句查询数据库。优点是当HQL无法表达时可以使用SQL。例如:
SELECT * FROM Customer c WHERE c.name LIKE 'J%'  
  1. QBC(Query By Criteria):
    通过Criteria对象构建查询条件进行查询。优点是类型安全,对象导向。例如:
Criteria criteria = session.createCriteria(Customer.class);
criteria.add(Restrictions.like("name", "J%"));

这三种查询方式各有优缺点:

  • HQL:
    优点:面向对象,简单易学,隐藏SQL差异。
    缺点:不够强大,无法使用数据库特定功能。
  • SQL:
    优点:直接操作数据库,可以使用数据库所有功能。
    缺点:依赖数据库,移植性差,需要了解SQL。
  • QBC:
    优点:面向对象,类型安全。
    缺点:复杂难学,语句过于冗长。

    所以,总结来说:
  • HQL和QBC更面向对象,易于使用,移植性好。
  • SQL更加强大,可以使用数据库高级功能,但移植性差。

    在实际应用中,我们常常会综合使用这三种查询方式:
  • 一般查询用HQL或QBC。
  • 当需要使用数据库特定功能时使用SQL。
  • 也可以在HQL中嵌入SQL来发挥各自优势。