1.条件查询,动态查询
public void conditionQuery(){ Session session=null; try { session=HibernateUtil.currentSession(); //准备查询条件,对第三方类进行封装 ConditionEmp cm=new ConditionEmp(); cm.setJob("教员"); cm.setSalary(1400D); cm.setHireDateBegin(ConvertDate.strToDate("2000-11-11", "yyyy-MM-dd")); cm.setHireDateEnd(ConvertDate.strToDate("2016-11-11", "yyyy-MM-dd")); //动态添加条件 Criteria c=session.createCriteria(Emp.class); if(cm.getJob()!=null){ //工作选项不为空 c.add(Restrictions.ilike("job", cm.getJob(), MatchMode.ANYWHERE)); } if(cm.getSalary()!=0){ c.add(Restrictions.gt("salary", cm.getSalary())); } if(cm.getHireDateBegin()!=null){ c.add(Restrictions.ge("hiredate", cm.getHireDateBegin())); } if(cm.getHireDateEnd()!=null){ c.add(Restrictions.le("hiredate", cm.getHireDateEnd())); } List<Emp> list=c.list(); for (Emp emp : list) { System.out.println(emp.getName()); } } catch (Exception e) { e.printStackTrace(); }finally{ HibernateUtil.closeSession(); } }
2.排序 分页 关联
1 public void show(){ 2 Session session=null; 3 try { 4 session=HibernateUtil.currentSession(); 5 Criteria c=session.createCriteria(Emp.class); 6 // //查询工资高于某个范围,结果按照升序或者降序排列 7 // 8 // //添加条件 9 // List<Emp> list= c.add(Restrictions.gt("salary", 1500D)).addOrder(Order.desc("salary")).list(); 10 // 11 // for (Emp emp : list) { 12 // System.out.println(emp.getName()+" "+emp.getSalary()); 13 // } 14 15 16 // //工资高于某个范畴,按照工资升序,在按照编号降序 17 // @SuppressWarnings("unchecked") 18 // List<Emp> list=c.add(Restrictions.gt("salary", 1500D)). 19 // addOrder(Order.asc("salary")). 20 // addOrder(Order.desc("id")).list(); 21 // for (Emp emp : list) { 22 // System.out.println(emp.getName()+"----"+emp.getSalary()+"----"+emp.getId()); 23 // } 24 25 26 //查出工资最高的两个人 27 List<Emp> list=c.add(Restrictions.isNotNull("salary")). 28 addOrder(Order.desc("salary")). 29 setFirstResult(0).setMaxResults(2).list(); 30 for (Emp emp : list) { 31 System.out.println(emp.getName()+"----"+emp.getSalary()+"----"+emp.getId()); 32 } 33 34 } catch (Exception e) { 35 e.printStackTrace(); 36 }finally{ 37 HibernateUtil.closeSession(); 38 } 39 }
3.分页
1 public void pageDemo(){ 2 Session session=null; 3 try { 4 session=HibernateUtil.currentSession(); 5 6 Criteria c=session.createCriteria(Emp.class); 7 8 //获取总记录 9 Integer count=(Integer) c.setProjection(Projections.rowCount()).uniqueResult(); 10 //设置每页显示几条记录 11 int pageSize=4; 12 //计算总页数 13 int totalPage=(count%pageSize==0)?(count/pageSize):(count/pageSize+1); 14 //清空查找总记录数时设置的投影 15 c.setProjection(null); 16 //页的索引 17 int pageIndex=1; 18 //设置从哪条记录开始,不包括输入的值 19 c.setFirstResult((pageIndex-1)*pageSize); 20 //设置查找的记录的总条数 21 c.setMaxResults(pageSize); 22 23 List<Emp> list=c.list(); 24 for (Emp emp : list) { 25 System.out.println(emp.getName()); 26 } 27 28 } catch (Exception e) { 29 e.printStackTrace(); 30 }finally{ 31 HibernateUtil.closeSession(); 32 } 33 }
4.关联查询
1 public void joinDemo(){ 2 Session session=null; 3 try { 4 session=HibernateUtil.currentSession(); 5 6 // //查询包含指定字符的员工 7 // List<Emp> list=session.createCriteria(Emp.class). 8 // add(Restrictions.ilike("name", "王", MatchMode.ANYWHERE)). 9 // createCriteria("dept").add(Restrictions.eq("name", "开发部")).list(); 10 // for (Emp emp : list) { 11 // System.out.println(emp.getName()+" "+emp.getDept().getName()); 12 // } 13 14 //查询工作所在地为某一部门的员工人数 15 List<Dept> list=session.createCriteria(Dept.class,"d"). 16 setFetchMode("emps", FetchMode.JOIN).add(Restrictions.eq("d.name", "开发部")).list(); 17 System.out.println(list.size()); 18 } catch (Exception e) { 19 e.printStackTrace(); 20 }finally{ 21 HibernateUtil.closeSession(); 22 } 23 }
5.投影
1 public void projectionDemo(){ 2 Session session=null; 3 try { 4 session=HibernateUtil.currentSession(); 5 6 // //查询员工的姓名和入职时间 7 // List<Object[]> list=session.createCriteria(Emp.class). 8 // setProjection(Projections.projectionList(). 9 // add(Property.forName("name")). 10 // add(Property.forName("hiredate"))) 11 // .list(); 12 // for (Object[] obj : list) { 13 // System.out.println(obj[0]+" "+obj[1]); 14 // // new Date(((Timestamp)obj[1]).getTimestamp()); 15 // } 16 17 // //统计各部门的平均工资、最高工资、最低工资 18 // List<Object[]> list=session.createCriteria(Emp.class,"e"). 19 // createAlias("e.dept", "d"). 20 // setProjection(Projections.projectionList(). 21 // add(Projections.groupProperty("d.name")). 22 // add(Projections.avg("salary")). 23 // add(Projections.max("salary")). 24 // add(Projections.min("salary"))).list(); 25 // for (Object[] obj : list) { 26 // System.out.println(obj[0]+" "+obj[1]+" "+obj[2]+" "+obj[3]); 27 // } 28 29 //使用DetachedCriteria 30 DetachedCriteria dc=DetachedCriteria.forClass(Emp.class,"e") 31 .createAlias("e.dept", "d").add(Restrictions.eq("d.name", "人事部")) 32 .add(Restrictions.ilike("e.name", "王",MatchMode.ANYWHERE)); 33 34 //查询数据 35 List<Emp> list= dc.getExecutableCriteria(session).list(); 36 for (Emp emp : list) { 37 System.out.println(emp.getName()+"---"+emp.getDept().getName()); 38 } 39 } catch (Exception e) { 40 e.printStackTrace(); 41 }finally{ 42 HibernateUtil.closeSession(); 43 } 44 }