Hibernate提供三种查询方式:
- HQL(Hibernate Query Language):
HQL是Hibernate提供的面向对象的查询语言,语法类似SQL。优点是面向对象,隐藏底层数据库的差异。例如:
SELECT c FROM Customer c WHERE c.name LIKE 'J%'
- SQL(原生SQL):
在HQL中可以直接使用SQL语句查询数据库。优点是当HQL无法表达时可以使用SQL。例如:
SELECT * FROM Customer c WHERE c.name LIKE 'J%'
- 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来发挥各自优势。