使用Java封裝的分頁工具類

1、分頁的插件也有很多,比如PageHelper,這種後端分頁框架,將數據都查詢出來,設置一下起始頁,每頁顯示的數據就行了,操作起來十分方便。還有前端分頁插件,DisplayTag,將數據查詢出來以後,用前端分頁插件展示數據,設置一下起始頁,每頁顯示的數據就行了,做課設、畢設再爽不過了。還有很多其他分頁插件,都是大神封裝好的,既然不會造輪子,就先學會熟練使用輪子吧。

開源屆有一句經典的話,不要重複發明輪子。意思就是有現成的成熟實現就用它,不要自己從頭實現一遍。
所以,相反的重新實現已有的模塊(爲了鍛鍊技術,或者得到更好的性能)就叫重複發明輪子,造輪子。

2、分頁插件,很多很多,但是有的時候,項目比較急,或者這些分頁插件不是很適合你的項目,這個適合最好使用一個Java封裝的分頁工具類,快速實現你分頁的效果。

 1 package com.bie.utils;
 2 
 3 import java.util.List;
 4 
 5 /**
 6  * 使用泛型可以傳入任何類型的實體類
 7  *
 8  * @ProjectName: nationalpolicy
 9  * @Package: com.bie.utils
10  * @ClassName: PageBean
11  * @Author: biehl
12  * @Description: 使用泛型可以傳入任何類型的實體類
13  * @Date: 2020/2/28 18:57
14  * @Version: 1.0
15  */
16 public class PageBean<T> {
17 
18 
19     private List<T> lists;// 存放需要顯示的實體類數據
20     private Integer pageNo = 1;// 當前頁碼數(默認給1),需要傳參
21     private Integer pageSize; // 每頁顯示的行數,需要傳參
22     // this.totalPage = rows % pageSize == 0 ? rows / pageSize : (rows / pageSize + 1);
23     private Integer totalPage;// 總頁數,是根據總行數和每頁顯示的行數計算出來的結果
24     private Integer rows;// 總行數,總行數是查詢出來的數據表總記錄數
25 
26     // 對私有屬性的封裝
27     // 不需要對外提供totalPage總頁數的set設值方法,因爲totalPage是根據總行數和每頁顯示的行數求出來的
28     public List<T> getLists() {
29         return lists;
30     }
31 
32     public void setLists(List<T> lists) {
33         this.lists = lists;
34     }
35 
36     public Integer getPageNo() {
37         return pageNo;
38     }
39 
40     public Integer getPageSize() {
41         return pageSize;
42     }
43 
44     public void setPageSize(Integer pageSize) {
45         this.pageSize = pageSize;
46     }
47 
48     public Integer getTotalPage() {
49         return totalPage;
50     }
51 
52     public Integer getRows() {
53         return rows;
54     }
55 
56     /**
57      * 設置總行數據並求出總頁數
58      *
59      * @param rows 此參數是總行數
60      */
61     public void setRows(Integer rows) {
62         this.rows = rows;
63         //頁數根據傳入的總行數以及每頁顯示的行數,求出總頁數
64         this.totalPage = rows % pageSize == 0 ? rows / pageSize : (rows / pageSize + 1);
65     }
66 
67     /**
68      * 設置頁碼
69      *
70      * @param pageNo 當前頁數
71      */
72     public void setPageNo(Integer pageNo) {
73         //如果傳入的頁碼爲空或者小於0  就默認給1
74         if (null == pageNo || pageNo < 0) {
75             this.pageNo = 1;
76             //如果當前頁碼數大於總頁碼數,就讓當前頁碼數等於最大頁碼數
77         } else if (pageNo > this.totalPage && this.totalPage > 0) {
78             this.pageNo = this.totalPage;
79             //都符合條件就讓當前頁碼數等於傳入的頁碼數
80         } else {
81             this.pageNo = pageNo;
82         }
83     }
84 
85 }

3、既然分頁工具類已經封裝好了,那麼如何調用該工具類呢,如下所示:

由於設計到業務,所以用xxx代替了,哈哈哈,湊活看吧。

  1 package com.bie.controller;
  2 
  3 import com.bie.po.RxxxPxxxxx;
  4 import com.bie.service.RxxxPxxxxxService;
  5 import com.bie.service.RxxxPxxxxxThemeService;
  6 import com.bie.utils.PageBean;
  7 import org.springframework.beans.factory.annotation.Autowired;
  8 import org.springframework.stereotype.Controller;
  9 import org.springframework.web.bind.annotation.RequestMapping;
 10 import org.springframework.web.bind.annotation.RequestMethod;
 11 import org.springframework.web.bind.annotation.RequestParam;
 12 import org.springframework.web.bind.annotation.ResponseBody;
 13 
 14 import java.util.List;
 15 
 16 /**
 17  * @ProjectName: nxxxxxpxxxxxx
 18  * @Package: com.bie.controller
 19  * @ClassName: RxxxPxxxxxController
 20  * @Author: biehl
 21  * @Description: ${description}
 22  * @Date: 2020/2/28 19:42
 23  * @Version: 1.0
 24  */
 25 @Controller
 26 @RequestMapping(value = "/xxxxxx")
 27 public class RxxxPxxxxxController {
 28 
 29     @Autowired
 30     private RxxxPxxxxxService rxxxPxxxxxService;
 31 
 32     @Autowired
 33     private RxxxPxxxxxThemeService rxxxPxxxxxThemeService;
 34 
 35 
 36     /**
 37      * @param aaa
 38      * @param bbb
 39      * @param ccc
 40      * @param ddd
 41      * @param current      當前頁,默認是第一頁,從1開始
 42      * @param size         每頁多少,默認是每頁20條數據
 43      * @return
 44      */
 45     @RequestMapping(value = "/xxxxxxxxx/xxxxx", method = RequestMethod.GET)
 46     @ResponseBody
 47     public List<RxxxPxxxxx> selectRxxxPxxxxxPageBean(@RequestParam(value = "aaa", required = false) String aaa, @RequestParam(value = "bbb", required = false) String bbb, @RequestParam(value = "ccc", required = false) String ccc, @RequestParam(value = "ddd", required = false) String ddd, @RequestParam(value = "current", defaultValue = "1") int current, @RequestParam(value = "size", defaultValue = "20") int size) {
 48         // 得到數據表中的行數
 49         int count = rxxxPxxxxxService.selectRxxxPxxxxxPageBeanCount();
 50         // 創建工具類對象
 51         PageBean<RxxxPxxxxx> pager = new PageBean<>();
 52         // 每頁顯示的行數
 53         pager.setPageSize(size);
 54         // 設置總行數
 55         pager.setRows(count);
 56         // 設置當前頁數
 57         pager.setPageNo(current);
 58         // 計算出總頁數
 59         int totalPage = count % size == 0 ? count / size : (count / size + 1);
 60         // mysql獲取分頁第一個參數 (pager.getPageNo() - 1) * pager.getPageSize();
 61         // 獲取分頁第一個參數
 62         // Limit接受一個或兩個數字參數。參數必須是一個整數常量。如果給定兩個參數,
 63         // 第一個參數指定第一個返回記錄行的偏移量,第二個參數指定返回記錄行的最大數目。
 64         // 初始記錄行的偏移量是 0(而不是 1)。
 65         int first = (pager.getPageNo() - 1) * pager.getPageSize();
 66         //調用service層將分頁的兩個參數傳遞過去
 67         List<RxxxPxxxxx> rxxxPxxxxxs = rxxxPxxxxxService.selectRxxxPxxxxxPageBean(aaa, bbb, ccc, ddd, first, pager.getPageSize());
 68 
 69 
 70         // 將得到的集合對象放到PagerBean類裏,這裏面主要看你需要返回什麼格式的數據,可以根據需要返回的格式進行封裝即可
 71         pager.setLists(rxxxPxxxxxs);
 72         List<RxxxPxxxxx> lists = pager.getLists();
 73         return lists;
 74 
 75         // 如果是需要其他格式的返回類型,在下面可以封裝返回的邏輯或者在業務層封裝返回的邏輯
 76         // 封裝返回結果,如果返回的是下面格式的數據,返回類型換成NxxxxxxxPxxxxxxxResult即可。
 77 //        List<RxxxPxxxxx> resultLists = new ArrayList<>();
 78 //        if (rxxxPxxxxxs != null && rxxxPxxxxxs.size() > 0 && !rxxxPxxxxxs.isEmpty()) {
 79 //            for (RxxxPxxxxx rxxxPxxxxx : rxxxPxxxxxs) {
 80 //                RxxxPxxxxx rxxxPxxxxx1 = new RxxxPxxxxx();
 81 //                // 獲取到policyId
 82 //                int policyId = rxxxPxxxxx.getId();
 83 //                // 封裝主題信息
 84 //                List<RxxxPxxxxxTheme> rxxxPxxxxxThemes = rxxxPxxxxxThemeService.selectRxxxPxxxxxThemeByPolicyId(policyId);
 85 //                if (rxxxPxxxxxThemes != null && rxxxPxxxxxThemes.size() > 0 && !rxxxPxxxxxThemes.isEmpty()) {
 86 //                    int[] themeIds = new int[rxxxPxxxxxThemes.size()];
 87 //                    for (int i = 0; i < rxxxPxxxxxThemes.size(); i++) {
 88 //                        int themeId = rxxxPxxxxxThemes.get(i).getThemeId();
 89 //                        themeIds[i] = themeId;
 90 //                    }
 91 //                    rxxxPxxxxx1.setThemeIds(themeIds);
 92 //                }
 93 //
 94 //                // 封裝themeIds
 95 //                rxxxPxxxxx1.setId(rxxxPxxxxx.getId());
 96 //                rxxxPxxxxx1.setAaa(rxxxPxxxxx.getAaa());
 97 //                rxxxPxxxxx1.setBbb(rxxxPxxxxx.getBbb());
 98 //                rxxxPxxxxx1.setCcc(rxxxPxxxxx.getCcc());
 99 //                rxxxPxxxxx1.setDdd(rxxxPxxxxx.getDdd());
100 //                rxxxPxxxxx1.setEee(rxxxPxxxxx.getEee());
101 //                rxxxPxxxxx1.setFff(rxxxPxxxxx.getFff());
102 //                rxxxPxxxxx1.setGgg(rxxxPxxxxx.getGgg());
103 //                rxxxPxxxxx1.setIii(rxxxPxxxxx.getIii());
104 //
105 //                resultLists.add(rxxxPxxxxx1);
106 //            }
107 //        }
108 //
109 //        RxxxPxxxxxResult rxxxPxxxxxResult = new RxxxPxxxxxResult();
110 //        rxxxPxxxxxResult.setRecords(resultLists);
111 //        rxxxPxxxxxResult.setTotal(count);
112 //        rxxxPxxxxxResult.setSize(size);
113 //        rxxxPxxxxxResult.setCurrent(current);
114 //        rxxxPxxxxxResult.setOrders(new int[0]);
115 //        rxxxPxxxxxResult.setSearchCount(true);
116 //        rxxxPxxxxxResult.setPages(totalPage);
117 //
118 //        NxxxxxxxPxxxxxxxResult nationalPolicyResult = new NxxxxxxxPxxxxxxxResult();
119 //        NxxxxxxxPxxxxxxxResult result = new NxxxxxxxPxxxxxxxResult();
120 //        if (resultLists != null && resultLists.size() > 0 && !resultLists.isEmpty()) {
121 //            result = nationalPolicyResult.success(rxxxPxxxxxResult);
122 //        } else {
123 //            result = nationalPolicyResult.build(1, "fail");
124 //        }
125 //        return result;
126     }
127 }

4、既然分頁工具類也封裝好了,怎麼調用也寫好了,那麼mysql怎麼寫的呢,這裏使用的mybatis。

由於設計到業務,這裏面只留了大概的架子,基本可以看得懂,就不再敘述了。

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
 3         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 4 <mapper namespace="com.bie.mapper.RxxxPxxxxxMapper">
 5 
 6     <resultMap id="BaseResultMap" type="com.bie.po.RxxxPxxxxx">
 7         <result column="id" jdbcType="INTEGER" property="id"/>
 8         <result column="aaa" jdbcType="VARCHAR" property="aaa"/>
 9         <result column="bbb" jdbcType="VARCHAR" property="bbb"/>
10         <result column="ccc" jdbcType="VARCHAR" property="ccc"/>
11         <result column="ddd" jdbcType="VARCHAR" property="ddd"/>
12     </resultMap>
13 
14     <sql id="sql_where">
15         <where>
16             <if test="aaa != null and aaa != '' ">
17                 a.aaa = #{aaa}
18             </if>
19             <if test="bbb != null and bbb !='' ">
20                 and
21                     a.id = b.policy_id
22                 and
23                     b.bbb = #{bbb}
24             </if>
25             <if test="ccc != null and ccc !='' ">
26                 and a.ccc = #{ccc}
27             </if>
28             <if test="ddd != null and ddd !='' ">
29                 and a.ddd LIKE CONCAT('%',#{ddd},'%')
30             </if>
31         </where>
32 
33     </sql>
34 
35     <sql id="sql_from">
36         FROM rxxxpxxx a,rxxxpxxxxxtxxxxx b
37         <include refid="sql_where"></include>
38     </sql>
39 
40 
41     <select id="selectRxxxPxxxxxPageBean" resultMap="BaseResultMap">
42         <![CDATA[
43           SELECT *
44         ]]>
45         <include refid="sql_from"></include>
46         <![CDATA[
47           ORDER BY a.pxxxx_time DESC
48           limit #{current}, #{size}
49         ]]>
50     </select>
51 
52     <!-- 分頁查詢的count -->
53     <select id="selectRxxxPxxxxxPageBeanCount" resultType="int">
54         <![CDATA[
55                 SELECT COUNT(*) from rxxxpxxx
56         ]]>
57     </select>
58 
59 </mapper>

 

作者:別先生

博客園:https://www.cnblogs.com/biehongli/

如果您想及時得到個人撰寫文章以及著作的消息推送,可以掃描上方二維碼,關注個人公衆號哦。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章