條件分頁 代替離線查詢

来源:http://www.cnblogs.com/javaxiaoxin/archive/2017/08/14/7361491.html
-Advertisement-
Play Games

import javax.persistence.criteria.CriteriaBuilder; import javax.persistence.criteria.CriteriaQuery; import javax.persistence.criteria.Join; import jav... ...


import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.Join;
import javax.persistence.criteria.Predicate;
import javax.persistence.criteria.Root;

import net.sf.json.JSONObject;
import net.sf.json.JsonConfig;

    @Action("courierAction_pageQuery")
    public String pageQuery() throws Exception {
        Pageable pageable = new PageRequest(page-1, rows);
        final String courierNum = model.getCourierNum();
        final String company = model.getCompany();
        final String type = model.getType();
        final Standard standard = model.getStandard();
        
        //相當於DetchedCriteria對象.通過specification封裝過濾條件
        Specification<Courier> specification = new Specification<Courier>() {
            
            @Override
            public Predicate toPredicate(Root<Courier> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
                //root:根實體   query:排序,封裝條件  CriteriaBuilder:Predicate斷言工廠,產生Predicate對象
                //添加過濾條件:添加快遞員編號條件
                //p1:實體中屬性  p2:條件
                List<Predicate> list = new ArrayList<>();
                if(StringUtils.isNotBlank(courierNum)){
                    Predicate p1 = cb.equal(root.get("courierNum").as(String.class), courierNum);
                    list.add(p1);
                }
                if(StringUtils.isNotBlank(company)){
                    Predicate p2 = cb.equal(root.get("company").as(String.class), company);
                    list.add(p2);
                }
                if(StringUtils.isNotBlank(type)){
                    Predicate p3 = cb.equal(root.get("type").as(String.class), type);
                    list.add(p3);
                }
                //sql : select * from T_COURIER t inner join t_Standard s on t.c_standard_id = s.c_id
//                where s.c_name = '標準一(100公斤)';
                //JPQL: from Courier c inner join c.standard s where s.name = "";
                if(standard!=null && StringUtils.isNotBlank(standard.getName())){
                    //返回關聯對象
                    Join<Object, Object> join = root.join("standard");
                    Predicate p4 = cb.equal(join.get("name").as(String.class), standard.getName());
                    list.add(p4);
                }
                if(list.size()==0){
                    return null;
                }
                //list集合轉為數組
                Predicate[] restrictions = new Predicate[list.size()];
                restrictions = list.toArray(restrictions);
                return cb.and(restrictions);
            }
        };
        Page<Courier> page = courierService.findAll(specification, pageable);
        
        Map<String, Object> map = new HashMap<>();
        map.put("total", page.getTotalElements());
        map.put("rows", page.getContent());
        
        //將fixedares集合屬性排除掉,不轉json
        JsonConfig jsonConfig = new JsonConfig();
        jsonConfig.setExcludes(new String[]{"fixedAreas"});
        
        String json = JSONObject.fromObject(map, jsonConfig).toString();
        
        ServletActionContext.getResponse().setContentType("text/json;charset=utf-8");
        ServletActionContext.getResponse().getWriter().write(json);
        return NONE;
    }




Dao:
public interface CourierDao extends JpaRepository<Courier, Integer>, JpaSpecificationExecutor<Courier> {

}

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • php 基於socket的基本通信 1、前言 Socket是應用層與TCP/IP協議族通信的中間軟體抽象層,它是一組介面。在設計模式中,Socket其實就是一個門面模式,它把複雜的TCP/IP協議族隱藏在Socket介面後面,對用戶來說,一組簡單的介面就是全部,讓Socket去組織數據,以符合指定的 ...
  • 概覽 Dubbo是阿裡巴巴SOA服務化治理方案的核心框架,每天為2,000+個服務提供3,000,000,000+次訪問量支持,並被廣泛應用於阿裡巴巴集團的各成員站點(Alibaba.com、1688.com、Aliexpress.com、阿裡雲、阿裡學院等等),自開源後,已有不少非阿裡系公司在使用 ...
  • 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 import socket 5 #創建一個socket對象 6 sk1 = socket.socket() 7 #綁定ip和埠 8 sk1.bind(('127.0.0.1', 8001)) ...
  • 在提到高性能伺服器編程的時候肯定有聽過reactor模式,如果只是簡單的寫一個伺服器和客戶端建立連接的程式來熟悉一下使用socket函數編程,一般這種情況都是同步方式實現的,伺服器阻塞等待客戶端的連接,期間伺服器不能做其他事情。是不是有更好的實現方式,讓伺服器可以提高效率,這就是反應堆模式要做的。 ...
  • 1.jQuery 語法 Tips: 通過 CDN(內容分髮網絡)引用JQuery:(link的引用最好放在script的引用之前) 獲取CDN網址:http://cdn.code.baidu.com/ jQuery 語法是為 HTML 元素的選取編製的,可以對元素執行某些操作。 基礎語法是:$(se ...
  • 在實際開發開發中我們會用到各種瀏覽器、HTML、JS等提供的原生的組件/介面,但是這樣並不一定滿足我們的要求,所以我們需要自己寫一些我們需要的組件。 平常我們會經常用`select` 標簽做下拉選項,不過這個只能選擇不能手動輸入,當然網上也有很強大的select2插件,如果只要輸入和選擇兩個功能的話 ...
  • 原文鏈接 http://www.cnblogs.com/ouyangping/p/6439939.html jQuery對象與DOM對象是不一樣的 通過一個簡單的例子,簡單區分下jQuery對象與DOM對象: 通過一個簡單的例子,簡單區分下jQuery對象與DOM對象: <p id=”imooc”> ...
  • 關於Egret模塊化開發 vip系統 目錄 關於Egret模塊化開發 vip系統... 1 前言... 1 一,搭建界面... 1 二,建立數據模型... 3 1)數據模型的搭建: 3 2)數據的建立... 4 3)數據的增刪改查... 7 三.做交互, 7 結束... 8 前言 做游戲就是做數據, ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...