Hibernate中的QBC查询方式详解

QBC:Query By Criteria,条件查询。

是一种更加面向对象化的查询的方式。


1、QBC简单查询

测试代码:

package com.pipi.hibernate05;import com.pipi.hibernate04.Dept;
import myutils.HibernateUtil;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;import java.util.List;// QBC简单查询:查询表中所有记录
public class Test01_QBC {public static void main(String[] args) {Session session = HibernateUtil.getCurrentSession();Transaction transaction = session.beginTransaction();// 简单查询Criteria criteria = session.createCriteria(Dept.class);List<Dept> list = criteria.list();for (Dept d : list) {System.out.println(d);}transaction.commit();}
}

(2)QBC排序查询

测试代码:

package com.pipi.hibernate05;import com.pipi.hibernate04.Dept;
import myutils.HibernateUtil;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Order;import java.util.List;// QBC排序查询
public class Test02_QBC {public static void main(String[] args) {Session session = HibernateUtil.getCurrentSession();Transaction transaction = session.beginTransaction();// 排序查询Criteria criteria = session.createCriteria(Dept.class);//criteria.addOrder(Order.asc("deptno"));  // 升序criteria.addOrder(Order.desc("deptno"));  // 降序List<Dept> list = criteria.list();for (Dept d : list) {System.out.println(d);}transaction.commit();}
}

(3)QBC分页查询

测试代码:

package com.pipi.hibernate05;import com.pipi.hibernate04.Emp;
import myutils.HibernateUtil;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;import java.util.List;// QBC的分页查询
public class Test03_QBC {public static void main(String[] args) {Session session = HibernateUtil.getCurrentSession();Transaction transaction = session.beginTransaction();// 分页查询Criteria criteria = session.createCriteria(Emp.class);criteria.setFirstResult(0);criteria.setMaxResults(5);List<Emp> list = criteria.list();for (Emp e : list) {System.out.println(e);}transaction.commit();}
}

(4)QBC条件查询

测试代码:

package com.pipi.hibernate05;import com.pipi.hibernate04.Emp;
import myutils.HibernateUtil;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Restrictions;import java.util.List;
/*criteria.add(Restrictions.xxx())=   eq>   gt>=  ge<   lt<=  le<>  nelikeinandorbetween*/
// QBC的条件查询
public class Test04_QBC {public static void main(String[] args) {Session session = HibernateUtil.getCurrentSession();Transaction transaction = session.beginTransaction();// 条件查询Criteria criteria = session.createCriteria(Emp.class);criteria.add(Restrictions.like("ename", "Smi%"));//criteria.add(Restrictions.or(Restrictions.eq("job", "Clerk")));criteria.add(Restrictions.eq("job", "Clerk"));List<Emp> list = criteria.list();for (Emp e : list) {System.out.println(e);}transaction.commit();}
}

(5)QBC统计分组查询

测试代码:

package com.pipi.hibernate05;import com.pipi.hibernate04.Emp;
import myutils.HibernateUtil;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.Projections;// QBC的统计分组查询
public class Test05_QBC {public static void main(String[] args) {Session session = HibernateUtil.getCurrentSession();Transaction transaction = session.beginTransaction();Criteria criteria = session.createCriteria(Emp.class);/*add           : 普通的条件,where后面的条件addOrder      : 排序setProjection : 聚合函数 和 group by having*/criteria.setProjection(Projections.rowCount());Long cnt = (Long) criteria.uniqueResult();System.out.println(cnt);  // 14transaction.commit();}
}

(6)QBC离线条件查询:DetachedCriteria

什么是QBC离线查询?

往往在Web层时,就可以设置QBC语句,及查询条件。
但在Web层是没有Session对象的,Session是Dao层的。
此时可以使用离线查询DetachedCriteria对象。

测试代码:

package com.pipi.hibernate05;import com.pipi.hibernate04.Emp;
import myutils.HibernateUtil;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.Transaction;
import org.hibernate.criterion.DetachedCriteria;
import org.hibernate.criterion.Restrictions;import java.util.List;// QBC离线条件查询:DetachedCriteria
public class Test06_QBC {public static void main(String[] args) {// 在创建Session对象之前,就可以创建DetachedCriteria,并设置条件DetachedCriteria detachedCriteria = DetachedCriteria.forClass(Emp.class);detachedCriteria.add(Restrictions.eq("ename", "Smith"));// 创建Session对象Session session = HibernateUtil.getCurrentSession();Transaction transaction = session.beginTransaction();// 将DetachedCriteria对象与Session绑定,返回Criteria对象Criteria criteria = detachedCriteria.getExecutableCriteria(session);List<Emp> list = criteria.list();for (Emp e : list) {System.out.println(e);}transaction.commit();}
}

Hibernate中的QBC查询方式详解相关推荐

  1. python编程midi键盘按键_Python中捕获键盘的方式详解

    python中捕获键盘操作一共有两种方法 第一种方法: 使用pygame中event方法 使用方式如下:使用键盘右键为例 if event.type = pygame.KEYDOWN and even ...

  2. python获取键盘按键_Python中捕获键盘的方式详解

    python中捕获键盘操作一共有两种方法 第一种方法: 使用pygame中event方法 使用方式如下:使用键盘右键为例 if event.type = pygame.KEYDOWN and even ...

  3. hibernate(七) hibernate中查询方式详解

    序言 之前对hibernate中的查询总是搞混淆,不明白里面具体有哪些东西.就是因为缺少总结.在看这篇文章之前,你应该知道的是数据库的一些查询操作,多表查询等,如果不明白,可以先去看一下 MySQL数 ...

  4. Hibernate学习之路(十三):Hibernate中的QBC查询和本地sql操作

    什么是hibernate的QBC查询 QBC 查询就是通过使用 Hibernate 提供的 Query By Criteria API 来查询对象,这种 API 封装了 SQL 语句的动态拼装,对查询 ...

  5. MySQL约束条件和多表查询方式详解

    一.约束 什么是约束? 简述:除了数据类型以外的约束的 为什么使用约束? 简述:为了保证数据的合法性 完整性: 二.约束分类: not null 跟整型时使用其作用是限制插入数据不能为空 create ...

  6. 操作系统中的IO控制方式详解

    IO简介 IO就是Input和Output的简称,也就是输入输出.主要包括磁盘IO.网络IO.键盘输入,显示器输出.USB等操作. 输入是从IO设备输入到内存中,输出是从内存中输出到IO设备中. IO ...

  7. android中几种定位方式详解

    目录 前言: 1.GPS定位 2.NETWORK定位 3.AGPS定位 4.基站定位 5.WIFI定位 6.混合定位 目前,移动端大致通过三种方式来进行设备定位:GPS.基站.wifi.本文就详细的讲 ...

  8. VirtualBox中的网络连接方式详解

    如果出现主机无法ping通虚拟机的情况,请首先确认虚拟机防火墙已关闭. 一.NAT模式 特点: 1.如果主机可以上网,虚拟机可以上网 2.虚拟机之间不能ping通 3.虚拟机可以ping通主机(此时p ...

  9. php中 继承中的概念,JavaScript_JavaScript中的继承方式详解,js继承的概念 js里常用的如下 - phpStudy...

    JavaScript中的继承方式详解 js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承) 类式继承(构造函数间的继承) 由于js不像java那样是真正面向对象的语言,js是基于 ...

最新文章

  1. 三个优秀的语义分割框架 PyTorch实现
  2. 使用游戏测试干式EEG传感器的有效性
  3. .Net Core Configuration源码探究
  4. 【Jmeter篇】1小时轻松搞定项目接口自动化测试与数据驱动
  5. Docker 学习5 Docker容器网络
  6. 文件解压和压缩io流
  7. Android——简单模拟银行转账
  8. Vue的axios封装
  9. EXCEL VBA窗口快捷键冲突查找原因
  10. 记录:web前端高德API获取天气服务
  11. 论文复现:Expressive Body Capture
  12. java斜体_设置标签字体用粗体和斜体
  13. SpringCloud SpringBoot b2b2c 微服务 多商家入驻直播商城之Git 远程仓库(Github)
  14. 网易云linux版本如何安装包,网易云音乐linux版下载-网易云音乐linux 安装包v1.1.0 官方版 - 极光下载站...
  15. 开发用于互操作性的应用程序_云标准:确保云应用互操作性的工具
  16. python向量点乘_Python线性代数学习笔记——向量的点乘与几何意义,实现向量的点乘操作...
  17. 实验楼原型系统设计-1
  18. Flowable 流程实例的挂起(暂停)与激活
  19. Xshell中鼠标选中内容自动换行ctrl+c解决办法
  20. Winlogon登录和GINA

热门文章

  1. 解惑 | 逆转录时到底要不要去除gDNA?
  2. c语言队列实现FIFO
  3. 中国全息防伪包装行业市场供需与战略研究报告
  4. Linux下编译连接mysql数据库
  5. Ubuntu配置|添加拥塞控制算法到Linux内核
  6. Python接口自动化测试框架搭建
  7. 为什么需要智能化,他和自动化相比有什么有利方面?
  8. 【人工智能】人工智能资料汇总(百度云盘)
  9. 安卓到ios显示无法连接到服务器,猎魂觉醒无法连接服务器怎么办 ios/安卓无法连接服务器解决办法...
  10. 警惕求职面试中的语言陷阱