喃都不說了,貼代碼,意思都在代碼里面了
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();
}
}