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);
}
} }

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);
}
}

}

hibernate11--Criteria查询的更多相关文章

  1. Hibernate框架之Criteria查询 和注解(重点☆☆☆☆☆,难点☆☆☆)

    写好一篇博客,不是容易的事.原因是:你要给自己以后看的时候,还能看懂,最重要的是当别人看到你的博客文章的时候,也一样很清楚的明白你自己写的东西.其实这也是一种成就感!! 对于每一个知识点,要有必要的解 ...

  2. NHibernate系列文章二十三:NHibernate查询之Criteria查询(附程序下载)

    摘要 上一篇文章介绍了NHibernate HQL,他的缺点是不能够在编译时发现问题.如果数据库表结构有改动引起了实体关系映射的类有改动,要同时修改这些HQL字符串.这篇文章介绍NHibernate面 ...

  3. Criteria查询初学者的采纳点哦

    一.Hibernate提供了5种检索对象的方式 1.导航对象图检索方式:根据已经加载的对象导航到其他对象    from  Emp e group by e.dept.deptName 2.OID检索 ...

  4. Criteria查询之sqlRestriction()的理解

    sqlRestriction()的理解 在Criteria查询中 使用sqlRestriction()方法来提供SQL语法作限定查询,作为where字句 查看官方给的例子,如下 List cats = ...

  5. Criteria查询数据

    Criteria介绍: Criteria查询是Hibernate提供的一种查询方式,与HQL基于字符串的查询形式完全不同.Hibernate提供了org.hiberanee.Criteria 接口.o ...

  6. Hibernate框架之Criteria查询

    首先给大家说说Hibernate检索方式 Hibernate提供了5种检索对象的方式 1.导航对象图检索方式:根据已经加载的对象导航到其他对象 2.OID检索方式:按照对象的OID来检索对象 3.HQ ...

  7. Hibernate 、Hql查询和Criteria查询

    HQL查询: public Object query(String name){ Session s=null; try{ s=HibernateSessionFactory.getSession() ...

  8. Hibernate框架Criteria查询

    本文章适合一些初学者 一.使用Criteria查询数据        1.条件查询            1.1:使用Criteria查询的步骤                    1.使用Sess ...

  9. 第九章 Criteria查询及注解

    第九章   Criteria查询及注解9.1 使用Criteria查询数据    9.1.1 条件查询        Criteria查询步骤:            1)使用session接口的cr ...

  10. hibernate框架学习笔记7:HQL查询、Criteria查询简介

    HQL查询:hibernate独有的查询语言 适用于不复杂的多表查询 示例: 实体类: package domain; public class Customer { private Long cus ...

随机推荐

  1. java获得上下周及本周日期

    public static SimpleDateFormat getFormat(String format) { return new SimpleDateFormat(format); } /** ...

  2. iOS10 11跳转系统设置等的URL收集

    Settings App-Prefs:root Settings -> About App-Prefs:root=General&path=About Settings -> Ac ...

  3. Spring Boot参数校验

    1. 概述 作为接口服务提供方,非常有必要在项目中加入参数校验,比如字段非空,字段长度限制,邮箱格式验证等等,数据校验常用到概念:JSR303/JSR-349: JSR303是一项标准,只提供规范不提 ...

  4. vue-cli使用sockjs即时通信

    基于webSocket通信的库主要有 socket.io,SockJS,这次用的是 SockJS. 这里我们使用sockjs-client.stomjs这两个模块,要实现webSocket通信,需要后 ...

  5. Android必学之数据适配器BaseAdapter

    什么是数据适配器? 下图展示了数据源.适配器.ListView等数据展示控件之间的关系.我们知道,数据源是各种各样的,而ListView所展示数据的格式则是有一定的要求的.数据适配器正是建立了数据源与 ...

  6. Win10系统的DELL平板如何重装WIN10系统

    首先参考"Win10系统的SurfacePro4如何重装系统-1 SurfacePro专用的PE"这篇文章,做一个WIN10平板专用的PE 然后开机按F2可以进入BIOS设置,如果 ...

  7. docker-mysql-cron-backup不能执行任务

    https://github.com/shiningrise/docker-mysql-cron-backup CRON_TIME=“0 18 * * * ?” 改为 CRON_TIME=0 18 * ...

  8. Oracle 学习笔记 10 -- 约束

    本次笔记来学习约束,约束在表中无处不在. 比如,表中的数据不同意为空或者是表中id为设为主键,都是约束. 约束分类:         主键约束(PRIMARY KEY):主键表示表中一个唯一的标识,本 ...

  9. github远程建了分支,本地看不到的问题

    原因:Git  branch -a 查看的是本地仓库的所有分支  远程新建的没有同步前 就是看不到 解决:$git checkout master   //首先切到master分支 $git pull ...

  10. Python之Simple FTP (一)

    一.引言: 好久之前想写一个ftpserver的小daemon,但是一直拖着就没有写,这回正好处于放假的时候可以有时间来写写. 二.FTP需求功能: 1.用户认证系统 2.文件上传和下载功能 a.支持 ...