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"); Listlist = 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 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 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 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 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 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 names=new ArrayList<>(); names.add("员工1"); names.add("员工2"); //给查询增加条件 criteria.add(Restrictions.in("empName", names)); List 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 names=new ArrayList<>(); names.add("员工1"); names.add("员工2"); names.add("员工3"); names.add("员工4"); //给查询增加条件 criteria.add(Restrictions.in("empName", names)); List 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 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 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 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 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