1.Query:他是一种比较面向对象的查询方式,query查询也叫做hql查询(hibernate query language),使用query查询,需要接受一个
         hql语句进行查询
         查询全部,分页查询,统计查询,条件查询,排序查询,投影查询
         sql:查询的是数据表和表中的字段
         hql:查询的是实体类和类中的属性
         * sql 和 hql 的语法极其类似

代码演示:

1.建库;

2.导入jar包(required/log4j/mysqlconnector)

2.建实体类(注意持久化类的编写规则);

3.编制映射关系文件(Linkman.hbm.xml);

4.编制核心配置文件(hibernate.cfg.xml);

5.编写工具类(HibernateUtils.java),增加getCurrentSession方法;

6.编写测试代码;

----------------------------------------------

5.编写工具类(HibernateUtils.java),增加getCurrentSession方法;

  1. 1 package utils;
  2. 2
  3. 3 import org.hibernate.Session;
  4. 4 import org.hibernate.SessionFactory;
  5. 5 import org.hibernate.cfg.Configuration;
  6. 6
  7. 7 public class HibernateUtils {
  8. 8 private static SessionFactory factory;
  9. 9
  10. 10 static {
  11. 11 // 加载配置文件
  12. 12 Configuration cfg = new Configuration();
  13. 13 cfg.configure();
  14. 14 // 构建sessionFactory
  15. 15 factory = cfg.buildSessionFactory();
  16. 16 }
  17. 17
  18. 18 public static Session getSession() {
  19. 19 return factory.openSession();
  20. 20 }
  21. 21
  22. 22 // 获取与当前线程绑定的session
  23. 23 public static Session getCurrentSession() {
  24. 24 return factory.getCurrentSession();
  25. 25 }
  26. 26
  27. 27 }
  28. 28

6.编写测试代码;

  1. 1 package demo;
  2. 2
  3. 3 import java.util.List;
  4. 4
  5. 5 import org.hibernate.Query;
  6. 6 import org.hibernate.Session;
  7. 7 import org.hibernate.Transaction;
  8. 8 import org.junit.Test;
  9. 9
  10. 10 import utils.HibernateUtils;
  11. 11
  12. 12 //hql查询数据库
  13. 13 public class Demo02 {
  14. 14 @Test
  15. 15 // 查询全部
  16. 16 // sql:select * from cst_linkman
  17. 17 // hql:from Linkman
  18. 18 public void findAll() {
  19. 19 // 获取session
  20. 20 Session cs = HibernateUtils.getCurrentSession();
  21. 21 // 开启事务,并返回事务对象
  22. 22 Transaction tx = cs.beginTransaction();
  23. 23 // hql语句
  24. 24 String hql = "from Linkman";
  25. 25 // 执行hql语句,并获取query对象
  26. 26 Query query = cs.createQuery(hql);
  27. 27 // 获取结果集,并输出
  28. 28 List list = query.list();
  29. 29 for (Object object : list) {
  30. 30 System.out.println(object);
  31. 31 }
  32. 32 // 提交事务
  33. 33 tx.commit();
  34. 34 }
  35. 35
  36. 36 // 条件查询
  37. 37 // sql:select * from csl_linkman where id=3;
  38. 38 // hql:from Linkman where id=3
  39. 39 @Test
  40. 40 public void findWithCondition() {
  41. 41 // 获取当前线程session
  42. 42 Session cs = HibernateUtils.getCurrentSession();
  43. 43 // 开启事务,返回事务对象
  44. 44 Transaction tx = cs.beginTransaction();
  45. 45 // 执行hql,并返回query对象
  46. 46 Query query = cs.createQuery("from Linkman where lkmId=?");
  47. 47 // 为占位符赋值,从左往右,第1个?为0,第2个为1....
  48. 48 query.setParameter(0, 3L);
  49. 49 // 获取结果集并输出
  50. 50 Object obj = query.uniqueResult();
  51. 51 System.out.println(obj);
  52. 52 // 提交事务
  53. 53 tx.commit();
  54. 54 }
  55. 55
  56. 56 // 具名查询
  57. 57 @Test
  58. 58 public void findWithConditionOther() {
  59. 59 // 获取当前线程session
  60. 60 Session cs = HibernateUtils.getCurrentSession();
  61. 61 // 开启事务,返回事务对象
  62. 62 Transaction tx = cs.beginTransaction();
  63. 63 // 编写hql语句
  64. 64 String hql = "from Linkman where lkmName like :lkmName";
  65. 65 // 执行hql,并返回query对象
  66. 66 Query query = cs.createQuery(hql);
  67. 67 // 为占位符赋值,具名方式
  68. 68 query.setString("lkmName", "R%");
  69. 69 // 获取结果集
  70. 70 Object obj = query.uniqueResult();
  71. 71 // 输出
  72. 72 System.out.println(obj);
  73. 73 // 提交事务
  74. 74 tx.commit();
  75. 75 }
  76. 76
  77. 77 // 分页查询
  78. 78 @Test
  79. 79 public void findWithPage() {
  80. 80 // 获取当前线程session
  81. 81 Session cs = HibernateUtils.getCurrentSession();
  82. 82 // 开启事务,并返回事务对象
  83. 83 Transaction tx = cs.beginTransaction();
  84. 84 // 编写hql
  85. 85 String hql = "from Linkman";
  86. 86 // 执行hql并返回query对象
  87. 87 Query query = cs.createQuery(hql);
  88. 88 // 为占位符赋值
  89. 89 query.setFirstResult(0);
  90. 90 query.setMaxResults(2);
  91. 91 // 获取结果集
  92. 92 List list = query.list();
  93. 93 for (Object object : list) {
  94. 94 System.out.println(object);
  95. 95 }
  96. 96 // 提交事务
  97. 97 tx.commit();
  98. 98 }
  99. 99
  100. 100 // 排序查询-id倒序
  101. 101 @Test
  102. 102 public void findByOrder() {
  103. 103 // 获取当前线程session
  104. 104 Session cs = HibernateUtils.getCurrentSession();
  105. 105 // 开启事务,并返回事务对象
  106. 106 Transaction tx = cs.beginTransaction();
  107. 107 // 编写hql
  108. 108 String hql = "from Linkman order by lkmId desc";
  109. 109 // 执行并返回query对象
  110. 110 Query query = cs.createQuery(hql);
  111. 111 // 获取结果集
  112. 112 List list = query.list();
  113. 113 for (Object object : list) {
  114. 114 System.out.println(object);
  115. 115 }
  116. 116 // 提交事务
  117. 117 tx.commit();
  118. 118 }
  119. 119
  120. 120 // 统计查询
  121. 121 @Test
  122. 122 public void findWithCount() {
  123. 123 // 获取当前线程session
  124. 124 Session cs = HibernateUtils.getCurrentSession();
  125. 125 // 开启事务,并返回事务对象
  126. 126 Transaction tx = cs.beginTransaction();
  127. 127 // 编写hql
  128. 128 String hql = "select count(lkmId) from Linkman";
  129. 129 // 执行并返回query对象
  130. 130 Query query = cs.createQuery(hql);
  131. 131 // 获取结果集,并输出
  132. 132 Object obj = query.uniqueResult();
  133. 133 System.out.println(obj);
  134. 134 // 提交事务
  135. 135 tx.commit();
  136. 136 }
  137. 137
  138. 138 // 投影查询
  139. 139 @Test
  140. 140 public void findProjection() {
  141. 141 // 获取当前线程session
  142. 142 Session cs = HibernateUtils.getCurrentSession();
  143. 143 // 开启事务,并返回事务对象
  144. 144 Transaction tx = cs.beginTransaction();
  145. 145 // 编写hql
  146. 146 String hql = "select new Linkman(lkmId,lkmName) from Linkman";
  147. 147 // 执行hql并返回query对象
  148. 148 Query query = cs.createQuery(hql);
  149. 149 // 获取结果集并输出
  150. 150 List list = query.list();
  151. 151 for (Object object : list) {
  152. 152 System.out.println(object);
  153. 153 }
  154. 154 // 提交事务
  155. 155 tx.commit();
  156. 156 }
  157. 157 }
  158. 158

hibernate笔记3--hql查询的更多相关文章

  1. Hibernate中关于HQL查询返回List<Object>数据的结果集问题

    ---恢复内容开始--- 开发中遇到的一个小问题,使用Hibernate中的HQL查询时,使用query.list()查询出来的是一个List<Object>结果集 原来代码: publi ...

  2. hibernate学习(7)——HQL查询

    1.HQL查询定义 Hibernate查询分类: 1. get/load 根据OID检索 2. 对象视图检索 c.getOrders 3. Sql语句 createSqlQuery 4. Hql语句 ...

  3. 【Hibernate步步为营】--hql查询小介

    HQL 是指Hibernate Query Language,它是Hibernate的查询语言,拥有一套自己的查询机制,它的查询语句和SQL非常类似.在使用的时候可以非常快上手.HQL提供了基本上SQ ...

  4. Hibernate框架之HQL查询与Criteria 查询的区别

    Hibernate框架提供了HQL查询和Criteria 查询.下面对这两种查询分别做个例子.也好对这两种查询方法有个大概的了解.就用房屋信息表做例子,查询所有房屋信息. HQL语句查询所有房屋信息: ...

  5. Hibernate用到HQL查询时的错误

    Exception in thread "main" org.hibernate.hql.internal.ast.QuerySyntaxException: student is ...

  6. Hibernate学习笔记(十) — HQL查询

    一.HQL的一对多查询 班级(1)->(多)学生 /** * 实现Classes与Student的内连接 * * SELECT c.*,s.* * from classes c INNER JO ...

  7. Java_Web三大框架之Hibernate+jsp+selvect+HQL查询数据

    俗话说:"好记性不如烂笔头".本人学习Hibernate也有一个星期了,对Hibernate也有一个初步的了解.下面对Hibernate显示数据做个笔记,使用租房系统的Hibern ...

  8. Hibernate中的HQL查询与缓存机制

    HQL:完全面向对象查询 SQL的执行顺序: 1.From 2.Where 过滤基础数据 where与having的区别:1.顺序不同 2.where过滤基础数据 3. 过滤聚合函数 3.Group ...

  9. Hibernate学习之hql查询语句

    *  页面上数据的字段和数据库中字段差不多,这个时候,采用迫切连接  结构比较好,如果页面上的字段很少,要按照需求加载数据,采用带构造函数的select查询 实例讲解:转自:http://www.cn ...

  10. Hibernate(十二):HQL查询(一)

    概述 Hibernate提供了以下几种检索对象的方式 1)导航对象图检索方式:根据已经加载的对象导航到其他对象: 2)OID检索方式:按照对象的OID来检索对象: 3)HQL检索方式:使用面向对象的H ...

随机推荐

  1. Stream接口

    数据读写可以看作是事件模式(Event)的特例,不断发送的数据块好比一个个的事件.读数据是read事件,写数据是write事件,而数据块是事件附带的信息.Node 为这类情况提供了一个特殊接口Stre ...

  2. 在Visual Studio开发的项目中引用GAC中的dll

    Open the windows Run dialog (Windows Key + r) Type C:\Windows\assembly\gac_msil. This is some sort o ...

  3. UITableViewCell 的复用机制

    cell重用机制 http://blog.cnrainbird.com/index.php/2012/03/20/guan_yu_uitableview_de_cell_fu_yong_tan_tan ...

  4. 理解linux服务器mcelog如何工作

    What are Machine Check Exceptions (or MCE)? A machine check exception is an error dedected by your s ...

  5. CEPH安装教程(下)

    创建 CEPH 文件系统 创建存储池 # ceph osd pool create cephfs_data 64 # ceph osd pool create cephfs_metadata 64 创 ...

  6. 使用urllib获取一个网页内所有a标签的href属性

    import re, urllib.request, urllib.parse, urllib.error page = input('Enter - ') fhand = urllib.reques ...

  7. webpack@3.6.0(4) -- 配置模块化开发

    本篇内容 watch 版权插件 hash.chunkhash.contenthash的区别 watch 修改文件时自动打包 webpack --watch //webpack.config.js,与d ...

  8. C#中参数值传递和址传递

    概论 我认为的形参和实参是这样的,形参是形式上的参量,和"抽象类"的概念差不多,不是实际存在的.不用的时候不占用内存,被调用的时候分配内存,调用结束,释放内存.类似于"抽 ...

  9. 51nod1118(递推)

    题目链接: https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1118 题意: 中文题诶~ 思路: 因为机器人只能往下或者右 ...

  10. 洛谷P3043 [USACO12JAN]牛联盟Bovine Alliance

    P3043 [USACO12JAN]牛联盟Bovine Alliance 题目描述 Bessie and her bovine pals from nearby farms have finally ...