(HQL)Hibernate Query Lanaguage常用的语句

来源:互联网 发布:上海花店知乎 编辑:程序博客网 时间:2024/05/16 01:21



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

  1. // HQL: Hibernate Query Language.  
  2. // 特点:  
  3. // >> 1,与SQL相似,SQL中的语法基本上都可以直接使用。  
  4. // >> 2,SQL查询的是表和表中的列;HQL查询的是对象与对象中的属性。  
  5. // >> 3,HQL的关键字不区分大小写,类名与属性名是区分大小写的。  
  6. // >> 4,SELECT可以省略.         
  7.           
  8. // 1,简单的查询,Employee为实体名而不是数据库中的表名(面向对象特性)  
  9. hql = "FROM Employee";  
  10. hql = "FROM Employee AS e"// 使用别名  
  11. hql = "FROM Employee e"// 使用别名,as关键字可省略  
  12.   
  13. // 2,带上过滤条件的(可以使用别名):Where  
  14. hql = "FROM Employee WHERE id<10";  
  15. hql = "FROM Employee e WHERE e.id<10";  
  16. hql = "FROM Employee e WHERE e.id<10 AND e.id>5";  
  17.   
  18. // 3,带上排序条件的:Order By  
  19. hql = "FROM Employee e WHERE e.id<10 ORDER BY e.name";  
  20. hql = "FROM Employee e WHERE e.id<10 ORDER BY e.name DESC";  
  21. hql = "FROM Employee e WHERE e.id<10 ORDER BY e.name DESC, id ASC";  
  22.   
  23. // 4,指定select子句(不可以使用select *)  
  24. hql = "SELECT e FROM Employee e"// 相当于"FROM Employee e"  
  25. hql = "SELECT e.name FROM Employee e"// 只查询一个列,返回的集合的元素类型就是这个属性的类型  
  26. hql = "SELECT e.id,e.name FROM Employee e"// 查询多个列,返回的集合的元素类型是Object数组  
  27. hql = "SELECT new Employee(e.id,e.name) FROM Employee e"// 可以使用new语法,指定把查询出的部分属性封装到对象中  
  28.   
  29. // 5,执行查询,获得结果(list、uniqueResult、分页 )  
  30. Query query = session.createQuery("FROM Employee e WHERE id<3");  
  31. query.setFirstResult(0);  
  32. query.setMaxResults(10); // 等同于 limit 0,10  
  33. //两种查询结果list、uniqueResult  
  34. // List list = query.list(); // 查询的结果是一个List集合  
  35. // Employee employee = (Employee) query.uniqueResult();// 查询的结果是唯一的一个结果,当结果有多个,就会抛异常  
  36.   
  37. // 6,方法链  
  38. List list = session.createQuery(//  
  39.         "FROM Employee e")//  
  40.         .setFirstResult(0)//  
  41.         .setMaxResults(10)//  
  42.         .list();  
  43.   
  44. // 7,聚集函数:count(), max(), min(), avg(), sum()  
  45. hql = "SELECT COUNT(*) FROM Employee"// 返回的结果是Long型的  
  46. hql = "SELECT min(id) FROM Employee"// 返回的结果是id属性的类型  
  47.   
  48. //8,分组: Group By ... Having  
  49. hql = "SELECT e.name,COUNT(e.id) FROM Employee e GROUP BY e.name";  
  50. hql = "SELECT e.name,COUNT(e.id) FROM Employee e GROUP BY e.name HAVING count(e.id)>1";  
  51. hql = "SELECT e.name,COUNT(e.id) FROM Employee e WHERE id<9 GROUP BY e.name HAVING count(e.id)>1";  
  52. hql = "SELECT e.name,COUNT(e.id) " + //  
  53.      "FROM Employee e " + //  
  54.      "WHERE id<9 " + //  
  55.      "GROUP BY e.name " + //  
  56.      "HAVING count(e.id)>1 " + //  
  57.      "ORDER BY count(e.id) ASC";  
  58. hql = "SELECT e.name,COUNT(e.id) AS c " + //  
  59.      "FROM Employee e " + //  
  60.      "WHERE id<9 " + //  
  61.      "GROUP BY e.name " + //  
  62.      "HAVING count(e.id)>1 " + // 在having子句中不能使用列别名  
  63.      "ORDER BY c ASC"// 在orderby子句中可以使用列别名  
  64.   
  65. // 9,连接查询 / HQL是面向对象的查询  
  66.  //>> 内连接(inner关键字可以省略)  
  67.  hql = "SELECT e.id,e.name,d.name FROM Employee e JOIN e.department d";  
  68.  hql = "SELECT e.id,e.name,d.name FROM Employee e INNER JOIN e.department d";  
  69.  //>> 左外连接(outer关键字可以省略)  
  70.  hql = "SELECT e.id,e.name,d.name FROM Employee e LEFT OUTER JOIN e.department d";  
  71.  //>> 右外连接(outer关键字可以省略)  
  72.  hql = "SELECT e.id,e.name,d.name FROM Employee e RIGHT JOIN e.department d";  
  73.  //可以使用更方便的方法  
  74.  hql = "SELECT e.id,e.name,e.department.name FROM Employee e";  
  75.   
  76. // 10,查询时使用参数  
  77. // >> 方式一:使用'?'占位  
  78.  hql = "FROM Employee e WHERE id BETWEEN ? AND ?";  
  79.  List list2 = session.createQuery(hql)//  
  80.      .setParameter(05)// 设置参数,第1个参数的索引为0。  
  81.      .setParameter(115)//  
  82.      .list();  
  83.   
  84. // >> 方式二:使用变量名  
  85.  hql = "FROM Employee e WHERE id BETWEEN :idMin AND :idMax";  
  86.  List list3 = session.createQuery(hql)//  
  87.      .setParameter("idMax"15)//  
  88.      .setParameter("idMin"5)//  
  89.      .list();  
  90.   
  91. // 当参数是集合时,一定要使用setParameterList()设置参数值  
  92.  hql = "FROM Employee e WHERE id IN (:ids)";  
  93.  List list4 = session.createQuery(hql)//  
  94.      .setParameterList("ids"new Object[] { 12358100 })//  
  95.      .list();  
  96.   
  97. // 11,update与delete,不会通知Session缓存  
  98. // >> Update  
  99. int result = session.createQuery(//  
  100.         "UPDATE Employee e SET e.name=? WHERE id>15")//  
  101.         .setParameter(0"无名氏")//  
  102.         .executeUpdate(); // 返回int型的结果,表示影响了多少行。  
  103. // >> Delete  
  104. int result1 = session.createQuery(//  
  105.         "DELETE FROM Employee e WHERE id>15")//  
  106.         .executeUpdate(); // 返回int型的结果,表示影响了多少行。
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 吃了毓婷哺乳了怎么办 吃了毓婷后出血怎么办 吃金毓婷喝了水怎么办 白带浓稠浆糊样怎么办 驾校学费不给退怎么办 b1驾证扣了9分怎么办 机动车登记证丢了怎么办 b1驾照扣了9分怎么办 听力正常体检不过关怎么办 做完人流第二天同房了怎么办 医院的票据丢了怎么办 体检人体成分(脂肪缺乏)该怎么办 诊断出右下叶肺炎怎么办 做胸透穿钢圈内衣怎么办 预约不上留学体检怎么办 跨省离职后社保怎么办 开车到成都限号怎么办 月经量多怎么办吃什么 报驾校体检视力不达标怎么办 换驾驶证c1一只眼不合格怎么办 考驾照紧张腿抖怎么办 驾照该换了色弱怎么办 怀孕5个月感冒咳嗽怎么办 怀孕4个月喉咙痛怎么办 怀孕5个多月总是咳嗽尿失禁怎么办 怀孕7个月感冒了怎么办 怀孕7个月感冒喉咙痛怎么办 孕38周感冒咳嗽喉咙痛怎么办 嗓子痛咳嗽有痰怎么办 怀孕6个月了咳嗽怎么办 怀孕了咳嗽黄痰怎么办 科二5次没考过怎么办 交警开的罚单丢了怎么办 驾驶员从业资格证被水洗了怎么办 驾照考五次没过怎么办 学车每次考不过怎么办 年检超期3个月怎么办 年检超过3个月怎么办 工商执照年检时候忘记密码怎么办 个体工商营业执照年检过期怎么办 忘了审车时间怎么办