喃都不说了,贴代码,意思都在代码里面了

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();

    }

}

  

[Java] 一种好的JAVA分页实现的更多相关文章

  1. 面试官的七种武器:Java篇

    起源 自己经历过的面试也不少了,互联网的.外企的,都有.总结一下这些面试的经验,发现面试官问的问题其实不外乎几个大类,玩不出太多新鲜玩意的.细细想来,面试官拥有以下七种武器.恰似古龙先生笔下的武侠世界 ...

  2. Java:一个简捷的可分页的ResultSet实现

    内容 前言 JDBC和分页 和具体数据库相关的实现方法 另一种繁琐的实现方法 使用Vector进行分页 一个新的Pageable接口及其实现 Pageable的使用方法 总结 参考资料 关于作者 前言 ...

  3. Java 四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor

    介绍new Thread的弊端及Java四种线程池的使用,对Android同样适用.本文是基础篇,后面会分享下线程池一些高级功能. 1.new Thread的弊端执行一个异步任务你还只是如下new T ...

  4. Java四种线程池的使用

    Java通过Executors提供四种线程池,分别为:newCachedThreadPool创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程.newFixe ...

  5. Java四种线程池

    Java四种线程池newCachedThreadPool,newFixedThreadPool,newScheduledThreadPool,newSingleThreadExecutor 时间:20 ...

  6. Android的4种文件类型Java,class,dex,apk

    Java文件-----应用程序源文件 Android本身相当一部分都是用java编写而成(基本上架构图里头蓝色的部份都是用Java开发的),android的应用必须使用java来开发 Class文件- ...

  7. 几种任务调度的 Java 实现方法与比较

    综观目前的 Web 应用,多数应用都具备任务调度的功能.本文由浅入深介绍了几种任务调度的 Java 实现方法,包括 Timer,Scheduler, Quartz 以及 JCron Tab,并对其优缺 ...

  8. JAVA 几种引用类型学习

    1.对象的强.软.弱和虚引用    在JDK 1.2以前的版本中,若一个对象不被任何变量引用,那么程序就无法再使用这个对象.也就是说,只有对象处于可触及(reachable)状态,程序才能使用它.从J ...

  9. Java四种引用包括强引用,软引用,弱引用,虚引用。

    Java四种引用包括强引用,软引用,弱引用,虚引用. 强引用: 只要引用存在,垃圾回收器永远不会回收Object obj = new Object();//可直接通过obj取得对应的对象 如obj.e ...

随机推荐

  1. Inside GDALAllRegister之三: 注册指定驱动

    现在来仔细分析如何注册一个驱动的代码,看下面代码: #ifdef FRMT_vrt GDALRegister_VRT(); #endif 编译时指定或者取消FRMT_vrt,可以控制这条语句是否编译到 ...

  2. QtGui.QPixmap

    A QtGui.QPixmap is one of the widgets used to work with images. It is optimized for showing images o ...

  3. linux下php添加cur/soapl扩展

    注意:在不同的扩展路径下 ./configure --help 的帮助信息不尽相同 1.跟php一起安装 下载 http://curl.haxx.se/download/ curl 取较低的版本 wg ...

  4. springmvc 日期解决方案(三)使用jackson

    引入jar包: <dependency> <groupId>org.codehaus.jackson</groupId> <artifactId>jac ...

  5. Oracle基础学习2--Oracle登录与三种验证机制

    首先,Oracle安装完毕有三个默认用户 Ø  Sys:数据库对象的拥有者.权限最高.password在安装的时候(口令管理)能够改变 Ø  System:数据库管理员,password为manage ...

  6. ThinkPHP实现事务回滚示例代码(附加:PDO的事务处理)

    ThinkPHP的事务回滚示例如下: $m=D('YourModel');//或者是M(); $m2=D('YouModel2'); $m->startTrans();//在第一个模型里启用就可 ...

  7. SDL视频显示进阶

    原文地址:http://blog.csdn.net/qingkongyeyue/article/details/53024467 1.SDL中事件和线程(函数同时运行) 2.练习 (1)创建线程 第一 ...

  8. NHibernate中ISession的Flush

    不知道在执行Insert或者Delete,update之后为什么要调用Flush(),后来看了http://www.cnblogs.com/lyj/archive/2008/10/17/1313612 ...

  9. AutoFac文档(转载)

    目录 开始 注册组件 控制范围和生命周期 用模块结构化Autofac xml配置 与.net集成 深入理解Autofac 指导 关于 词汇表 开始 程序集 如果你正在使用Nuget包管理器,你可以通过 ...

  10. 连接到 Linux 服务器时首先要运行的 5 个命令

    作为一个系统管理员/SRE 工作 5 年后,我知道当我连接到一台 Linux 服务器时我首先应该做什么.这里有一系列关于服务器你必须了解的信息,以便你可以(在大部分时间里)更好的调试该服务器. 连上 ...