喃都不說了,貼代碼,意思都在代碼里面了 Page.java //分頁類。定義分頁字段信息,供前台頁面使用 package com.core.common; import java.util.List; public class Page<T> { private int pageIndex;//當前頁 private int pageSize;//每頁條數 private int totalCount;//符合查詢條件總條數 private List<T> pageData;//符合查詢條件的列表_注意這里是泛型 private int startRow;//數據庫起始記錄指針 private int totalPage;//總頁數 public Page(int pageIndex, int pageSize){ this.pageIndex = pageIndex <= 0 ? 1 : pageIndex; this.pageSize = pageSize <= 0 ? 10 : pageSize; } public int getPageIndex() { return pageIndex; } public void setPageIndex(int pageIndex) { this.pageIndex = pageIndex; } 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; } public List<T> getPageData() { return pageData; } public void setPageData(List<T> pageData) { this.pageData = pageData; } public int getStartRow() { startRow = (pageIndex-1) * pageSize; return startRow; } public int getTotalPage() { totalPage = (int) Math.ceil(totalCount/Double.parseDouble(String.valueOf(pageSize))); return totalPage; } } //分頁過程————controller @RequestMapping(value = {"/order/list"}) //page當前頁 //model 查詢參數實體 public ModelAndView get_orders(Integer page,B2cOrderModel model){ ModelAndView mv = new ModelAndView(); mv.setViewName("/order_list"); //傳遞參數分別是:當前頁,每頁條數,查詢參數 Page<B2cOrderModel> pageData = orderService.getOrders(getPageIndex(page), ConstantUtil.Page.PAGE_NUM, model); mv.addObject("pageData", pageData.getPageData());//列表 mv.addObject("totalCount", pageData.getTotalCount());//總條數 mv.addObject("totalPage", pageData.getTotalPage());//總頁數 mv.addObject("currentPage", page);//當前頁 mv.addObject("pageNav", PageNavUtil.getBluePageNavHtml(getPageIndex(page), ConstantUtil.Page.PAGE_NUM, pageData.getTotalCount(), ConstantUtil.Page.NAV_NUM));//分頁導航 return mv; } //分頁過程————service @Override public Page<B2cOrderModel> getOrders(Integer pageIndex, int pageNum, B2cOrderModel model) { Page<B2cOrderModel> page = new Page<B2cOrderModel>(pageIndex, pageNum); //創建查詢條件對象 CriteriaCondition condition = new CriteriaCondition();//封裝查詢條件的類 condition.setDistinct(false); condition.setStart(page.getStartRow()); condition.setPageSize(pageNum); condition.setOrderByClause(" CREATED_DT DESC"); condition.put("postName", model.getPostName()); condition.put("postContactPhone", model.getPostContactPhone()); //查詢符合條件的總條數和列表 int totalCount = b2cOrderSourceDao.countByCondition(condition.getCondition()); List<B2cOrderModel> pageData = b2cOrderSourceDao.selectByCondition(condition); //設置分頁信息 page.setTotalCount(totalCount); page.setPageData(pageData); //返回分頁信息對象 return page; } //分頁過程————mybatis語句 查詢條數 <select id="countByCondition" parameterType="java.util.Map" resultType="java.lang.Integer"> select count(*) from 表 <include refid="Base_Where_B2cOrder" /> </select> 查詢列表 <select id="selectByCondition" resultMap="Base_Result_B2cOrder" parameterType="com.core.common.CriteriaCondition"> select <if test="distinct"> distinct </if> <include refid="Base_Column_B2cOrder" /> from b2c_order <include refid="Base_Where_B2cOrder" /> <if test=" null!= orderByClause"> order by #{orderByClause} </if> <if test="null!=start and null!=pageSize"> limit #{start}, #{pageSize} </if> </select> //結果映射列 <resultMap id="Base_Result_B2cOrder" type="com.source.model.B2cOrderModel"> <result property="model參數名" column="對應的數據庫字段"/> </resultMap> //字段列 <sql id="Base_Column_B2cOrder"> 需要查詢出的數據庫字段 </sql> //查詢條件 <sql id="Base_Where_B2cOrder"> <trim prefix="where" prefixOverrides="and|or"> <if test="null!=condition"> <if test="null!=condition.參數字段名 and ''!=condition.參數字段名"> and 數據庫字段名= #{condition.參數字段名} </if> </if> </trim> </sql> //分頁過程---查詢條件封裝對象 CriteriaCondition import java.util.HashMap; /** * 公用條件查詢類 */ public class CriteriaCondition { /** * 存放條件查詢值 */ Map<String, Object> condition; /** * 是否相異 */ boolean distinct; /** * 排序字段 */ String orderByClause; /** * 分頁起始頁 */ Integer start; /** * 分頁數值 */ Integer pageSize; public CriteriaCondition() { super(); condition = new HashMap<String, Object>(); } public CriteriaCondition(String orderByClause, Integer start, Integer pageSize) { this.distinct = true; this.orderByClause = orderByClause; this.start = start; this.pageSize = pageSize; condition = new HashMap<String, Object>(); } public CriteriaCondition(boolean distinct, String orderByClause, Integer start, Integer pageSize) { this.distinct = distinct; this.orderByClause = orderByClause; this.start = start; this.pageSize = pageSize; condition = new HashMap<String, Object>(); } public CriteriaCondition put(String condition, Object value) { this.condition.put(condition, value); return (CriteriaCondition)this; } public Map<String, Object> getCondition() { return condition; } public void setDistinct(boolean distinct) { this.distinct = distinct; } public void setOrderByClause(String orderByClause) { this.orderByClause = orderByClause; } public void setStart(Integer start) { this.start = start; } public void setPageSize(Integer pageSize) { this.pageSize = pageSize; } } //構造前台分頁顯示 public class PageNavUtil { public static String getBluePageNavHtml(int currentPage, int pageSize, int totalRows, int showNums) { StringBuilder pageNavHtml = new StringBuilder(); if (showNums < 1) { showNums = 5; } // 計算總頁數 int totalPage = (int)Math.ceil(totalRows / Double.parseDouble(String.valueOf(pageSize))); // 計算中間頁碼數字 int midNum = (int)Math.ceil(Double.parseDouble(String.valueOf(showNums)) / 2); int beginNum = currentPage <= midNum ? 1 : currentPage - midNum + 1; int endNum = beginNum + showNums - 1; if (endNum > totalPage) { endNum = totalPage; } // 至少有1頁以上 才顯示分頁導航 if (totalPage > 1) { // 需要顯示 首頁 if (currentPage > 1) { pageNavHtml.append("<a href='?page=1'> 首頁</a>"); } // 如果有上一頁 if (currentPage > beginNum) { pageNavHtml.append("<a href='?page=" + (currentPage - 1) + "'> < </a>"); } else { pageNavHtml.append("<a href='javascript:void(0)' class='disabled'> < </a>"); } for (int i = beginNum; i <= endNum; i++) { if (i == currentPage) { pageNavHtml.append("<a href='javascript:void(0)' class='this'>" + currentPage + "</a>"); } else { pageNavHtml.append("<a href='?page=" + i + "'>" + i + "</a>"); } } // 如果有下一頁 if (currentPage < endNum) { pageNavHtml.append("<a href='?page=" + (currentPage + 1) + "'> > </a>"); } else { pageNavHtml.append("<a href='javascript:void(0)' class='disabled'> > </a>"); } // 需要顯示 尾頁 if (currentPage < totalPage) { pageNavHtml.append("<a href='?page=" + totalPage + "'>尾頁</a>"); } } return pageNavHtml.toString(); } public static String getPageNavHtml(int currentPage, int pageSize, int totalRows, int showNums) { StringBuilder pageNavHtml = new StringBuilder(); if (showNums < 1) { showNums = 5; } // 計算總頁數 int totalPage = (int)Math.ceil(totalRows / Double.parseDouble(String.valueOf(pageSize))); // 計算中間頁碼數字 int midNum = (int)Math.ceil(Double.parseDouble(String.valueOf(showNums)) / 2); int beginNum = currentPage <= midNum ? 1 : currentPage - midNum + 1; int endNum = beginNum + showNums - 1; if (endNum > totalPage) { endNum = totalPage; } // 至少有1頁以上 才顯示分頁導航 if (totalPage > 1) { // 需要顯示 首頁 if (currentPage > 1) { pageNavHtml.append("<a href='?page=1'> 首頁</a>"); } // 如果有上一頁 if (currentPage > beginNum) { pageNavHtml.append("<a href='?page=" + (currentPage - 1) + "'> < </a>"); } else { pageNavHtml.append("<span class='disabled'> < </span>"); } for (int i = beginNum; i <= endNum; i++) { if (i == currentPage) { pageNavHtml.append("<span class='current'>" + currentPage + "</span>"); } else { pageNavHtml.append("<a href='?page=" + i + "'>" + i + "</a>"); } } // 如果有下一頁 if (currentPage < endNum) { pageNavHtml.append("<a href='?page=" + (currentPage + 1) + "'> > </a>"); } else { pageNavHtml.append("<span class='disabled'> > </span>"); } // 需要顯示 尾頁 if (currentPage < totalPage) { pageNavHtml.append("<a href='?page=" + totalPage + "'>尾頁</a>"); } } return pageNavHtml.toString(); } }