hibernate笔记4--qbc查询
Criteria:是一种完全面向对象的查询方式,Criteria查询也叫做qbc查询(query by Criteria)。
查询全部,分页查询,统计查询,条件查询,排序查询,离线查询
代码演示:
1.建库;
2.导入jar包(required/log4j/mysqlconnector)
2.建实体类(注意持久化类的编写规则);
3.编制映射关系文件(Linkman.hbm.xml);
4.编制核心配置文件(hibernate.cfg.xml);
5.编写工具类(HibernateUtils.java),增加getCurrentSession方法;
6.编写测试代码;
--------------------------------------------------------
6.编写测试代码;
1 package demo;
2
3 import java.util.List;
4
5 import org.hibernate.Criteria;
6 import org.hibernate.Session;
7 import org.hibernate.Transaction;
8 import org.hibernate.criterion.Order;
9 import org.hibernate.criterion.Projections;
10 import org.hibernate.criterion.Restrictions;
11 import org.junit.Test;
12
13 import entity.Linkman;
14 import utils.HibernateUtils;
15
16 //QBC查询
17 public class Demo03 {
18 // 查询所有
19 @Test
20 public void findAll() {
21 // 获取当前线程session
22 Session cs = HibernateUtils.getCurrentSession();
23 // 开启事务并返回事务对象
24 Transaction tx = cs.beginTransaction();
25 // 获取criteria对象,同时即进行查询所有
26 Criteria cc = cs.createCriteria(Linkman.class);
27 // 获取结果集
28 List list = cc.list();
29 for (Object object : list) {
30 System.out.println(object);
31 }
32 // 提交事务
33 tx.commit();
34 }
35
36 // 条件查询
37 @Test
38 public void findCondition() {
39 // 获取当前线程session
40 Session cs = HibernateUtils.getCurrentSession();
41 // 开启事务,并返回事务对象
42 Transaction tx = cs.beginTransaction();
43 // 获取criteria
44 Criteria c = cs.createCriteria(Linkman.class);
45 c.add(Restrictions.like("lkmName", "R%"));
46 // 获取结果集
47 List list = c.list();
48 for (Object object : list) {
49 System.out.println(object);
50 }
51 // 提交事务
52 tx.commit();
53 }
54
55 // 分页查询
56 @Test
57 public void findByPage() {
58 // 获取当前 线程session
59 Session cs = HibernateUtils.getCurrentSession();
60 // 开启事务,并返回事务对象
61 Transaction tx = cs.beginTransaction();
62 // 获取criteria
63 Criteria c = cs.createCriteria(Linkman.class);
64 // 调用方法,分页查询
65 c.setFirstResult(0);
66 c.setMaxResults(1);
67 // 获取结果集
68 List list = c.list();
69 for (Object object : list) {
70 System.out.println(object);
71 }
72 // 提交事务
73 tx.commit();
74 }
75
76 // 排序查询
77 @Test
78 public void findWithOrder() {
79 // 获取当前线程session
80 Session cs = HibernateUtils.getCurrentSession();
81 // 开启事务,并返回事务对象
82 Transaction tx = cs.beginTransaction();
83 // 获取criteria
84 Criteria c = cs.createCriteria(Linkman.class);
85 // 调用方法,倒序查询
86 c.addOrder(Order.desc("lkmId"));
87 // 获取结果集
88 List list = c.list();
89 for (Object object : list) {
90 System.out.println(object);
91 }
92 // 提交事务
93 tx.commit();
94 }
95
96 // 统计查询
97 @Test
98 public void findCount() {
99 // 获取当前线程session
100 Session cs = HibernateUtils.getCurrentSession();
101 // 开启事务,并返回事务对象
102 Transaction tx = cs.beginTransaction();
103 // 获取criteria
104 Criteria c = cs.createCriteria(Linkman.class);
105 // 调用方法,统计查询
106 c.setProjection(Projections.count("lkmId"));
107 // 获取结果
108 Object obj = c.uniqueResult();
109 System.out.println(obj);
110 // 提交事务
111 tx.commit();
112 }
113 }
114 -----------------------------------------------
115 离线查询:模拟三层架构
116 package demo;
117
118 import java.util.List;
119
120 import org.hibernate.Criteria;
121 import org.hibernate.Session;
122 import org.hibernate.Transaction;
123 import org.hibernate.criterion.DetachedCriteria;
124 import org.hibernate.criterion.Restrictions;
125 import org.junit.Test;
126
127 import entity.Linkman;
128 import utils.HibernateUtils;
129
130 //离线查询
131 public class Demo04 {
132 @Test
133 public void web() {
134 DetachedCriteria dc = DetachedCriteria.forClass(Linkman.class);
135 dc.add(Restrictions.eq("lkmId", 4L));
136 service(dc);
137 }
138
139 public void service(DetachedCriteria dc) {
140 dao(dc);
141 }
142
143 public void dao(DetachedCriteria dc) {
144 Session cs = HibernateUtils.getCurrentSession();
145 Transaction tx = cs.beginTransaction();
146 Criteria c = dc.getExecutableCriteria(cs);
147 List list = c.list();
148 for (Object object : list) {
149 System.out.println(object);
150 }
151 tx.commit();
152
153 }
154 }
155
hibernate笔记4--qbc查询的更多相关文章
- [原创]java WEB学习笔记92:Hibernate学习之路-- -QBC 检索和本地 SQL 检索:基本的QBC 查询,带 AND 和 OR 的QBC,统计查询,排序,分页
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- Hibernate之QBC查询与本地SQL查询
1. QBC查询: QBC 查询就是通过使用Hibernate提供的QueryByCriteria API 来查询对象,这种API封装了SQL语句的动态拼装,对查询提供了更加面向对象的功能接口 ...
- Hibernate的几种查询方式-HQL,QBC,QBE,离线查询,复合查询,分页查询
HQL查询方式 这一种我最常用,也是最喜欢用的,因为它写起来灵活直观,而且与所熟悉的SQL的语法差不太多.条件查询.分页查询.连接查询.嵌套查询,写起来与SQL语法基本一致,唯一不同的就是把表名换成了 ...
- Hibernate —— HQL、QBC检索方式
一.HQL 检索方式 以双向的一对多来测试 HQL 检索方式.以 Department 和 Employee 为例. 建表语句: CREATE TABLE department ( dept_id ) ...
- Hibernate5.2之QBC查询
Hibernate5.2值QBC查询 一.简介 Hibenate的QBC查询个人认为是Hib ...
- 框架Hibernate笔记系列 基础Session
标题:框架Hibernate笔记 资料地址: 1. www.icoolxue.com 孔浩 1.背景简介 Hibenate是JBoss公司的产品.它是数据持久化的框架.Usually,我们使用JDBC ...
- SQL查询(笔记2——实体查询)
SQL查询(笔记2——实体查询) 二.实体查询 如果查询返回了某个数据表的全部数据列,且该数据表有对应的持久化类映射,我们就把查询结果转换成实体查询.将查询结果转换成实体,可以使用SQLQuery提供 ...
- Hibernate学习---单表查询
我们都知道SQL是非常强大的,为什么这么说呢?相信学过数据库原理的同学们都深有体会,SQL语句变化无穷,好毫不夸张的说可以实现任意符合我们需要的数据库操作,既然前面讲到Hibernate非常强大,所以 ...
- Hibernate的四种查询方式(主键查询,HQL查询,Criteria查询,本地sql查询)和修改和添加
Hibernate的添加,修改,查询(三种查询方式)的方法: 案例演示: 1:第一步,导包,老生常谈了都是,省略: 2:第二步,创建数据库和数据表,表结构如下所示: 3:第三步创建实体类User.ja ...
随机推荐
- ubuntu安装wget
ubuntu安装wget apt-get update apt-get install wget wget --version
- nodejs处理页面跳转url地址的处理
使用status函数设置状态码 router.get("/list/:id",(req,res)=>{ let id = req.params.id; res.locals. ...
- hadoop自动安装脚本
还不能实现完全自动安装,只能算半自动的. 进行交互主要障碍有两点: 1. ssh-keygen的时候需要点击回车. 2. passwd 需要设置密码 如果谁能解决以上两点,欢迎email给我. 另外 ...
- NIPT需要多大的数据量(reads number)?
NIPT需要多大的数据量(reads number)? 调研 2014 Noninvasive prenatal diagnosis of common aneuploidies by semicon ...
- Cactus详细讲解
Cactus建议一年以上有经验的人玩,刚入门MVC,不了解下列组件请先自行学习,切勿好高骛远. Cactus的组成(基于.net4.5.2):Dapper+MVC4+autofac 前端css框架pu ...
- 利用css实现鼠标经过元素,下划线由中间向两边展开
代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- java线程基础知识----java线程模型
转载自http://www.cnblogs.com/nexiyi/p/java_memory_model_and_thread.html 1. 概述 多任务和高并发是衡量一台计算机处理器的能力重要指标 ...
- c语言数组相关的计算
1.数组的创建:元素类型 数组名 [常量或者常量表达式] 如:int arr1[10];注:即使是被const修饰的变量也不能作为[]中的内容,它本质上依然属于变量,只是具有常量属性2.数组的初始化: ...
- CF 983B XOR-pyramid(区间dp,异或)
CF 983B XOR-pyramid(区间dp,异或) 若有一个长度为m的数组b,定义函数f为: \(f(b) = \begin{cases} b[1] & \quad \text{if } ...
- SnapKit swift实现高度自适应的新浪微博布局
SnapKit swift版的自动布局框架,第一次使用感觉还不错. SnapKit是一个优秀的第三方自适应布局库,它可以让iOS.OS X应用更简单地实现自动布局(Auto Layout).GtiHu ...