zoukankan      html  css  js  c++  java
  • [Java] 一种好的JAVA分页实现

    喃都不说了,贴代码,意思都在代码里面了
     
    
     
    
    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();
    
            
    
        }
    
        
    
    }
    

      

  • 相关阅读:
    css 网格布局简单应用
    服务器常用状态码
    js 操作数组
    下拉框 tree 基于 EasyUi
    c# 导出Excel
    select 多选 (EasyUI)
    如何提高sql查询速度
    总结JS中string、math、array的常用的方法
    php 验证邮箱 php验证手机号码 ph验证身份证
    jquery+php ajax上传多图片即时显示
  • 原文地址:https://www.cnblogs.com/avivaye/p/4372162.html
Copyright © 2011-2022 走看看