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

}

最新文章

  1. 【原】mysql5.6 split函数_字符串的分割
  2. (转载) 利用国内的镜像,加速PIP下载
  3. NetBeans建立跳过测试构建的快捷方式
  4. Android下如何计算两经纬点之间距离
  5. 网络电视精灵~分析~~~~~~简单工厂模式,继承和多态,解析XML文档,视频项目
  6. Android Studio下载及使用教程(转载)
  7. Sql Server之旅——第七站 为什么都说状态少的字段不能建索引
  8. Design Elevator
  9. iOS 一个工程中引用其他工程时编译的Architecture问题
  10. 自己动手做jQuery插件
  11. unity访问php
  12. 北京Uber优步司机奖励政策(2月3日)
  13. ubuntu matplotlib 安装
  14. VMware NAT端口映射外网访问虚拟机linux
  15. 【转载】CSS font关键字属性值的简单研究
  16. vue UI库iview源码解析(2)
  17. 利用Swagger2自动生成对外接口的文档
  18. 基本环境安装: Centos7+Java+Hadoop+Spark+HBase+ES+Azkaban
  19. Excel:11个查询函数组合
  20. 鸟哥的 Linux 私房菜Shell Scripts篇(三)

热门文章

  1. adb shell 命令详解
  2. [Python设计模式] 第15章 如何兼容各种DB——抽象工厂模式
  3. 安装了 R2 Integration Servic 之后,SQL Server 2008 Management Studio报错
  4. libfacedetection简单使用记录
  5. ROM后缀含义
  6. Ubuntu16.04安装串口调试工具gtkterm
  7. MSSQL数据导出到MYSQL
  8. Fluent动网格【11】:弹簧光顺
  9. [HDFS Manual] CH2 HDFS Users Guide
  10. python serial 模块使用