• <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分頁

    常用方法

    總記錄數 :page.getTotalElements()  
    當前第幾頁:page.getNumber()  
    總頁數:page.getTotalPages()
    當前頁面的List:page.getContent()
    當前頁面的記錄數:page.getNumberOfElements()
    

    基本分頁單元

    public class Meta {
    	private int  page; //當前頁數
    	private int pages; //總頁數
    	private int perpage;//每頁個數
    	private long total	;//總記錄數
    	private String sort	;//排序
    	private String field;//排序屬性名
    }
    

    場景一

    1. Controller部分

    只傳遞數據內容tableData.getContent(),否則前臺分頁模版不能解析。tableData還包括分頁信息

    2. DAO部分

    sql為原生sql,pageable為分頁對象,map為查詢參數

    查詢參數


    紅線為模糊查詢

    3. 工具類

    其中orderBy和total方法為工具類

    4. 工具類源碼

    
    @Repository
    public class EntityManagerUtil {
    
        @PersistenceContext
        private EntityManager entityManager;
    
        public int updateSql(String sql, Object... objects) {
            Query query = entityManager.createNativeQuery(sql);
            for (int i = 0; i < objects.length; i++) {
                query.setParameter(i + 1, objects[i]);
            }
            return query.executeUpdate();
        }
    
        public List resultList(String sql, Object... objects) {
            Query query = entityManager.createNativeQuery(sql);
            query.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); // 設置返回值類型
            for (int i = 0; i < objects.length; i++) {
                query.setParameter(i + 1, objects[i]);
            }
            return query.getResultList();
        }
        public List<Map<String, Object>> resultList(String sql, Map<String, Object> params) {
            Query query = entityManager.createNativeQuery(sql);
            query.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); // 設置返回值類型
            for (String key : params.keySet()) {
                query.setParameter(key, params.get(key));
            }
            return query.getResultList();
        }
        public <T> List<T> resultList(String sql, Map<String, Object> params, Class<T> resultClass) {
            Query query = entityManager.createNativeQuery(sql, resultClass);
            for (String key : params.keySet()) {
                query.setParameter(key, params.get(key));
            }
            return query.getResultList();
        }
    
        public Map<String, Object> resultMap(String sql, Object... objects) {
            Query query = entityManager.createNativeQuery(sql);
            query.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); // 設置返回值類型
            for (int i = 0; i < objects.length; i++) {
                query.setParameter(i + 1, objects[i]);
            }
            return (Map<String, Object>) query.getSingleResult();
        }
    
        public Page resultPage(String sql, Pageable page, Object... objects) {
            sql = orderBy(sql, page.getSort());
            Query query = entityManager.createNativeQuery(sql);
            query.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); // 設置返回值類型
            for (int i = 0; i < objects.length; i++) {
                query.setParameter(i + 1, objects[i]);
            }
            query.setFirstResult(page.getOffset());
            query.setMaxResults(page.getPageSize());
            List list = query.getResultList();
            Long total = total(sql, objects).longValue();
            return new PageImpl(list, page, total);
        }
        public Page<Map<String, Object>> resultPage(String sql, Pageable page, Map<String, Object> params) {
            sql = orderBy(sql, page.getSort());
            Query query = entityManager.createNativeQuery(sql);
            query.unwrap(SQLQuery.class).setResultTransformer(Transformers.ALIAS_TO_ENTITY_MAP); // 設置返回值類型
            for (String key : params.keySet()) {
                query.setParameter(key, params.get(key));
            }
            query.setFirstResult(page.getOffset());
            query.setMaxResults(page.getPageSize());
            List<Map<String, Object>> list = query.getResultList();
            Long total = total(sql, params).longValue();
            return new PageImpl(list, page, total);
        }
    
        private String orderBy(String sql, Sort sort) {
            if (sort == null) return sql;
            Iterator<Sort.Order> orders = sort.iterator();
            if (!orders.hasNext()) return sql;
            StringBuilder orderBy = new StringBuilder(" order by ");
            boolean flag = false;
            while (orders.hasNext()) {
                if (flag) {
                    orderBy.append(",");
                } else {
                    flag = true;
                }
                Sort.Order order = orders.next();
                orderBy.append(order.getProperty());
                if (order.getDirection().isDescending()) {
                    orderBy.append(" ").append(Sort.Direction.DESC.toString());
                }
            }
            if (flag) {
                sql = orderBy.insert(0, sql).toString();
            }
            return sql;
        }
    
        private BigDecimal total(String sql, Object[] objects) {
            sql = "select count(1) from (" + sql + ")";
            Query query = entityManager.createNativeQuery(sql);
            for (int i = 0; i < objects.length; i++) {
                query.setParameter(i + 1, objects[i]);
            }
            return (BigDecimal) query.getSingleResult();
        }
        private BigDecimal total(String sql, Map<String, Object> params) {
            sql = "select count(1) from (" + sql + ")";
            Query query = entityManager.createNativeQuery(sql);
            for (String key : params.keySet()) {
                query.setParameter(key, params.get(key));
            }
            return (BigDecimal) query.getSingleResult();
        }
    }
    
    版權聲明:本文為haha_201510原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/haha_201510/article/details/88120024

    智能推薦

    spring data jpa中的page分頁

    SceneryComment實體類 UserComment實體類 Repository類 Service類(page一定要從0開始,默認是1,如果不減1的話,第一頁的數據就顯示不出來) Controller類 BaseResponse類 測試 說明:使用了springboot,在用Data注解時要用lombok...

    Spring Data JPA —— 分頁PageRequest、PageImpl

    項目中通過openid來查買家訂單主表,那么多的話就的考慮分頁顯示了 注意:在單元測試的時候、分頁是從第0也開始的~ 顯示時,有三個參數,前兩個必填,第幾頁,一頁多少個size,第三個參數默認可以不填。 但是發現這個方法已經過時了,通過查看它的源碼發現,新方法為靜態方法PageRequest of(page,size) 使用PageImpl進行分頁:...

    JPA 多表多條件分頁查詢

    業務場景:  主表:訂單表,與客戶表、產品表、物流表存在一對一關系,映射字段為id,現需要根據訂單編號、訂單日期、客戶名稱、客戶編號、產品名稱、產品編號、快遞單號查詢該筆訂單,需要支持模糊查詢和分頁。 Order實體類中的需要進行一對一關系映射: Dao中的需要繼承JpaRepository,JpaSpecificationExecuto兩個接口: Service中的寫法:  ...

    Spring Data JPA分頁與排序

    1、認識JPA的分頁接口和排序類 在項目的開發中,需要經常對數據表進行分頁和排序查詢。下面將介紹如何使用Spring Data JPA對數據進行分頁和排序。 1.1 分頁排序接口 PagingAndSortingRepository PagingAndSortingRepository 接口繼承自 CrudRepository 接口提供的分頁和排序方法。其關鍵代碼如下:  其方...

    spring data jpa實現分頁查詢功能

    spring data jpa實現分頁查詢功能 HTML代碼部分: Action類: Service代碼: dao層:...

    猜你喜歡

    spring boot 集成jpa 多種分頁查詢

    一、查詢分為兩種:     1、面向對象查詢       2、自定義查詢 1、面向對象查詢簡介       引入jar包 創建查詢dao層類  server層 返回參數  面向對象查詢完成。 二、自定查詢實現 利用EntityManager 實現自定義查詢組裝 數據庫查詢出來的數據,映射到...

    Spring Boot 整合 SpringData JPA與分頁

    Spring Boot 整合 SpringData JPA與分頁 在Spring Boot中使用JPA,需要引入如下依賴: 1、JpaRepository 拿項目中一個dao層舉例: 所有dao層都會繼承***JpaRepository<實體類,主鍵類型>***接口。 JpaRepository接口的繼承關系圖: 其中重要的就是CrudRepository和PagingAndSorti...

    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...

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