在service层封装新的数据
先把前台传过来的要查询的条件重新封装到criteria参数中,
创建新的方法(参数为 criteria的对象)
在原方法中调用这个新方法
(在dao层创建这个新方法的接口,最后在实现这个新的方法)
在下面创建封装criteria的方法,把前台传过来的数据按照模糊查询的方法重新封装称一个criteria对象
下例:
在service层代码
// 使用离线查询,封装查询条件 @Override public List<CrmStaff> findByCondition(CrmStaff staff) { // 前面传过来的数据方法 List<CrmStaff> staffs = null; if (staff != null) { DetachedCriteria criteria = getCriteria(staff);
//使用前台传过来的数据进行封装新的模糊查询的参数(下面创建了这个方法) staffs = staffDao.findByCondition(criteria);
//创建新的方法用来实现模糊查询 } else { staffs = staffDao.findAll(); } return staffs; }
//构造创建新参数的方法
public DetachedCriteria getCriteria(CrmStaff staff) { DetachedCriteria criteria = DetachedCriteria.forClass(staff.getClass()); // 员工姓名 String staffName = staff.getStaffName(); if (staffName != null && !"".equals(staffName)) { criteria.add(Restrictions.like("staffName", "%" + staffName + "%")); } // 职务 CrmPost post = staff.getCrmPost(); if (post != null) { String postId = post.getPostId(); if (postId != null && !"".equals(postId)) { criteria.add(Restrictions.eq("crmPost.postId", postId)); } } // 部门 if (post != null && post.getCrmDepartment() != null) { String depId = post.getCrmDepartment().getDepId(); /* * if(depId!= null && !"".equals(depId)){ * criteria.add(Restrictions.eq("crmPost.crmDepartment.depId", * depId)); } */ // 根据部门,获得部门的所有职务,之后根据职务查询员工 if (depId != null && !"".equals(depId)) { Set<CrmPost> posts = departmentService.findById(depId).getCrmPosts(); List<String> postIds = new ArrayList<>(); for (CrmPost p : posts) { postIds.add(p.getPostId()); } criteria.add(Restrictions.in("crmPost.postId", postIds)); } } return criteria; }
dao层的抽象方法
public List<CrmStaff> findByCondition(DetachedCriteria criteria);
dao层实现层的方法
@Override public List<CrmStaff> findByCondition(DetachedCriteria criteria) { // TODO Auto-generated method stub return (List<CrmStaff>) getHibernateTemplate().findByCriteria(criteria); }
跟普通的的查询方法就多了一次封装新的参数。其他的基本都相同。
另外,模糊查询中
// 职务 CrmPost post = staff.getCrmPost(); if (post != null) { String postId = post.getPostId(); if (postId != null && !"".equals(postId)) { criteria.add(Restrictions.eq("crmPost.postId", postId)); } }这个criteria.add(Restrictions.eq("crmPost.postId", postId));中的eq("A","B")代表A与B相同
与此类似的方法有gt("A" , "B")A大于Bge("A" , "B")A大于等于Blt("A" , "B")A小于Bge("A" , "B")A小于等于B