現在基本每一個項目都有用到分頁,SSM也是當前企業用到的比較頻繁的框架,這里我就總結一下基於SSM的分頁:
一、首先我們要准備一個分頁的工具類
- /**
- * 分頁
- */
- public class Page implements Serializable {
- private static final long serialVersionUID = -3198048449643774660L;
- private int pageNow = 1; // 當前頁數
- private int pageSize = 4; // 每頁顯示記錄的條數
- private int totalCount; // 總的記錄條數
- private int totalPageCount; // 總的頁數
- @SuppressWarnings("unused")
- private int startPos; // 開始位置,從0開始
- @SuppressWarnings("unused")
- private boolean hasFirst;// 是否有首頁
- @SuppressWarnings("unused")
- private boolean hasPre;// 是否有前一頁
- @SuppressWarnings("unused")
- private boolean hasNext;// 是否有下一頁
- @SuppressWarnings("unused")
- private boolean hasLast;// 是否有最后一頁
- /**
- * 通過構造函數 傳入 總記錄數 和 當前頁
- * @param totalCount
- * @param pageNow
- */
- public Page(int totalCount, int pageNow) {
- this.totalCount = totalCount;
- this.pageNow = pageNow;
- }
- /**
- * 取得總頁數,總頁數=總記錄數/總頁數
- * @return
- */
- public int getTotalPageCount() {
- totalPageCount = getTotalCount() / getPageSize();
- return (totalCount % pageSize == 0) ? totalPageCount
- : totalPageCount + 1;
- }
- public void setTotalPageCount(int totalPageCount) {
- this.totalPageCount = totalPageCount;
- }
- public int getPageNow() {
- return pageNow;
- }
- public void setPageNow(int pageNow) {
- this.pageNow = pageNow;
- }
- public int getPageSize() {
- return pageSize;
- }
- public void setPageSize(int pageSize) {
- this.pageSize = pageSize;
- }
- public int getTotalCount() {
- return totalCount;
- }
- public void setTotalCount(int totalCount) {
- this.totalCount = totalCount;
- }
- /**
- * 取得選擇記錄的初始位置
- * @return
- */
- public int getStartPos() {
- return (pageNow - 1) * pageSize;
- }
- public void setStartPos(int startPos) {
- this.startPos = startPos;
- }
- /**
- * 是否是第一頁
- * @return
- */
- public boolean isHasFirst() {
- return (pageNow == 1) ? false : true;
- }
- public void setHasFirst(boolean hasFirst) {
- this.hasFirst = hasFirst;
- }
- /**
- * 是否有首頁
- * @return
- */
- public boolean isHasPre() {
- // 如果有首頁就有前一頁,因為有首頁就不是第一頁
- return isHasFirst() ? true : false;
- }
- public void setHasPre(boolean hasPre) {
- this.hasPre = hasPre;
- }
- /**
- * 是否有下一頁
- * @return
- */
- public boolean isHasNext() {
- // 如果有尾頁就有下一頁,因為有尾頁表明不是最后一頁
- return isHasLast() ? true : false;
- }
- public void setHasNext(boolean hasNext) {
- this.hasNext = hasNext;
- }
- /**
- * 是否有尾頁
- * @return
- */
- public boolean isHasLast() {
- // 如果不是最后一頁就有尾頁
- return (pageNow == getTotalCount()) ? false : true;
- }
- public void setHasLast(boolean hasLast) {
- this.hasLast = hasLast;
- }
- }
二、編寫mapper.xml的SQL語句
- <!-- 分頁SQL語句 -->
- <select id="selectProductsByPage" resultMap="返回值類型">
- select
- *
- from 表名 WHERE user_id = #{userId,jdbcType=INTEGER} limit #{startPos},#{pageSize}
- </select>
- <!-- 取得記錄的總數 -->
- <select id="getProductsCount" resultType="long">
- SELECT COUNT(*) FROM 表名 WHERE user_id = #{userId,jdbcType=INTEGER}
- </select>
三、DAO層編寫對應的方法
- **
- * 使用注解方式傳入多個參數,用戶產品分頁,通過登錄用戶ID查詢
- * @param page
- * @param userId
- * @return startPos},#{pageSize}
- */
- public List<Products> selectProductsByPage(@Param(value="startPos") Integer startPos,@Param(value="pageSize") Integer pageSize,@Param(value="userId") Integer userId);
- /**
- * 取得產品數量信息,通過登錄用戶ID查詢
- * @param userId
- * @return
- */
- public long getProductsCount(@Param(value="userId") Integer userId);
四、service接口
- /**
- * 分頁顯示商品
- * @param request
- * @param model
- * @param loginUserId
- */
- void showProductsByPage(HttpServletRequest request,Model model,int loginUserId);
五、service實現類
- @Override
- public void showProductsByPage(HttpServletRequest request, Model model,int loginUserId) {
- String pageNow = request.getParameter("pageNow");
- Page page = null;
- List<ProductWithBLOBs> products = new ArrayList<ProductWithBLOBs>();
- int totalCount = (int) productDao.getProductsCount(loginUserId);
- if (pageNow != null) {
- page = new Page(totalCount, Integer.parseInt(pageNow));
- allProducts = this.productDao.selectProductsByPage(page.getStartPos(), page.getPageSize(), loginUserId);
- } else {
- page = new Page(totalCount, 1);
- allProducts = this.productDao.selectProductsByPage(page.getStartPos(), page.getPageSize(), loginUserId);
- }
- model.addAttribute("products", products);
- model.addAttribute("page", page);
- }
六、controller層
- /**
- * 初始化 “我的產品”列表 JSP頁面,具有分頁功能
- *
- * @param request
- * @param model
- * @return
- */
- @RequestMapping(value = "映射路徑", method = RequestMethod.GET)
- public String showMyProduct(HttpServletRequest request, Model model) {
- // 取得SESSION中的loginUser
- User loginUser = (User) request.getSession().getAttribute("loginUser");
- // 判斷SESSION是否失效
- if (loginUser == null || "".equals(loginUser)) {
- return "redirect:/";
- }
- int loginUserId = loginUser.getUserId();
- //此處的productService是注入的IProductService接口的對象
- this.productService.showProductsByPage(request, model, loginUserId);
- return "跳轉到的JSP路徑";
- }