Criteria查询
Posted -EASY-
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Criteria查询相关的知识,希望对你有一定的参考价值。
查询所有部门信息:
/** * 查询所有部门信息 */ @Test public void groupTest(){ Criteria criteria = session.createCriteria(Dept.class); List<Dept> list = criteria.list(); for (Dept item : list) { System.out.println(item.getDeptName()); } }
运行结果:
带条件查询部门名称为 "大神部" 的部门信息:
/** * 带条件查询部门名称为 "大神部" 的部门信息 */ @Test public void hasConditionTest(){ Criteria criteria = session.createCriteria(Dept.class); Criterion criterion = Restrictions.eq("deptName", "大神部"); criteria.add(criterion); List<Dept> list = criteria.list(); for (Dept item : list) { System.out.println(item.getDeptName()+"\\t"+item.getDeptNo()); } }
结果:
关联查询 查询"大神部"的所有员工:
/** * 关联查询 查询"大神部"的所有员工 */ @Test public void connectTest(){ Criteria criteria = session.createCriteria(Emp.class); //给Emp中关联的dept对象起一个别名 为 d criteria.createAlias("dept", "d"); Criterion criterion = Restrictions.eq("d.deptName", "大神部"); criteria.add(criterion); List<Emp> list = criteria.list(); for (Emp item : list) { System.out.println(item.getEmpName()); } }
结果:
范围查询部门为"大神部" 和 "就业部" 的员工信息:
/** * 范围查询部门为"大神部" 和 "就业部" 的员工信息 */ @Test public void rangeTest(){ Criteria criteria = session.createCriteria(Emp.class); List<String> lists=new ArrayList<String>(); lists.add("大神部"); lists.add("就业部"); //给Emp中关联的dept对象起一个别名 为 d criteria.createAlias("dept", "d"); Criterion criterion = Restrictions.in("d.deptName", lists); criteria.add(criterion); List<Emp> list=criteria.list(); for (Emp item : list) { System.out.println(item.getEmpName()); } }
结果:
查询部门表中包含"就业部"的所有员工姓名:
/** * 字符串模式匹配 * 查询部门表中包含"就业部"的所有员工姓名 */ @Test public void ilikeTest(){ Criteria criteria = session.createCriteria(Emp.class); //给Emp中关联的dept对象起一个别名 为 d criteria.createAlias("dept", "d"); Criterion criterion = Restrictions.ilike("d.deptName", "%就业部%"); criteria.add(criterion); List<Emp> list=criteria.list(); for (Emp item : list) { System.out.println(item.getEmpName()); } }
结果:
and 过滤 查询部门是"就业部" 并且员工姓名包含"小"的员工信息:
/** * 逻辑运算 * and 过滤 查询部门是"就业部" 并且员工姓名包含"小"的员工信息 */ @Test public void andTest(){ Criteria criteria = session.createCriteria(Emp.class); //给Emp中关联的dept对象起一个别名 为 d criteria.createAlias("dept", "d"); Criterion c1 = Restrictions.eq("d.deptName", "就业部"); Criterion c2 = Restrictions.ilike("empName", "%小%"); Criterion criterion = Restrictions.and(c1, c2); criteria.add(criterion); List<Emp> list=criteria.list(); for (Emp item : list) { System.out.println(item.getEmpName()); } }
结果:
集合运算 查询没有员工的部门:
/** * 集合运算 * 查询没有员工的部门 */ @Test public void isEmptyTest(){ Criteria criteria = session.createCriteria(Dept.class); Criterion criterion = Restrictions.isEmpty("emps"); criteria.add(criterion); List<Dept> list=criteria.list(); for (Dept item : list) { System.out.println(item.getDeptName()); } }
结果:
动态查询 查询员工部门是"就业部" 并且 员工编号大于0的 员工信息:
/** * 动态查询 * 查询员工部门是"就业部" 并且 员工编号大于0的 员工信息 */ @Test public void dynameicTest(){ Criteria criteria = session.createCriteria(Emp.class); //构建出一个和page对应的条件类 以此判断是否为空 EmpCondition condition=new EmpCondition(); condition.setDeptName("就业部"); condition.setEmpId(0); //判定之后 动态拼接检索条件 if (condition.getDeptName()!=null) { //给Emp中关联的dept对象起一个别名 为 d criteria.createAlias("dept", "d"); //用户填写的部门名称作为检索条件 criteria.add(Restrictions.eq("d.deptName", condition.getDeptName())); } if (condition.getEmpId()!=null) { criteria.add(Restrictions.gt("empId", condition.getEmpId())); } List<Emp> list=criteria.list(); for (Emp item : list) { System.out.println(item.getEmpName()); } }
结果:
排序addOrder() 查询员工编号大于0的 员工信息,按员工编号排序:
/** * 排序addOrder() * 查询员工编号大于0的 员工信息,按员工编号排序 */ @Test public void orderTest(){ Criteria criteria = session.createCriteria(Emp.class); Criterion criterion = Restrictions.gt("empId", 0); criteria.add(criterion).addOrder(Order.asc("empId")); List<Emp> list=criteria.list(); for (Emp item : list) { System.out.println(item.getEmpName()); } }
结果:
总记录数 和 分页 查询员工表中4-6条数据,每页显示3条:
/** * * 总记录数 和 分页 查询员工表中4-6条数据,每页显示3条 */ @Test public void pageListTest(){ Criteria criteria = session.createCriteria(Emp.class); //总记录数 //新的类型:Projections Projection projection = Projections.count("empId"); criteria.setProjection(projection); //看总记录数 转成Integer类型 Integer count= ((Long)criteria.uniqueResult()).intValue(); System.out.println("总记录数:"+count); //预置两个变量 int pageSize=3; int pageIndex=2; criteria.setFirstResult((pageIndex-1)*pageSize); criteria.setMaxResults(pageSize); List<Emp> list=criteria.list(); for (Emp item : list) { System.out.println(item.getEmpName()); } }
分页结果:
总记录数结果:
以上是关于Criteria查询的主要内容,如果未能解决你的问题,请参考以下文章
Hibernate使用HQL,Criteria和Native SQL查询,哪个好?
mysql中字段为text类型使用mybatis的Criteria查询无法进行封装