hibernate11--Criteria查询
public class EmpTest {Session session =null;Transaction transaction=null;@Beforepublic void before(){session = HibernateSessionUtil.getCurrentSession();transaction= session.beginTransaction();}/*** Criteria 查询接口:完全是面向对象的思想来 操作数据库!* 看不到sql看不到hql!* 01.查询所有的部门信息*/@Testpublic void test01(){Criteria criteria=session.createCriteria(Dept.class); //createQuery("from Dept");List<Dept>list = criteria.list();for (Dept dept : list) {System.out.println(dept);}} /*** 02.查询指定的部门信息 eq(属性名,属性值)* Restrictions:给我们的查询增加条件* 001.Restrictions中的方法都是静态的* 002.方法的返回是都是 Criterion或者其实现类*/@Testpublic void test02(){Criteria criteria=session.createCriteria(Dept.class); //createQuery("from Dept");criteria.add(Restrictions.eq("deptName", "研发部")); //给查询增加条件Dept dept = (Dept) criteria.uniqueResult();System.out.println(dept);} /*** 03.查询员工薪水大于10k的 gt(属性名,属性值)*/@Testpublic void test03(){Criteria criteria=session.createCriteria(Emp.class); criteria.add(Restrictions.gt("salary", 10000d)); //给查询增加条件List<Emp> list = criteria.list();for (Emp emp : list) {System.out.println(emp);}} /*** 04.查询员工薪水大于5k的 小于100k bw(属性名,属性值1,属性值2)*/@Testpublic void test04(){Criteria criteria=session.createCriteria(Emp.class); criteria.add(Restrictions.between("salary", 5000d, 100000d)); //给查询增加条件List<Emp> list = criteria.list();for (Emp emp : list) {System.out.println(emp);}} /*** 05.查询没有部门的员工 dept是我们Emp类中的一个域属性 对象为null 使用 isNull*/@Testpublic void test05(){Criteria criteria=session.createCriteria(Emp.class); criteria.add(Restrictions.isNull("dept")); //给查询增加条件List<Emp> list = criteria.list();for (Emp emp : list) {System.out.println(emp);}} /*** 06.查询没有员工的 部门 emps是我们Dept类中的一个集合 集合的size=0 使用 isEmpty*/@Testpublic void test06(){Criteria criteria=session.createCriteria(Dept.class); criteria.add(Restrictions.isEmpty("emps")); //给查询增加条件List<Dept> list = criteria.list();for (Dept dept : list) {System.out.println(dept);}} /*** 07.查询 员工姓名是 员工1 或者 员工2的信息* 两种情况 使用or*/@Testpublic void test07(){Criteria criteria=session.createCriteria(Emp.class); //给查询增加条件 criteria.add(Restrictions.or(Restrictions.eq("empName", "员工1"),Restrictions.eq("empName", "员工2"))); List<Emp> list = criteria.list();for (Emp emp : list) {System.out.println(emp);}} /*** 08.查询 员工姓名是 员工1 或者 员工2的信息* 两种情况 使用in(属性名,集合)*/@Testpublic void test08(){Criteria criteria=session.createCriteria(Emp.class); List<String> names=new ArrayList<>();names.add("员工1");names.add("员工2");//给查询增加条件criteria.add(Restrictions.in("empName", names)); List<Emp> list = criteria.list();for (Emp emp : list) {System.out.println(emp);}} /*** 09.查询 员工姓名是 员工1 或者 员工2 ,员工3 员工4 的信息* 两种情况 使用in(属性名,集合)*/@Testpublic void test09(){Criteria criteria=session.createCriteria(Emp.class); List<String> names=new ArrayList<>();names.add("员工1");names.add("员工2");names.add("员工3");names.add("员工4");//给查询增加条件criteria.add(Restrictions.in("empName", names)); List<Emp> list = criteria.list();for (Emp emp : list) {System.out.println(emp);}} /*** 10.查询 员工姓名是 员工1 或者 员工2 ,员工3 员工4 的信息* * Restrictions.disjunction()返回一个Disjunction对象* Disjunction 继承了Junction* Junction中有一个add()* 底层代码* public Junction add(Criterion criterion) {criteria.add(criterion);return this;}*/@Testpublic void test10(){Criteria criteria=session.createCriteria(Emp.class); //给查询增加条件 criteria.add(Restrictions.disjunction().add(Restrictions.eq("empName", "员工1")).add(Restrictions.eq("empName", "员工2")).add(Restrictions.eq("empName", "员工3")).add(Restrictions.eq("empName", "员工4"))); List<Emp> list = criteria.list();for (Emp emp : list) {System.out.println(emp);}} /*** 11.查询 员工姓名包含 A 的员工信息* like 模糊查询 */@Testpublic void test11(){Criteria criteria=session.createCriteria(Emp.class); //给查询增加条件criteria.add(Restrictions.like("empName", "%A%")); List<Emp> list = criteria.list();for (Emp emp : list) {System.out.println(emp);}} /*** 12.查询 员工姓名包含 A/a 的员工信息* ilike 模糊查询 忽略大小写 */@Testpublic void test12(){Criteria criteria=session.createCriteria(Emp.class); //给查询增加条件criteria.add(Restrictions.ilike("empName", "%A%")); List<Emp> list = criteria.list();for (Emp emp : list) {System.out.println(emp);}} /*** 13.查询 员工姓名包含 A 的员工信息* like 模糊查询 * MatchMode: 我们value值出现的位置 可以替换% * MatchMode.ANYWHERE:前后* MatchMode.END:后* MatchMode.START:前*/@Testpublic void test13(){Criteria criteria=session.createCriteria(Emp.class); //给查询增加条件criteria.add(Restrictions.like("empName", "A",MatchMode.ANYWHERE)); List<Emp> list = criteria.list();for (Emp emp : list) {System.out.println(emp);}} /*** 14.聚合函数 和 投影查询 Projections* * 查询 薪水的最大值 最小值 总薪水 和平均薪水* criteria.setProjection 是赋值操作* 如果不清空Projection * 之前给的值 会带入下次的查询*/@Testpublic void test14(){Criteria criteria = session.createCriteria(Emp.class);criteria.setProjection(Projections.projectionList().add(Projections.max("salary")).add(Projections.min("salary")).add(Projections.sum("salary")).add(Projections.avg("salary")));//criteria.setProjection(null); 清空所有的约束List<Object[]> list = criteria.list();for (Object[] objects : list) {System.out.println("最大薪水:"+objects[0]);System.out.println("最小薪水:"+objects[1]);System.out.println("总薪水:"+objects[2]);System.out.println("平均薪水:"+objects[3]);}}/*** 15. 分页查询* 查询姓名中 包含 "员工" 的 并且 按照 薪水 降序排列*/@Testpublic void test15(){//查询总记录数int count=((Long)session.createCriteria(Emp.class).add(Restrictions.like("empName", "员工",MatchMode.ANYWHERE)).setProjection(Projections.count("empName")).uniqueResult()).intValue();System.out.println("总记录数是:"+count);//当前页int pageIndex=1;//页大小int pageSize=4;//总页数int totalPageSize=(count%pageSize==0)?(count/pageSize):(count/pageSize+1);//进行薪水的降序排列Criteria criteria= session.createCriteria(Emp.class).add(Restrictions.like("empName", "员工",MatchMode.ANYWHERE)).addOrder(Order.desc("salary"));//设置 当前页 以及页大小List<Emp> list = criteria.setFirstResult((pageIndex-1)*pageSize).setMaxResults(pageSize).list();for (Emp emp : list) {System.out.println(emp);}}/*** 16:面试题* DetachedCriteria和 Criteria的区别* 相同点:都能用来 做查询操作* 不同点:* 01.DetachedCriteria在创建的时候 不需要session! * 02.真正执行查询的时候getExecutableCriteria(session)才使用session* 03.DetachedCriteria自身可以作为一个参数* * 薪水 大于 平均值的员工信息 */@Testpublic void test16(){//得到DetachedCriteria对象DetachedCriteria criteria= DetachedCriteria.forClass(Emp.class).setProjection(Projections.avg("salary"));//执行查询double avg=(double) criteria.getExecutableCriteria(session).uniqueResult();System.out.println("薪水的平均值是:"+avg);//薪水 大于 平均值的员工信息 List<Emp> list = session.createCriteria(Emp.class).add(Property.forName("salary").gt(criteria)).list();for (Emp emp : list) {System.out.println(emp);}}}
public class EmpTest { Session session =null; Transaction transaction=null; @Before public void before(){ session = HibernateSessionUtil.getCurrentSession(); transaction= session.beginTransaction(); } /** * Criteria 查询接口:完全是面向对象的思想来 操作数据库! * 看不到sql看不到hql! * 01.查询所有的部门信息 */ @Test public void test01(){ Criteria criteria=session.createCriteria(Dept.class); //createQuery("from Dept");
List<Dept>list = criteria.list(); for (Dept dept : list) { System.out.println(dept); } } /** * 02.查询指定的部门信息 eq(属性名,属性值) * Restrictions:给我们的查询增加条件 * 001.Restrictions中的方法都是静态的 * 002.方法的返回是都是 Criterion或者其实现类 */ @Test public void test02(){ Criteria criteria=session.createCriteria(Dept.class); //createQuery("from Dept");
criteria.add(Restrictions.eq("deptName", "研发部")); //给查询增加条件
Dept dept = (Dept) criteria.uniqueResult(); System.out.println(dept); } /** * 03.查询员工薪水大于10k的 gt(属性名,属性值) */ @Test public void test03(){ Criteria criteria=session.createCriteria(Emp.class); criteria.add(Restrictions.gt("salary", 10000d)); //给查询增加条件
List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 04.查询员工薪水大于5k的 小于100k bw(属性名,属性值1,属性值2) */ @Test public void test04(){ Criteria criteria=session.createCriteria(Emp.class); criteria.add(Restrictions.between("salary", 5000d, 100000d)); //给查询增加条件
List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 05.查询没有部门的员工 dept是我们Emp类中的一个域属性 对象为null 使用 isNull */ @Test public void test05(){ Criteria criteria=session.createCriteria(Emp.class); criteria.add(Restrictions.isNull("dept")); //给查询增加条件
List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 06.查询没有员工的 部门 emps是我们Dept类中的一个集合 集合的size=0 使用 isEmpty */ @Test public void test06(){ Criteria criteria=session.createCriteria(Dept.class); criteria.add(Restrictions.isEmpty("emps")); //给查询增加条件
List<Dept> list = criteria.list(); for (Dept dept : list) { System.out.println(dept); } } /** * 07.查询 员工姓名是 员工1 或者 员工2的信息 * 两种情况 使用or */ @Test public void test07(){ Criteria criteria=session.createCriteria(Emp.class); //给查询增加条件
criteria.add(Restrictions.or (Restrictions.eq("empName", "员工1"), Restrictions.eq("empName", "员工2"))); List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 08.查询 员工姓名是 员工1 或者 员工2的信息 * 两种情况 使用in(属性名,集合) */ @Test public void test08(){ Criteria criteria=session.createCriteria(Emp.class); List<String> names=new ArrayList<>(); names.add("员工1"); names.add("员工2"); //给查询增加条件
criteria.add(Restrictions.in("empName", names)); List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 09.查询 员工姓名是 员工1 或者 员工2 ,员工3 员工4 的信息 * 两种情况 使用in(属性名,集合) */ @Test public void test09(){ Criteria criteria=session.createCriteria(Emp.class); List<String> names=new ArrayList<>(); names.add("员工1"); names.add("员工2"); names.add("员工3"); names.add("员工4"); //给查询增加条件
criteria.add(Restrictions.in("empName", names)); List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 10.查询 员工姓名是 员工1 或者 员工2 ,员工3 员工4 的信息 * * Restrictions.disjunction()返回一个Disjunction对象 * Disjunction 继承了Junction * Junction中有一个add() * 底层代码 * public Junction add(Criterion criterion) { criteria.add(criterion); return this; } */ @Test public void test10(){ Criteria criteria=session.createCriteria(Emp.class); //给查询增加条件
criteria.add(Restrictions.disjunction() .add(Restrictions.eq("empName", "员工1")) .add(Restrictions.eq("empName", "员工2")) .add(Restrictions.eq("empName", "员工3")) .add(Restrictions.eq("empName", "员工4")) ); List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 11.查询 员工姓名包含 A 的员工信息 * like 模糊查询 */ @Test public void test11(){ Criteria criteria=session.createCriteria(Emp.class); //给查询增加条件
criteria.add(Restrictions.like("empName", "%A%")); List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 12.查询 员工姓名包含 A/a 的员工信息 * ilike 模糊查询 忽略大小写 */ @Test public void test12(){ Criteria criteria=session.createCriteria(Emp.class); //给查询增加条件
criteria.add(Restrictions.ilike("empName", "%A%")); List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 13.查询 员工姓名包含 A 的员工信息 * like 模糊查询 * MatchMode: 我们value值出现的位置 可以替换% * MatchMode.ANYWHERE:前后 * MatchMode.END:后 * MatchMode.START:前 */ @Test public void test13(){ Criteria criteria=session.createCriteria(Emp.class); //给查询增加条件
criteria.add(Restrictions.like("empName", "A",MatchMode.ANYWHERE)); List<Emp> list = criteria.list(); for (Emp emp : list) { System.out.println(emp); } } /** * 14.聚合函数 和 投影查询 Projections * * 查询 薪水的最大值 最小值 总薪水 和平均薪水 * criteria.setProjection 是赋值操作 * 如果不清空Projection * 之前给的值 会带入下次的查询 */ @Test public void test14(){ Criteria criteria = session.createCriteria(Emp.class); criteria.setProjection( Projections.projectionList() .add(Projections.max("salary")) .add(Projections.min("salary")) .add(Projections.sum("salary")) .add(Projections.avg("salary")) ); //criteria.setProjection(null); 清空所有的约束
List<Object[]> list = criteria.list(); for (Object[] objects : list) { System.out.println("最大薪水:"+objects[0]); System.out.println("最小薪水:"+objects[1]); System.out.println("总薪水:"+objects[2]); System.out.println("平均薪水:"+objects[3]); } } /** * 15. 分页查询 * 查询姓名中 包含 "员工" 的 并且 按照 薪水 降序排列 */ @Test public void test15(){ //查询总记录数
int count=((Long)session.createCriteria(Emp.class) .add(Restrictions.like("empName", "员工",MatchMode.ANYWHERE)) .setProjection(Projections.count("empName")).uniqueResult()).intValue(); System.out.println("总记录数是:"+count); //当前页
int pageIndex=1; //页大小
int pageSize=4; //总页数
int totalPageSize=(count%pageSize==0)?(count/pageSize):(count/pageSize+1); //进行薪水的降序排列
Criteria criteria= session.createCriteria(Emp.class) .add(Restrictions.like("empName", "员工",MatchMode.ANYWHERE)) .addOrder(Order.desc("salary")); //设置 当前页 以及页大小
List<Emp> list = criteria.setFirstResult((pageIndex-1)*pageSize).setMaxResults(pageSize).list(); for (Emp emp : list) { System.out.println(emp); } } /** * 16:面试题 * DetachedCriteria和 Criteria的区别 * 相同点:都能用来 做查询操作 * 不同点: * 01.DetachedCriteria在创建的时候 不需要session! * 02.真正执行查询的时候getExecutableCriteria(session)才使用session * 03.DetachedCriteria自身可以作为一个参数 * * 薪水 大于 平均值的员工信息 */ @Test public void test16(){ //得到DetachedCriteria对象
DetachedCriteria criteria= DetachedCriteria.forClass(Emp.class) .setProjection(Projections.avg("salary")); //执行查询
double avg=(double) criteria.getExecutableCriteria(session).uniqueResult(); System.out.println("薪水的平均值是:"+avg); //薪水 大于 平均值的员工信息
List<Emp> list = session.createCriteria(Emp.class).add( Property.forName("salary").gt(criteria)).list(); for (Emp emp : list) { System.out.println(emp); } } }
转载于:https://www.cnblogs.com/HHR-SUN/p/7190974.html
hibernate11--Criteria查询相关推荐
- (3) Hibernate的查询 标准(Criteria)查询
Hibernate的查询 标准(Criteria)查询 1 一个简单例子: Java代码 @SuppressWarnings("unchecked") public void ...
- Hibernate之Criteria查询
Hibernate中提供了三种查询方式,分别为HQL.Criteria查询.本地化SQL查询,实际应用中,有很多人忽略了Criteria的用处,觉得不如另外两种贴近SQL方式便捷,实际则未必,很多情况 ...
- Hibernate框架之HQL查询与Criteria 查询的区别
Hibernate框架提供了HQL查询和Criteria 查询.下面对这两种查询分别做个例子.也好对这两种查询方法有个大概的了解.就用房屋信息表做例子,查询所有房屋信息. HQL语句查询所有房屋信息: ...
- JPA criteria 查询:类型安全与面向对象
序言 自工作以来,除了以前比较流量的hibernate,就是一直使用ORM 规范 JPA了.而这几天工作需要,研究了下JPA的标准查询,名为:JPA criteria查询.相比JPQL,其优势是类型安 ...
- Spring之Specification复杂查询和Criteria查询
Specification官网 [一目了然]Spring Data JPA使用Specification动态构建多表查询.复杂查询及排序示例 JPA 使用 Specification 复杂查询和 Cr ...
- Criteria查询用法
Criteria 使用 Criteria 进行查询,主要要清晰的是 Hibernate 提供了那些类和方法来满足开发中查询条件的创建和组装. 构建Criteria查询 Criteria 这个接口代表对 ...
- Criteria查询
QBC: Criteria查询 Criteria查询(上) QBC:Query By Criteria 标准查询 JPA中Criteria SQL.HQL 或者各种关键字的语句都不需要书写.全部用方法 ...
- Criteria查询(示例)
Criteria查询也叫做QBC查询(Query by Criteria),是完全面向对象的查询. Criterion 是 Criteria 的查询条件.Criteria 提供了 add(Criter ...
- Hibernate 框架(三)—— Criteria 查询(Criteria 5.2以前和5.2以后的API和使用)
文章目录 一.Criteria 查询 1.Criteria 查询概述 2.Criteria 5.2 以前的API和使用 3.Criteria 5.2 以后的API和使用 一.Criteria 查询 1 ...
- Hibernate之Criteria查询及注解
1. 前言 之前从来没有接触过Hibernate,跳槽之后的公司使用的是Hibernate的Criteria查询.简单整理一下. 2.什么是Criteria查询QBC(Query By Criteri ...
最新文章
- PMCAFF | 十大最坑爹的产品设计缺陷你遇到过几个?
- php请求脚本,同时请求PHP脚本
- ml是什么_ML,ML,谁是所有人的冠军?
- JavaScript 年度调查报告:React、Vue 和 Angular 三分天下,谁将在 2018 年独占鳌头?
- 低代码--功能模块化,逻辑图形化
- linux卸载keepalived,ubuntu安装keepalived
- 平行束滤波fbp_CT平行束和扇形束算法的转换.pptx
- 更改文字颜色为红色HTMl语言,怎样用css将文字改为红色?
- 厦门大学计算机专业录取分数线2019,【厦门大学:2019-2016山西省各专业录取分数线】...
- 新浪小编为您介绍留声机的古与今
- linux 开机进入initramfs
- 怎么样写好头部姿态的研究背景?
- 程序员常用20个学习网站
- CLOCs:一种相机-激光雷达3D目标检测后融合方法
- 【linux】-find、rm、kill等常用命令
- 中小公司拥抱数字化:你看我还有机会么?
- 一文搞懂产品中的搜索设计
- 超简单的混合开发入门 JS实现安卓Listview
- uniapp 小程序用户信息接口被收回暂行解决方法
- 打工人看过来,2022 个税申报开始了!
热门文章
- 在wamp里面配置feehicms
- qtcreator 用cmake找不到userPath的解决方法
- Mixed Finite Elements for Variational Surface Modeling
- Robust Quasistatic Finite Elements and Flesh Simulation
- MATLAB中的三维图形等值线
- java 注解 runtime_自定义注解之运行时注解(RetentionPolicy.RUNTIME)
- c语言getchar在哪个头文件_c语言入门(一)
- 从零开始掌握Python机器学习(附不可错过的资源)
- 参数等效模型可以用于_华北电力大学 陈宁、齐磊 等:适用于柔性直流电网操作过电压分析的混合式高压直流断路器端口等效模型...
- 如何在自己开发的android应用中添加广告