hibernate笔记3--hql查询
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查询的更多相关文章
- Hibernate中关于HQL查询返回List<Object>数据的结果集问题
---恢复内容开始--- 开发中遇到的一个小问题,使用Hibernate中的HQL查询时,使用query.list()查询出来的是一个List<Object>结果集 原来代码: publi ...
- hibernate学习(7)——HQL查询
1.HQL查询定义 Hibernate查询分类: 1. get/load 根据OID检索 2. 对象视图检索 c.getOrders 3. Sql语句 createSqlQuery 4. Hql语句 ...
- 【Hibernate步步为营】--hql查询小介
HQL 是指Hibernate Query Language,它是Hibernate的查询语言,拥有一套自己的查询机制,它的查询语句和SQL非常类似.在使用的时候可以非常快上手.HQL提供了基本上SQ ...
- Hibernate框架之HQL查询与Criteria 查询的区别
Hibernate框架提供了HQL查询和Criteria 查询.下面对这两种查询分别做个例子.也好对这两种查询方法有个大概的了解.就用房屋信息表做例子,查询所有房屋信息. HQL语句查询所有房屋信息: ...
- Hibernate用到HQL查询时的错误
Exception in thread "main" org.hibernate.hql.internal.ast.QuerySyntaxException: student is ...
- Hibernate学习笔记(十) — HQL查询
一.HQL的一对多查询 班级(1)->(多)学生 /** * 实现Classes与Student的内连接 * * SELECT c.*,s.* * from classes c INNER JO ...
- Java_Web三大框架之Hibernate+jsp+selvect+HQL查询数据
俗话说:"好记性不如烂笔头".本人学习Hibernate也有一个星期了,对Hibernate也有一个初步的了解.下面对Hibernate显示数据做个笔记,使用租房系统的Hibern ...
- Hibernate中的HQL查询与缓存机制
HQL:完全面向对象查询 SQL的执行顺序: 1.From 2.Where 过滤基础数据 where与having的区别:1.顺序不同 2.where过滤基础数据 3. 过滤聚合函数 3.Group ...
- Hibernate学习之hql查询语句
* 页面上数据的字段和数据库中字段差不多,这个时候,采用迫切连接 结构比较好,如果页面上的字段很少,要按照需求加载数据,采用带构造函数的select查询 实例讲解:转自:http://www.cn ...
- Hibernate(十二):HQL查询(一)
概述 Hibernate提供了以下几种检索对象的方式 1)导航对象图检索方式:根据已经加载的对象导航到其他对象: 2)OID检索方式:按照对象的OID来检索对象: 3)HQL检索方式:使用面向对象的H ...
随机推荐
- MySql获取记录的名次
在oracle中有rownum之类的东西表示记录的名次,那么在MySql中怎么获取名次呢? as rank ) B 获取的rank就是名次了 user_id rank 134762 122139 ...
- 基于http的多进程并发文件服务器
1 可以掌握的知识点 (1) 线上部署时的守护应用 (2) 常规的文件操作,配置文件读取 (3) 网络编程,端口复用等文件 (4) 多进程知识 2 代码注释如下 test_httpd.h #inclu ...
- Ubuntu12.04更新出现 The system is running in low-graphics mode解决方法
这两天都困在这个问题上. 感谢:http://blog.chinaunix.net/uid-26748719-id-3780062.html 原因:显卡没驱动起来 解决方法: sudo apt-get ...
- 7.29实习培训日志-Oracle题目
总结 这周主要学习了SQL,oracle中的SQL基础,以前学习的是SQLserver的SQL,和oracle的还是有略微不同,所以重新去学习了一段时间,然后对于oracle中的各种函数有了初步了解, ...
- Algorithms - Fibonacci Number
斐波那契数列(Fibonacci Number)从数学的角度是以递归的方法定义的: \(F_0 = 0\) \(F_1 = 1\) \(F_n = F_{n-1} + F_{n-2}\) (\(n \ ...
- Vue中使用jquery
在vue项目中,需要实现某些特定的功能时,使用mvvm模式不易实现.因此引入jquery包来完成需求 npm install jqueryimport $ from jquery //在需要使用的页面 ...
- iPhone摄影中的深度捕捉(WWDC2017-Session 507)
507是深度媒体相关的概念层面的内容.主要为下面4个部分: Depth and disparity on iPhone 7 Plus Streaming depth data from the cam ...
- C#网络编程学习(5)---Tcp连接中出现的粘包、拆包问题
本文参考于CSDN博客wxy941011 1.疑问 我们使用第四个博客中的项目. 修改客户端为:连接成功后循环向服务器发送从1-100的数字.看看服务器会不会正常的接收100次数据. 可是我们发现服务 ...
- [APIO2019T1]奇怪装置
考古学家发现古代文明留下了一种奇怪的装置.该装置包含两个屏幕,分别显示两个整数x和y.经过研究,科学家对该装置得出了一个结论:该装置是一个特殊的时钟,它从过去的某个时间点开始测量经过的时刻数t,但该装 ...
- iOS sqlite
iOS sqlite数据库操作.步骤是: 先加入sqlite开发库libsqlite3.dylib, 新建或打开数据库, 创建数据表, 插入数据, 查询数据并打印 1.新建项目sqliteDemo,添 ...