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 ...
随机推荐
- js中的cookie的设置获取和检查
设置cookiefunction setCookie(cname,cvalue,exdays) { var d = new Date(); d.setTime(d.getTime()+(exdays* ...
- unity3d 刷新速率
using UnityEngine; using UnityEngine.UI; public class Text : MonoBehaviour { public Text t; private ...
- C#中的自动属性、隐式类型var、对象初始化器与集合初始化器、扩展方法
1.自动属性(Auto-Implemented Properties) //以前的写法 .net2.0 private string _userName; public string UserName ...
- hdu3078(lca / RMQ在线)
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=3078 题意: 给出一棵 n 个点的带点权值的树, 接下来有 q 组形如 k, x, y 的输入, 若 ...
- flask数据操纵
Flask ORM 在Django框架中内部已经提供ORM这样的框架,来实现对象关系映射,方便我们操作数据库.如果想在Flask中也达到这样效果,需要安装一个第三方来支持. SQLAlchemy是一个 ...
- C.0689-The 2019 ICPC China Shaanxi Provincial Programming Contest
We call a string as a 0689-string if this string only consists of digits '0', '6', '8' and '9'. Give ...
- bzoj5506:[gzoi2019]旅行者
传送门 正反两边dijkstra染色,然后枚举一下边,求出最小值就好啦 代码: #include<cstdio> #include<iostream> #include< ...
- C# JObject将json字符串转为json对象
static void Main(string[] args) { string json = "{\"name\": \"测试\",\"m ...
- Python Unittest - Test Fixtures 测试夹具
一.什么是测试夹具 定义单个或者多个测试所需的环境准备(setUp),以及环境清理(tearDown). 例:连接数据库,或者创建Selenium WebDriver driver实例 二.测试夹具有 ...
- springboot 参数校验详解
https://www.jianshu.com/p/89a675b7c900 在日常开发写rest接口时,接口参数校验这一部分是必须的,但是如果全部用代码去做,显得十分麻烦,spring也提供了这部分 ...