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 ...
随机推荐
- 26、HDF5 文件格式简介
转载:庐州月光 http://www.cnblogs.com/xudongliang/p/6907733.html 三代测序下机的原始数据不再是fastq格式了,而是换成了hdf5 格式,在做三代数据 ...
- Windows下安装MySQL压缩zip包
MySQL 是最流行的关系型数据库管理系统,在WEB应用方面 MySQL 是最好的RDBMS(Relational Database Management System:关系数据库管理系统)应用软件之 ...
- 子元素应该margin-top影响父元素的解决办法
在子元素设置margin-top,有时会带着父元素一起移动. 原因: Outer Div [margin: 0 auto] Inner Div [margin-top: 10px] 根据CSS2.1盒 ...
- vue 绑定属性(index)
<el-menu-item v-for="item in links" :key="item.id" v-bind:index="item.id ...
- 新一代web框架Koa源码学习
此文已由作者张佃鹏授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. Koa 就是一种简单好用的 Web 框架.它的特点是优雅.简洁.表达力强.自由度高.本身代码只有1000多行 ...
- AIM Tech Round 5 (rated, Div. 1 + Div. 2) D(SET,思维)
#include<bits/stdc++.h>using namespace std;const long long mod = 1e9+7;char s[370007][27];long ...
- PAT1098【插入排序+堆排序】
简单插入排序: 简单插入排序的核心思想: 把一条这么个难看的序列默认分为两个排好序的和未排好序的两个部分: 所以一开始排好序的只有一个a[0](好看的只有一个),难看的有N(数组长度)-1个a[1,n ...
- java加密MD5实现及密码验证
package test; import java.io.UnsupportedEncodingException; import java.security.MessageDigest; impor ...
- Mysql-5-数据表的基本操作
1.创建表:之前需要use database database_name 然后create table 表名(): 例:创建员工表tb_employee1,结构如下表所示 字段名称 数据类型 备注 i ...
- 历年NOIP真题总结
前言:最近把历年的NOIP真题肝了一遍(还有3个紫题先咕掉了),主要是到1998年的提高组的题.把题目的做题简要思路搁在这儿,一个是为了考前翻一翻,想想自己的哪些思路要梳理的什么什么的,反正怎么说呢, ...