91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JPA Specification常用查詢有哪些

發布時間:2021-11-18 16:46:06 來源:億速云 閱讀:197 作者:iii 欄目:開發技術

這篇文章主要講解了“JPA Specification常用查詢有哪些”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“JPA Specification常用查詢有哪些”吧!

    JPA Specification常用查詢+排序

    1.第一步:繼承父類

    public interface TblCarton2RCardLogRepository extends JpaRepository<TblCarton2RCardLog, String>,JpaSpecificationExecutor<TblCarton2RCardLog> {

    2.第二步

    tblCarton2RCardLogRepository.findAll(new Specification<TblCarton2RCardLog>() {
        @Override
        public  Predicate toPredicate(Root<TblCarton2RCardLog> root, CriteriaQuery<?> query,CriteriaBuilder cb) {
            List<Predicate> list = new ArrayList<Predicate>();
            list.add(cb.equal(root.get("cartonNo").as(String.class), cartonNo));//某普通字段
            list.add(cb.equal(root.get("id").get("rCard").as(String.class), rCard));//主鍵中某字段
            list.add(cb.like(root.get("mocode").as(String.class), "%" + mocode + "%"));//like
            list.add(cb.between(root.get("frozenDate").as(Long.class), frozenDateStart, frozenDateEnd));//between and
            list.add(cb.greaterThanOrEqualTo(root.get("id").get("rcard").as(String.class), rCardStart));//大于等于
            list.add(root.get("id").get("lotNo").as(String.class).in(lotNos));//in
            //ORDER BY packdate DESC,packtime DESC
            Predicate[] p = new Predicate[list.size()];
            query.where(cb.and(list.toArray(p)));
            query.orderBy(cb.desc(root.get("packDate")),cb.desc(root.get("packTime")));
            return query.getRestriction();
        }
    });

    JPA Specification復雜查詢+排序

    剛使用spring-data-jpa,遇到不少難題,網上查了很多資料,發現講jpa的不多,發個我剛做過的接口的過程吧。

    需求

    JPA Specification常用查詢有哪些

    看到圖了嗎?需要實現搜索以及各種字段的排序還要分頁,還有可能有選擇各種條件的下拉列表,是不是很變態?

    開始了

    一、dao

    需要先處理dao層,這里喜歡叫repository。做一個實體類的dao層接口,繼承JpaSpecificationExecutor,再寫一個查詢接口。

    JPA Specification常用查詢有哪些

    二、service

    JPA Specification常用查詢有哪些

    在這里主要處理的是查詢條件,我這里是搜索功能的模糊查詢,當然如果有更多的查詢也可以添加進這里。這里需要注意的是specification。

    三、排序

    需要先建一個輔助的實體類,屬性名我取和需要排序的實體類一樣的名字,但是注意屬性都是String類型的啊。后面細說,先上我建的輔助類。

    @Data
    public class DeptSort {
    private String id;//編碼
    private String name;//名稱
    private String highDeptName;//上級部門
    private String principal;//負責人
    private String deptType;//部門類型
    private String enable;//啟用
    }

    字段都是需要排序的字段,這是為了好區分,叫別的也可以。

    下面是controller層,排序功能的具體實現。

    public ResponseModel table(@RequestParam("search")String search,
    @RequestParam("pageNumber")Integer pageNumber,
    @RequestParam("pageSize")Integer pageSize,
    @RequestBody DeptSort deptSort){
    ResponseModel model = null;
    try {
    List<Sort.Order> orders = new ArrayList<Sort.Order>();
    if (StringUtils.isNotBlank(deptSort.getId())){
    orders.add(new Sort.Order(Sort.Direction.fromString(deptSort.getId()),"id"));
    }
    if (StringUtils.isNotBlank(deptSort.getName())){
    orders.add(new Sort.Order(Sort.Direction.fromString(deptSort.getName()),"name"));
    }
    if (StringUtils.isNotBlank(deptSort.getHighDeptName())){
    orders.add(new Sort.Order(Sort.Direction.fromString(deptSort.getHighDeptName()),"highDeptName"));
    }
    if (StringUtils.isNotBlank(deptSort.getPrincipal())){
    orders.add(new Sort.Order(Sort.Direction.fromString(deptSort.getPrincipal()),"principal"));
    }
    if (StringUtils.isNotBlank(deptSort.getDeptType())){
    orders.add(new Sort.Order(Sort.Direction.fromString(deptSort.getDeptType()),"deptType"));
    }
    if (StringUtils.isNotBlank(deptSort.getEnable())){
    orders.add(new Sort.Order(Sort.Direction.fromString(deptSort.getEnable()),"enable"));
    }
    //orders不能為空,所以如果為空設置按id排序[/code][code] if (orders.size() == 0){
    orders.add(new Sort.Order(Sort.Direction.ASC,"id"));
    }
    Sort sort = new Sort(orders);
    Pageable pageable = new PageRequest(pageNumber,pageSize,sort);
    Page<Businessdept> all = service.findAll(search, pageable);
    model = ResponseModel.getSuccessResponseModel().setData(all);
    }catch (Exception e){
    e.printStackTrace();
    model = ResponseModel.getFailedResponseModel();
    }
    return model;
    }

    需要的參數有搜索內容search,還有DeptSort輔助類。首先建立

    List<Sort.Order> orders = new ArrayList<Sort.Order>();

    集合,然后if判斷將參數加入集合。

    需要說明的是類似

    orders.add(new Sort.Order(Sort.Direction.fromString(deptSort.getEnable()),"enable"))

    語句,“enable”是需要查詢的Businessdept里的字段,不是輔助類的,當然這里我的輔助類和Businessdept類一致,但是不一樣的同學需要注意了。

    前端

    對于前端傳遞的參數有什么要求呢?

    JPA Specification常用查詢有哪些

    deptSort的各個屬性的參數只能限定兩種asc和desc,即升序和降序。上圖的功能需求只需要傳deptSort里的一個屬性就可以了,這里傳兩個參數演示一下。

    查詢成功的數據不展示了,給大家看一個后臺的SQL語句

    Hibernate: 
    /* select
    count(generatedAlias0) 
    from
    Businessdept as generatedAlias0 
    where
    (
    generatedAlias0.name like :param0 
    ) 
    and (
    generatedAlias0.deleteIs=1 
    ) */ select
    count(businessde0_.id) as col_0_0_ 
    from
    t_department businessde0_ 
    where
    (
    businessde0_.name like ?
    ) 
    and businessde0_.delete_is=1
    Hibernate: 
    /* select
    generatedAlias0 
    from
    Businessdept as generatedAlias0 
    where
    (
    generatedAlias0.name like :param0 
    ) 
    and (
    generatedAlias0.deleteIs=1 
    ) 
    order by
    generatedAlias0.deptType asc,
    generatedAlias0.enable desc */ select
    businessde0_.id as id1_3_,
    businessde0_.delete_is as delete_i2_3_,
    businessde0_.dept_type as dept_typ3_3_,
    businessde0_.enable as enable4_3_,
    businessde0_.high_dept_id as high_dep5_3_,
    businessde0_.high_dept_name as high_dep6_3_,
    businessde0_.name as name7_3_,
    businessde0_.principal as principa8_3_ 
    from
    t_department businessde0_ 
    where
    (
    businessde0_.name like ?
    ) 
    and businessde0_.delete_is=1 
    order by
    businessde0_.dept_type asc,
    businessde0_.enable desc limit ?

    可以看到條件查詢,升序、降序都有。

    感謝各位的閱讀,以上就是“JPA Specification常用查詢有哪些”的內容了,經過本文的學習后,相信大家對JPA Specification常用查詢有哪些這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    赞皇县| 自治县| 山丹县| 沙河市| 南丰县| 白河县| 临武县| 大安市| 隆安县| 抚松县| 安塞县| 滕州市| 林甸县| 城固县| 九江市| 永宁县| 安庆市| 满城县| 上蔡县| 富蕴县| 巴彦县| 蕉岭县| 正宁县| 怀来县| 泰顺县| 儋州市| 习水县| 渭南市| 云南省| 绵竹市| 长汀县| 平舆县| 苏尼特右旗| 安仁县| 临汾市| 察哈| 哈密市| 兴业县| 衡南县| 富蕴县| 汕头市|