原文地址:http://blog.csdn.net/v123411739/article/details/28644007     尊重原创,请访问原文地址

  1. // HQL: Hibernate Query Language.
  2. // 特点:
  3. // >> 1,与SQL相似,SQL中的语法基本上都可以直接使用。
  4. // >> 2,SQL查询的是表和表中的列;HQL查询的是对象与对象中的属性。
  5. // >> 3,HQL的关键字不区分大小写,类名与属性名是区分大小写的。
  6. // >> 4,SELECT可以省略.
  7. // 1,简单的查询,Employee为实体名而不是数据库中的表名(面向对象特性)
  8. hql = "FROM Employee";
  9. hql = "FROM Employee AS e"; // 使用别名
  10. hql = "FROM Employee e"; // 使用别名,as关键字可省略
  11. // 2,带上过滤条件的(可以使用别名):Where
  12. hql = "FROM Employee WHERE id<10";
  13. hql = "FROM Employee e WHERE e.id<10";
  14. hql = "FROM Employee e WHERE e.id<10 AND e.id>5";
  15. // 3,带上排序条件的:Order By
  16. hql = "FROM Employee e WHERE e.id<10 ORDER BY e.name";
  17. hql = "FROM Employee e WHERE e.id<10 ORDER BY e.name DESC";
  18. hql = "FROM Employee e WHERE e.id<10 ORDER BY e.name DESC, id ASC";
  19. // 4,指定select子句(不可以使用select *)
  20. hql = "SELECT e FROM Employee e"; // 相当于"FROM Employee e"
  21. hql = "SELECT e.name FROM Employee e"; // 只查询一个列,返回的集合的元素类型就是这个属性的类型
  22. hql = "SELECT e.id,e.name FROM Employee e"; // 查询多个列,返回的集合的元素类型是Object数组
  23. hql = "SELECT new Employee(e.id,e.name) FROM Employee e"; // 可以使用new语法,指定把查询出的部分属性封装到对象中
  24. // 5,执行查询,获得结果(list、uniqueResult、分页 )
  25. Query query = session.createQuery("FROM Employee e WHERE id<3");
  26. query.setFirstResult(0);
  27. query.setMaxResults(10); // 等同于 limit 0,10
  28. //两种查询结果list、uniqueResult
  29. // List list = query.list(); // 查询的结果是一个List集合
  30. // Employee employee = (Employee) query.uniqueResult();// 查询的结果是唯一的一个结果,当结果有多个,就会抛异常
  31. // 6,方法链
  32. List list = session.createQuery(//
  33. "FROM Employee e")//
  34. .setFirstResult(0)//
  35. .setMaxResults(10)//
  36. .list();
  37. // 7,聚集函数:count(), max(), min(), avg(), sum()
  38. hql = "SELECT COUNT(*) FROM Employee"; // 返回的结果是Long型的
  39. hql = "SELECT min(id) FROM Employee"; // 返回的结果是id属性的类型
  40. //8,分组: Group By ... Having
  41. hql = "SELECT e.name,COUNT(e.id) FROM Employee e GROUP BY e.name";
  42. hql = "SELECT e.name,COUNT(e.id) FROM Employee e GROUP BY e.name HAVING count(e.id)>1";
  43. hql = "SELECT e.name,COUNT(e.id) FROM Employee e WHERE id<9 GROUP BY e.name HAVING count(e.id)>1";
  44. hql = "SELECT e.name,COUNT(e.id) " + //
  45. "FROM Employee e " + //
  46. "WHERE id<9 " + //
  47. "GROUP BY e.name " + //
  48. "HAVING count(e.id)>1 " + //
  49. "ORDER BY count(e.id) ASC";
  50. hql = "SELECT e.name,COUNT(e.id) AS c " + //
  51. "FROM Employee e " + //
  52. "WHERE id<9 " + //
  53. "GROUP BY e.name " + //
  54. "HAVING count(e.id)>1 " + // 在having子句中不能使用列别名
  55. "ORDER BY c ASC"; // 在orderby子句中可以使用列别名
  56. // 9,连接查询 / HQL是面向对象的查询
  57. //>> 内连接(inner关键字可以省略)
  58. hql = "SELECT e.id,e.name,d.name FROM Employee e JOIN e.department d";
  59. hql = "SELECT e.id,e.name,d.name FROM Employee e INNER JOIN e.department d";
  60. //>> 左外连接(outer关键字可以省略)
  61. hql = "SELECT e.id,e.name,d.name FROM Employee e LEFT OUTER JOIN e.department d";
  62. //>> 右外连接(outer关键字可以省略)
  63. hql = "SELECT e.id,e.name,d.name FROM Employee e RIGHT JOIN e.department d";
  64. //可以使用更方便的方法
  65. hql = "SELECT e.id,e.name,e.department.name FROM Employee e";
  66. // 10,查询时使用参数
  67. // >> 方式一:使用'?'占位
  68. hql = "FROM Employee e WHERE id BETWEEN ? AND ?";
  69. List list2 = session.createQuery(hql)//
  70. .setParameter(0, 5)// 设置参数,第1个参数的索引为0。
  71. .setParameter(1, 15)//
  72. .list();
  73. // >> 方式二:使用变量名
  74. hql = "FROM Employee e WHERE id BETWEEN :idMin AND :idMax";
  75. List list3 = session.createQuery(hql)//
  76. .setParameter("idMax", 15)//
  77. .setParameter("idMin", 5)//
  78. .list();
  79. // 当参数是集合时,一定要使用setParameterList()设置参数值
  80. hql = "FROM Employee e WHERE id IN (:ids)";
  81. List list4 = session.createQuery(hql)//
  82. .setParameterList("ids", new Object[] { 1, 2, 3, 5, 8, 100 })//
  83. .list();
  84. // 11,update与delete,不会通知Session缓存
  85. // >> Update
  86. int result = session.createQuery(//
  87. "UPDATE Employee e SET e.name=? WHERE id>15")//
  88. .setParameter(0, "无名氏")//
  89. .executeUpdate(); // 返回int型的结果,表示影响了多少行。
  90. // >> Delete
  91. int result1 = session.createQuery(//
  92. "DELETE FROM Employee e WHERE id>15")//
  93. .executeUpdate(); // 返回int型的结果,表示影响了多少行。
  1. // HQL: Hibernate Query Language.
  2. // 特点:
  3. // >> 1,与SQL相似,SQL中的语法基本上都可以直接使用。
  4. // >> 2,SQL查询的是表和表中的列;HQL查询的是对象与对象中的属性。
  5. // >> 3,HQL的关键字不区分大小写,类名与属性名是区分大小写的。
  6. // >> 4,SELECT可以省略.
  7. // 1,简单的查询,Employee为实体名而不是数据库中的表名(面向对象特性)
  8. hql = "FROM Employee";
  9. hql = "FROM Employee AS e"; // 使用别名
  10. hql = "FROM Employee e"; // 使用别名,as关键字可省略
  11. // 2,带上过滤条件的(可以使用别名):Where
  12. hql = "FROM Employee WHERE id<10";
  13. hql = "FROM Employee e WHERE e.id<10";
  14. hql = "FROM Employee e WHERE e.id<10 AND e.id>5";
  15. // 3,带上排序条件的:Order By
  16. hql = "FROM Employee e WHERE e.id<10 ORDER BY e.name";
  17. hql = "FROM Employee e WHERE e.id<10 ORDER BY e.name DESC";
  18. hql = "FROM Employee e WHERE e.id<10 ORDER BY e.name DESC, id ASC";
  19. // 4,指定select子句(不可以使用select *)
  20. hql = "SELECT e FROM Employee e"; // 相当于"FROM Employee e"
  21. hql = "SELECT e.name FROM Employee e"; // 只查询一个列,返回的集合的元素类型就是这个属性的类型
  22. hql = "SELECT e.id,e.name FROM Employee e"; // 查询多个列,返回的集合的元素类型是Object数组
  23. hql = "SELECT new Employee(e.id,e.name) FROM Employee e"; // 可以使用new语法,指定把查询出的部分属性封装到对象中
  24. // 5,执行查询,获得结果(list、uniqueResult、分页 )
  25. Query query = session.createQuery("FROM Employee e WHERE id<3");
  26. query.setFirstResult(0);
  27. query.setMaxResults(10); // 等同于 limit 0,10
  28. //两种查询结果list、uniqueResult
  29. // List list = query.list(); // 查询的结果是一个List集合
  30. // Employee employee = (Employee) query.uniqueResult();// 查询的结果是唯一的一个结果,当结果有多个,就会抛异常
  31. // 6,方法链
  32. List list = session.createQuery(//
  33. "FROM Employee e")//
  34. .setFirstResult(0)//
  35. .setMaxResults(10)//
  36. .list();
  37. // 7,聚集函数:count(), max(), min(), avg(), sum()
  38. hql = "SELECT COUNT(*) FROM Employee"; // 返回的结果是Long型的
  39. hql = "SELECT min(id) FROM Employee"; // 返回的结果是id属性的类型
  40. //8,分组: Group By ... Having
  41. hql = "SELECT e.name,COUNT(e.id) FROM Employee e GROUP BY e.name";
  42. hql = "SELECT e.name,COUNT(e.id) FROM Employee e GROUP BY e.name HAVING count(e.id)>1";
  43. hql = "SELECT e.name,COUNT(e.id) FROM Employee e WHERE id<9 GROUP BY e.name HAVING count(e.id)>1";
  44. hql = "SELECT e.name,COUNT(e.id) " + //
  45. "FROM Employee e " + //
  46. "WHERE id<9 " + //
  47. "GROUP BY e.name " + //
  48. "HAVING count(e.id)>1 " + //
  49. "ORDER BY count(e.id) ASC";
  50. hql = "SELECT e.name,COUNT(e.id) AS c " + //
  51. "FROM Employee e " + //
  52. "WHERE id<9 " + //
  53. "GROUP BY e.name " + //
  54. "HAVING count(e.id)>1 " + // 在having子句中不能使用列别名
  55. "ORDER BY c ASC"; // 在orderby子句中可以使用列别名
  56. // 9,连接查询 / HQL是面向对象的查询
  57. //>> 内连接(inner关键字可以省略)
  58. hql = "SELECT e.id,e.name,d.name FROM Employee e JOIN e.department d";
  59. hql = "SELECT e.id,e.name,d.name FROM Employee e INNER JOIN e.department d";
  60. //>> 左外连接(outer关键字可以省略)
  61. hql = "SELECT e.id,e.name,d.name FROM Employee e LEFT OUTER JOIN e.department d";
  62. //>> 右外连接(outer关键字可以省略)
  63. hql = "SELECT e.id,e.name,d.name FROM Employee e RIGHT JOIN e.department d";
  64. //可以使用更方便的方法
  65. hql = "SELECT e.id,e.name,e.department.name FROM Employee e";
  66. // 10,查询时使用参数
  67. // >> 方式一:使用'?'占位
  68. hql = "FROM Employee e WHERE id BETWEEN ? AND ?";
  69. List list2 = session.createQuery(hql)//
  70. .setParameter(0, 5)// 设置参数,第1个参数的索引为0。
  71. .setParameter(1, 15)//
  72. .list();
  73. // >> 方式二:使用变量名
  74. hql = "FROM Employee e WHERE id BETWEEN :idMin AND :idMax";
  75. List list3 = session.createQuery(hql)//
  76. .setParameter("idMax", 15)//
  77. .setParameter("idMin", 5)//
  78. .list();
  79. // 当参数是集合时,一定要使用setParameterList()设置参数值
  80. hql = "FROM Employee e WHERE id IN (:ids)";
  81. List list4 = session.createQuery(hql)//
  82. .setParameterList("ids", new Object[] { 1, 2, 3, 5, 8, 100 })//
  83. .list();
  84. // 11,update与delete,不会通知Session缓存
  85. // >> Update
  86. int result = session.createQuery(//
  87. "UPDATE Employee e SET e.name=? WHERE id>15")//
  88. .setParameter(0, "无名氏")//
  89. .executeUpdate(); // 返回int型的结果,表示影响了多少行。
  90. // >> Delete
  91. int result1 = session.createQuery(//
  92. "DELETE FROM Employee e WHERE id>15")//
  93. .executeUpdate(); // 返回int型的结果,表示影响了多少行。

常用的Hql语句(转)的更多相关文章

  1. 【Hibernate 6】常用的hql语句以及N+1问题

    HQL:Hibernate Query Language,是Hibernate框架中的查询语言,十分接近于SQL语言!以下介绍一些常用的Hql语句: 一.测试类 Classes类: <span ...

  2. 常用的Hql语句

    // HQL: Hibernate Query Language.// 特点:// >> 1,与SQL相似,SQL中的语法基本上都可以直接使用.// >> 2,SQL查询的是表 ...

  3. hibernate中常用的Hql语句总结

    // HQL: Hibernate Query Language. // 特点: // >> 1,与SQL相似,SQL中的语法基本上都可以直接使用. // >> 2,SQL查询 ...

  4. Hibernate框架HQL语句

    这篇随笔将会记录hql的常用的查询语句,为日后查看提供便利. 在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Class ...

  5. J2EE进阶(十七)Hibernate中常用的HQL查询方法(getHibernateTemplate())

    J2EE进阶(十七)Hibernate中常用的HQL查询方法(getHibernateTemplate())   当我们使用Hibernate进行数据的CRUD操作时,利用模版进行操作不失为一种方法. ...

  6. getHibernateTemplate()(Spring中常用的hql查询方法)

    Spring中常用的hql查询方法(getHibernateTemplate()) --------------------------------- 一.find(String queryStrin ...

  7. HibernateCRUD基础框架(2)-HQL语句构造器(HqlQueryBuilder,HqlUpdateBuilder)

    上篇讲述了最基本的实体类,本篇接着讲述HQL语句构造器,包括查询和更新等. 优点:通过面向对象的方式构造HQL语句,更快捷,不需要手动拼接HQL. 缺点:封装可能降低性能,只能支持常用的和较为简单的H ...

  8. hql语句查询

    这篇随笔将会记录hql的常用的查询语句,为日后查看提供便利. 在这里通过定义了三个类,Special.Classroom.Student来做测试,Special与Classroom是一对多,Class ...

  9. hibernate -- HQL语句总结

    1. 查询整个映射对象所有字段 //直接from查询出来的是一个映射对象,即:查询整个映射对象所有字段 String hql = "from Users"; Query query ...

随机推荐

  1. ajaxFileUpload 实现多文件上传(源码)

    按照原ajaxFileUpload.js是不能多文件上传的.需要对源码进行修改:主要修改了fileElementId部分 具体参考 https://blog.csdn.net/itmyhome1990 ...

  2. [转]postman 官方文档解说

    1. 安装 两种安装方式,我热衷于以chrome插件形式安装 Chrome插件 Mac App 2. 发送请求 Postman最基础的功能就是发送http请求,支持GET/PUT/POST/DELET ...

  3. jquery基础研究学习【效果】

    ---------------------------------分割线-------------------------------------- 2017年6月7日18:16:35Query 效果 ...

  4. 研究怎么运用xcode处理常见的调试问题

    本文转载至 http://blog.csdn.net/zhuzhihai1988/article/details/7749022 所谓磨刀不误砍柴工,这里菜鸟我在研究怎么运用xcode处理常见的调试问 ...

  5. 【BZOJ3779】重组病毒 LCT+DFS序

    [BZOJ3779]重组病毒 Description 黑客们通过对已有的病毒反编译,将许多不同的病毒重组,并重新编译出了新型的重组病毒.这种病毒的繁殖和变异能力极强.为了阻止这种病毒传播,某安全机构策 ...

  6. zoj 3721 Final Exam Arrangement【贪心】

    题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3721 来源:http://acm.hust.edu.cn/vjudg ...

  7. go语言之并发编程 channel(1)

    单向channel: 单向通道可分为发送通道和接收通道.但是无论哪一种单向通道,都不应该出现在变量的声明中,假如初始化了这样一个变量 var uselessChan chan <- int =m ...

  8. 华为机试ACM(字符组合问题)

    今晚做了华为的机试,3道ACM题,最后一道是实现从M个不同字符中任取N个字符的所有组合. eg: input:ABC 2 output:AB AC BC 第一个输入为字符串,第二个输入为组合的字符个数 ...

  9. 设置某个字段为null

    update 表名 set 字段名=null WHERE 条件如下例子 update dwtz set ggid=null WHERE name_of_invested_company='浙江海翔药业 ...

  10. gsub! 和 gsub

    ruby中带“!"和不带"!"的方法的最大的区别就是带”!"的会改变调用对象本身了.比方说str.gsub(/a/, 'b'),不会改变str本身,只会返回一个 ...