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

6.编写测试代码;

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

    JVM主要的功能: 内存分配 程序调度 内存释放(栈等自动释放.堆垃圾回收) 异常处理 https://www.cnblogs.com/dingyingsi/p/3760447.html https: ...

  2. 在PCL中如何实现点云压缩(2)

    博客转载自:http://www.pclcn.org/study/shownews.php?lang=cn&id=125 压缩配置文件: 压缩配置文件为PCL点云编码器定义了参数集.并针对压缩 ...

  3. 在Ionic Framework 退出APP

    使用以下代码: ionic.Platform.exitApp(); 在控制器中增加: $scope.Quit = function(){ ionic.Platform.exitApp(); }

  4. 【mybatis批量插入】

    mybatis批量插入操作: MySQL:1.INSERT INTO TABLE_NAME(ID,NAME)VALUES(1,'张三'),(2,'李四')                  2.INS ...

  5. ZOJ 2849【瞎暴力的搜索】

    思路: 靠评测机抖一抖的思路: 拿个队列维护一下符合类型的可以搜索(指四周还存在可以遍历的点)的点.然后暴力搜索,所以问题来了,这个暴力搜索会大大地重复遍历次数. DFS遍历图以前一直忽略重复,以为搜 ...

  6. struts2学习笔记——第一个struts2应用配置

    说实在的,随着Java学习的不断深入,特别是Java web框架部分,调bug让人很心累,但是每征服一个bug,内心的成就感也是难以言说的.第一个struts2应用的配置,我昨天折腾了快2个小时,最后 ...

  7. Spark RDD(Resilient Distributed Dataset)

    基于数据集的处理:从物理存储上加载数据,然后操作数据,然后写入物理存储设备.比如Hadoop的MapReduce.        缺点:1.不适合大量的迭代  2. 交互式查询  3. 不能复用曾经的 ...

  8. [Xcode 实际操作]四、常用控件-(4)UILabel文本标签的自动换行

    目录:[Swift]Xcode实际操作 本文将演示标签控件的换行功能, 在项目导航区,打开视图控制器的代码文件[ViewController.swift] import UIKit class Vie ...

  9. Oracle表连接(转)

    表之间的连接 Join是一种试图将两个表结合在一起的谓词,一次只能连接2个表,表连接也可以被称为表关联.在后面的叙述中,我们将会使用”row source”来代替”表”,因为使用row source更 ...

  10. 浅析HTTP协议get请求与post请求

    一.HTTP简介 1. HTTP协议:(hypertext transport protocol),即超文本传输协议.这个协议详细规定了浏览器和万维网服务器之间互相通信的规则(报文格式). 2.报文: ...