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 ...
随机推荐
- R: data.frame 数据框的:查询位置、排序(sort、order)、筛选满足条件的子集。。
################################################### 问题:数据框 data.frame 查.排序等, 18.4.27 怎么对数据框 data.f ...
- Entity Framework Code-First(1):Introduction
Entity Framework Code-First: Learn Entity Framework Code-First in simple step-by-step tutorials. The ...
- 5.6 安装SqlDeveloper
首先,将安装包准备好: 打开终端: 这样,sqldeveloper就安装完毕了. 在Ubuntu中搜索,sql,会出现: 点击,可以进入:
- struts2的package和result的标签的属性
package的属性 1.name: 配置package元素时必须指定name属性,这是引用该包的唯一标识. 2.extends: 可选属性,指定该包继承的父包,子包可以从一个或多个父包中继承到拦截器 ...
- Citrix 未注册解决办法
Citrix 经常出现未注册的问题 是因为DNS的解析 问题 ping DDC 的全名你会发现ping 不通 解决方案如下 首先 在 192.168.1.145(图站)上饭解析一下DDC(控制中心19 ...
- Android性能优化系列---管理你的app内存
文章出处:http://developer.android.com/training/articles/memory.html#YourApp Random-access memory(RAM)在任 ...
- sqlserver2012——触发器
触发器:是一个修改指定数据时执行的存储过程. 创建触发器 Create Trigger trigger_name ON {table|view} { } 例子: insert触发器: create T ...
- SAS笔记(1) PDV与数据读入
其实我是不喜欢SAS的.当然,我不喜欢她,并不代表她不好,实际上在某些应用场景下SAS是款很优秀的软件.我的数据分析之路始于R,品尝过R的灵活与简洁(不论是软件安装还是语法)后,再来学习SAS,的确提 ...
- redux中createStore方法的默认参数
一般使用方法: createStore(reducer, applyMiddleware(thunk)) 传递默认参数: createStore(reducer, defaultState, appl ...
- 谈缓存数据库在web开发中的重要性
1.开局先抛出如下问题: ①当关系型数据库存放的数据量很大时,每次查询耗时明显变长,那么如何解决该问题? ②当业务要求单用户登录(即同一个账户有一个用户登录后,第二个用户再登录该账户要么挤出之前的登录 ...