汕头网站建设备案,致远oa办公系统官网,一个网站做app,园区网站建设目的前些天发现了一个巨牛的人工智能学习网站#xff0c;通俗易懂#xff0c;风趣幽默#xff0c;忍不住分享一下给大家。点击跳转到教程。
PS #xff1a; mybatis 中也有对于 criteria 的使用#xff0c;见另一文章#xff1a;mybatis #xff1a;Criteria 查询、条件过滤…前些天发现了一个巨牛的人工智能学习网站通俗易懂风趣幽默忍不住分享一下给大家。点击跳转到教程。
PS mybatis 中也有对于 criteria 的使用见另一文章mybatis Criteria 查询、条件过滤用法 1. 业务场景
(1) . 按业务条件查到所有数据后要过滤掉其中 “当前领导自己填报的但不由自己审批的数据” 本来我一直在想是不是会有和 sql 中类似于 except 效果的实现 就一直想找这个方法但没有点出这个方法来直到在源码中看到一个 not 方法 。
于是尝试写为
Predicate a cb.notEqual(root.get(approverId), uid); // 非他审批
Predicate b cb.equal(root.get(employeeId), uid); // 他填报
list.add(cb.and(a, b).not()); 这样可以得到 cb.and(a, b) 结果的反集实现去除效果。(2) . 在微信端要求在一个输入框中实现多种类型数据查询。可输入“姓名、项目名称、工作任务、工作类型” 中的任意一种并作相应条件过滤。
这种只给一个参数却可能代表多种类型数据的实现 如下 Predicate p cb.or(cb.like(root.get(employeeName), % search %));p cb.or(p, cb.like(root.get(busName), % search %));p cb.or(p, cb.like(root.get(projectName), % search %));p cb.or(p, cb.like(root.get(jobTypeName), % search %));list.add(p); 2. 最终实现 Overridepublic Object findByPage(Pageable pageable, final String employeeId, final String employeeName, String beginDate, String endDate,final String departmentId, final Integer status, final String processInstanceId,final String approveId, final String jobTypeId,final String projectId, final String busId, final String search, final String uid) {PageWorkWeight page workWeightRepository.findAll(new SpecificationWorkWeight() {Overridepublic Predicate toPredicate(RootWorkWeight root, CriteriaQuery? query, CriteriaBuilder cb) {ListPredicate list Lists.newArrayList();//构造条件list.add(cb.equal(root.get(delFlag), 0));// 参数 search 可代表姓名、项目名称、工作任务、工作类型中的任意一种if (StringUtils.isNotEmpty(search)) {Predicate p cb.or(cb.like(root.get(employeeName), % search %));p cb.or(p, cb.like(root.get(busName), % search %));p cb.or(p, cb.like(root.get(projectName), % search %));p cb.or(p, cb.like(root.get(jobTypeName), % search %));list.add(p);}// 去掉当前领导自己填报的但不由自己审批的数据。if (StringUtils.isNotEmpty(uid)) {Predicate a cb.notEqual(root.get(approverId), uid); // 非他审批Predicate b cb.equal(root.get(employeeId), uid);// 他填报list.add(cb.and(a, b).not()); // not 指取反A B 等价于 !A || !B}Predicate[] p new Predicate[list.size()];return cb.and(list.toArray(p));}}, new PageRequest(pageable.getPageNumber(), pageable.getPageSize(), pageable.getSort()));return page;}