日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

jpa : criteria 作排除过滤、条件中除去查出的部分数据、JPA 一个参数可查询多个字段

發(fā)布時間:2023/12/18 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 jpa : criteria 作排除过滤、条件中除去查出的部分数据、JPA 一个参数可查询多个字段 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前些天發(fā)現(xiàn)了一個巨牛的人工智能學(xué)習(xí)網(wǎng)站,通俗易懂,風(fēng)趣幽默,忍不住分享一下給大家。點擊跳轉(zhuǎn)到教程。

PS : mybatis 中也有對于 criteria?的使用,見另一文章:mybatis :Criteria 查詢、條件過濾用法

?

1. 業(yè)務(wù)場景:

(1) . 按業(yè)務(wù)條件查到所有數(shù)據(jù)后,要過濾掉其中 “當(dāng)前領(lǐng)導(dǎo)自己填報的但不由自己審批的數(shù)據(jù)”?,本來我一直在想是不是會有和 sql 中類似于 except 效果的實現(xiàn) ,就一直想找這個方法,但沒有點出這個方法來,直到在源碼中看到一個 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) 結(jié)果的反集,實現(xiàn)去除效果。

(2) .? 在微信端要求在一個輸入框中實現(xiàn)多種類型數(shù)據(jù)查詢??奢斎搿靶彰㈨椖棵Q、工作任務(wù)、工作類型” 中的任意一種,并作相應(yīng)條件過濾。

這種只給一個參數(shù)卻可能代表多種類型數(shù)據(jù)的實現(xiàn) 如下:

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. 最終實現(xiàn):

@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) {Page<WorkWeight> page = workWeightRepository.findAll(new Specification<WorkWeight>() {@Overridepublic Predicate toPredicate(Root<WorkWeight> root, CriteriaQuery<?> query, CriteriaBuilder cb) {List<Predicate> list = Lists.newArrayList();//構(gòu)造條件list.add(cb.equal(root.get("delFlag"), "0"));// 參數(shù) search 可代表姓名、項目名稱、工作任務(wù)、工作類型中的任意一種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);}// 去掉當(dāng)前領(lǐng)導(dǎo)自己填報的但不由自己審批的數(shù)據(jù)。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;}

?

總結(jié)

以上是生活随笔為你收集整理的jpa : criteria 作排除过滤、条件中除去查出的部分数据、JPA 一个参数可查询多个字段的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。