• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • JPA 原生多表查詢分頁

    標簽: jpa

    CONTRLLOE

        @GetMapping("findByCondition")
        public ResponseEntity findByCondition(@ModelAttribute PaymentEntity paymentEntity, @RequestParam int page, @RequestParam int size) {
            Page result = paymentFacade.findByCondition(paymentEntity, page, size);
            return ResponseEntity.ok(result);
        }

     

    IMP

    public interface PaymentFacade {
        Page findByCondition(PaymentEntity paymentEntity, int page, int size);
    
    }

     

     

    IMPL

     @Override
        public Page findByCondition(PaymentEntity paymentEntity, int page, int size) {
    
            StringBuilder sb = new StringBuilder();
            StringBuilder condition = new StringBuilder();
            StringBuilder sum = new StringBuilder();
            sb.append("select e.* from payment e left join state_machine s on e.id =s.machine_id where 1=1 ");
            sum.append("select count(1) from payment e left join state_machine s on e.id =s.machine_id where 1=1 ");
    
            if (paymentEntity.getStartDate() != null  ) {
                condition.append(" and e.start_date >= '"+ DateUtils.format(paymentEntity.getStartDate(),"yyyy-MM-dd")+"' ");
            }
            if (paymentEntity.getEndDate() != null  ) {
                condition.append(" and e.end_date <= '"+ DateUtils.format(paymentEntity.getEndDate(),"yyyy-MM-dd")+"' ");
            }
            if (StringUtils.isNotBlank(paymentEntity.getPaymentNo())) {
                condition.append(" and e.payment_no like '%" + paymentEntity.getPaymentNo() + "%'");
            }
            if (StringUtils.isNotBlank(paymentEntity.getState())) {
                condition.append(" and s.state = '" + paymentEntity.getState() + "'");
            }
            if (StringUtils.isNotBlank(paymentEntity.getCustomerId())) {
                condition.append(" and s.customer_id = '" + paymentEntity.getCustomerId() + "'");
            }
            if (StringUtils.isNotBlank(paymentEntity.getSupplyOrgId())) {
                condition.append(" and s.supply_org_id = '" + paymentEntity.getSupplyOrgId() + "'");
            }
    
    
            sum.append(condition);
            sb.append(condition).append(" order by id desc limit " + (page) * size + "," + size);
            int count = ((BigInteger) entityManager.createNativeQuery(sum.toString()).getSingleResult()).intValue();
            if (count < 1) {
                return null;
            }
            Query query = entityManager.createNativeQuery(sb.toString(), PaymentEntity.class);
            PageRequest pageRequest = PageRequest.of(page, size, Sort.by(Sort.Direction.DESC, "id"));
            List<PaymentEntity> list = query.getResultList();
            return new PageImpl<PaymentEntity>(list, pageRequest, count);
        }

     

     

    TEST

     

    版權聲明:本文為liuming690452074原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/liuming690452074/article/details/106766279

    智能推薦

    JPA 多表嵌套+nativeQuery + Page分頁

    先看需求   一共5個區域,分別對應5張表,作者表、文章列表、點贊記錄表、評論表、閱讀記錄表 sql 寫的有點水,有點渣。這里查詢兩次點贊記錄表,要查看當前登錄人是否點過贊 jpa 實現 調用, 這里使用多字段排序 這里的關鍵點 1、Page<> 里面要使用Map<String, Object> 否者查詢到的是結果集 2、如果不需要分頁的話或者不使page最為分頁...

    spring data jpa簡單crud操作以及多表關聯,分頁排序,復雜條件查詢

    分頁和多表關聯查詢有多種方式 @Query使用 單表查詢所有: 單表分頁查詢 多表分頁查詢 調試結果如下: 此時只能看到subject中的信息,如果我想看到與之關連的subject_auth中的信息。可以做一對一的配置 其結果如下: 查詢優化 上述都是select *查詢所有的操作。如果我只想查詢部分字段。。 注意:想當然的如果這樣寫 Caused by: java.sql.SQLExceptio...

    JPA多表多條件查詢解決思路

    JPA單表多條件查詢 可以在Service層使用Predicate實現 ServiceImpl實現類,查詢條件可以自定義 JPA多表多條件查詢 如果針對多表多條件查詢,可以使用原生SQL實現 使用EntityManager定義多條件查詢 在服務實現類中注入EntityManager,自定義HQL查詢數據,并且可以通過多表數據組裝對象 JPA多表數據組織實體對象 需要在JPQL中使用構造方法創建對象...

    【Spring Date JPA】七、多表查詢

    文章目錄 1. 回顧多表關系 2. 一對多關系 2.1 主表 Customer 2.2 從表 LinkMan 2.3 測試保存操作 2.4 放棄主表的外鍵維護權 2.5 級聯操作 1. 回顧多表關系 數據庫表中有一對多、多對多的關系。一對多關系中一的一方作為主表需要使用外鍵、多對多關系中需要借助中間表,中間表中至少由兩個字段組成 ,這兩個字段做為外鍵指向兩張表的主鍵,又組成了聯合主鍵。 分析步驟 ...

    JPA多表關聯動態查詢

    jpa多表關聯動態查詢(自定義sql語句) 項目需求,查詢需求數據需要多表鏈接——>根據多種條件篩選查詢到的數據,在網上查了很多資料最終選擇這個字符串拼接查詢 類似如此動態查詢 以下是本人項目中使用總結: 實體類 注解解釋 實體類中相關注解解釋: @Entity: 對實體注釋。任何Hibernate映射對象都要有這個注釋 @Table: 聲明此對象映射到數據庫的數據表...

    猜你喜歡

    SpringBoot-JPA進行多表連接查詢

    通過JPA進行簡單的(內)連接查詢 1.準備 1.1開發工具Intellij Idea 1.2數據庫mysql 1.3新建Spring Initializr項目,勾選web,mysql,rest,jpa依賴 2.開始 2.1項目結構 2.2pom.xml內容 2.3Author類內容; 2.4Book類內容: 2.5BookRepository接口內容: 2.6AuthorRepository接口...

    Spring Data JPA QueryDSL 多表聯合查詢

    很多時候表與表之間是有關系的,比如一對一 一對多等等,也有的沒有建立起 關系只是存了主鍵id 。 此時多表查詢可以使用left join 代碼如下: 執行的sql: 然后看下集合中的值:  ...

    Unity_Shader高級篇_13.1_Unity Shader入門精要

    13.4 再談邊緣檢測 在12.3中,我們曾使用Sobel算子對屏幕圖像進行邊緣測試,實現描邊的效果。但是,這種直接利用顏色信息進行邊緣檢測的方法會產生很對我們不希望得到的邊緣線,如圖13.8所示。 可以看出,物體的紋理、陰影等位置也被描上黑邊,而這往往不是我們希望看到的。在本節中,我們將學習如何在深度和法線上進行邊緣檢測,這些圖像不會受紋理和光照的影響,而僅僅保存了當前渲染物體的模型信息,通過這...

    Seata AT 模式 原理詳解

    目錄 前提 整體機制 寫隔離 讀隔離 工作機制 一階段 二階段-回滾 二階段-提交 附錄 回滾日志表 前提 基于支持本地 ACID 事務的關系型數據庫。 Java 應用,通過 JDBC 訪問數據庫。 整體機制 兩階段提交協議的演變: 一階段:業務數據和回滾日志記錄在同一個本地事務中提交,釋放本地鎖和連接資源。 二階段: 提交異步化,非常快速地完成。 回滾通過一階段的回滾日志進行反向補償。 寫隔離 ...

    Python爬蟲 | 滑動驗證碼**

    極驗驗證碼:需要手動拼合滑塊來完成的驗證,相對圖形驗證碼識別難度上升了幾個等級。下面用程序識別并通過極驗驗證碼的驗證,其中有分析識別思路、識別缺口位置、生成滑塊拖動、模擬實現滑塊拼合通過驗證等步驟。需要用到Chrome 瀏覽器,并配置 ChromeDriver ,要用到的 Python 庫是 Selenium。 1、 對極驗驗證碼了解   極驗驗證碼官網:http://www.geetest.co...

    精品国产乱码久久久久久蜜桃不卡