hibernate学习-单表查询-第4天

我不是女神ヾ 2022-01-31 12:21 320阅读 0赞

  Hibernate 是 DAO 层技术,对数据的使用,查询是最为重要的。Hibernate 的查询技术非常强大,支持原始 SQL 语句查询,支持 QBC 查询及 Hibernate 特有的 HQL 查询。HQL,Hibernate Query Language,Hibernate 查询语言,它与 SQL 非常相似。但,HQL是面向对象的查询语言,而 SQL 是面向二维表的。HQL 查询语句中使用的是类名与属性名,
而 SQL 语句使用的是表名与字段名。QBC,Query By Criteria,标准查询,一种比 HQL 更为面向对象的查询方法。

一、API

1、Query 接口
Hibernate 进行 HQL 查询的接口,支持动态绑定参数的功能。使用 Session 对象的
createQuery 方法可获取 Query 对象。
Query query = session.createQuery(hql);
2、SQLQuery 接口
Hibernate 进行 SQL 原生查询的接口,支持动态绑定参数的功能,是 Query 接口的子接
口。使用 Session 对象的 createSQLQuery()方法可获取 SQLQuery 对象。
SQLQuery sqlQuery = session.createSQLQuery(sql);
其查询出的结果对象默认为 Object,当然,若结果为 List,则其元素为 Object。使用
SQLQuery 的 addEntity(Xxx.class)方法,可以将其结果泛型设定为指定类型。
3、Criteria 接口
Criteria,标准、准则,Hibernate 进行 Criteria 查询的接口,与 Query 接口无关。使用
Session 对象的 createCriteria()方法可获取 Criteria 对象。
Criteria criteria = session.createCriteria(Xxx.class);

二、分类查询

代码地址:https://github.com/MisterChegy/hibernate

举例:query

1、查询测试前的准备工作(在上一节中讲过)

可查看上一篇:hibernate学习-CURD-第3天

(1)定义查询的实体
下面查询举例,均是对实体类 Student 进行操作,其映射关系如下:
(2)定义主配置文件
(3)定义 Hibernate 工具类
(4)定义测试类的 setUp()
创建好测试类 MyTest 后,完成初始化方法 setUp()。
(5)准备测试数据
测试之前首先插入一些测试数据:

2、查询所有
查询所有的特点是,其查询结果为 List 集合。

  1. public class Query_hibernate {
  2. private Session session;
  3. @Before
  4. public void setUp() {
  5. session = HbnUtils.getSession();
  6. }
  7. // 使用SQLQuery查询所有
  8. @Test
  9. public void testSQL() {
  10. try {
  11. session.beginTransaction();
  12. String sql = "select * from student";
  13. List<Student> students = session.createSQLQuery(sql).addEntity(Student.class).list();
  14. System.out.println(students);
  15. session.getTransaction().commit();
  16. } catch (Exception e) {
  17. e.printStackTrace();
  18. session.getTransaction().rollback();
  19. }
  20. }
  21. // 使用HQL查询所有
  22. @Test
  23. public void testHQL() {
  24. try {
  25. session.beginTransaction();
  26. String hql = "from Student order by sid desc";
  27. List<Student> students = session.createQuery(hql).list();
  28. System.out.println(students);
  29. session.getTransaction().commit();
  30. } catch (Exception e) {
  31. e.printStackTrace();
  32. session.getTransaction().rollback();
  33. }
  34. }
  35. // 使用HQL查询所有
  36. @Test
  37. public void testQBC() {
  38. try {
  39. session.beginTransaction();
  40. List<Student> students = session.createCriteria(Student.class)
  41. .addOrder(Order.desc("sid")).list();
  42. System.out.println(students);
  43. session.getTransaction().commit();
  44. } catch (Exception e) {
  45. e.printStackTrace();
  46. session.getTransaction().rollback();
  47. }
  48. }
  49. }

分类查询:
在这里插入图片描述

学过数据库的都有共鸣,就是围绕sql语句来实现这些函数的,先有sql后有hibernate-hql。
剩下的内容请看:Hibernate5讲义

发表评论

表情:
评论列表 (有 0 条评论,320人围观)

还没有评论,来说两句吧...

相关阅读