PageUtil分页代码工具类

分页显示是列表控件常用功能,在没有使用其他前端JS工具实现页面情况下,需要自己实现分页显示逻辑,这里也涉及到数据库表的分页查询功能,Mysql数据库在SQL中使用Limits关键字实现分页查询,但其他数据库如:Oracle,Mssql不支持此关键字,所以我们使用Mybatis的分页插件实现数据库的分页查询,这样代码比较通用。

工具类PageUtil

public class PageUtil {
    private Integer page = 1;//默认显示第一页
    private Integer rows = 4;//每页显示记录数
    private Long total = null;//总行数
    private String url = null;//点击页码跳转url

    /**
     * 
     * @param url 点击页码跳转url
     * @param page 当前页码
     * @param rows 每页显示记录数
     * @param total 总行数
     */
    public PageUtil(String url,Integer page,Integer rows,Long total)
    {
        this.url = url;
        this.page = page;
        this.rows = rows;
        this.total = total;
    }

    /**
     * 根据CSS样式定义生成HTML代码片段
     * @return
     */
    public String toHtml()
    {
        StringBuffer sb = new StringBuffer();
        //计算总页数
        int pages = 0;
        if(total % rows == 0)
            pages = total.intValue() / rows;
        else
            pages = (total.intValue() / rows) + 1;
        //定义分页工具条DIV层
        sb.append("<div id='pagediv'>\r\n");
        String firstUrl = null;
        //判断URL是否带有参数,如果带有参数使用&连接分页参数
        //否则使用?连接参数
        if(url.indexOf("?")>0)
            firstUrl = url + "&page=1&rows="+rows;
        else
            firstUrl = url + "?page=1&rows="+rows;
        sb.append("<a href='"+firstUrl+"'>首页</a>\r\n");
        //定义上一页连接
        String backUrl = null;
        if(url.indexOf("?")>0)
            backUrl = url + "&page="+(page==1?1:(page-1))+"&rows="+rows;
        else
            backUrl = url + "?page="+(page==1?1:(page-1))+"&rows="+rows;
        sb.append("<a href='"+backUrl+"'>上一页</a>\r\n");
        //显示页面超链接
        for(int i=1;i<=pages;i++)
        {
            String pageUrl = null;
            if(url.indexOf("?")>0)
                pageUrl = url + "&page="+i+"&rows="+rows;
            else
                pageUrl = url + "?page="+i+"&rows="+rows;
            if(i == page)
                sb.append("<a href='"+pageUrl+"'><b><font color='red'>"+i+"</font></b></a>\r\n");
            else
                sb.append("<a href='"+pageUrl+"'>"+i+"</a>\r\n");
        }
        //定义下一页连接
        String nextUrl = null;
        if(url.indexOf("?")>0)
            nextUrl = url + "&page="+(page==pages?pages:(page+1))+"&rows="+rows;
        else
            nextUrl = url + "?page="+(page==pages?pages:(page+1))+"&rows="+rows;
        sb.append("<a href='"+nextUrl+"'>下一页</a>\r\n");
        //定义尾页连接
        String lastUrl = null;
        if(url.indexOf("?")>0)
            lastUrl = url + "&page="+pages+"&rows="+rows;
        else
            lastUrl = url + "?page="+pages+"&rows="+rows;
        sb.append("<a href='"+lastUrl+"'>尾页</a>\r\n");
        //定义其他显示信息
        sb.append("&nbsp;&nbsp;&nbsp;&nbsp;第"+page+"/"+pages+"页\r\n");
        sb.append("&nbsp;&nbsp;&nbsp;&nbsp;共"+total+"条记录\r\n");
        sb.append("</div>\r\n");
        return sb.toString();
    }
}

配置Page分页插件

        <!-- 分页插件 -->
        <dependency>
            <groupId>com.github.pagehelper</groupId>
            <artifactId>pagehelper-spring-boot-starter</artifactId>
            <version>1.1.2</version>
        </dependency>

Mybatis配置文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
    PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.test.mapper.GoodMapper">
	<select id="findGood" resultType="com.test.bean.GoodInfo">
		select g.*,t.name typeName from t_good g,t_type t where g.typeid=t.id and 
			(g.name like '%${gname}%' and t.fullname like '%${tname}%')
			order by g.price ${sort}
	</select>

Controller类中定义

	@RequestMapping("/list")
	public String list(HttpServletRequest req,Integer page,Integer rows)
	{
		//从前端页面接收的分页参数
		if(page == null)
			page = 1;
		if(rows == null)
			rows = 4;
		//查询字段定义
		String gname = req.getParameter("gname");
		String tname = req.getParameter("tname");
		String sort = req.getParameter("sort");
		if(sort == null || "".equals(sort))
			sort = "asc";
		System.out.println("gname="+gname+",tname="+tname+",sort="+sort);
		//分页插件,一定在执行数据库查找之前调用
		//原理是通过动态代理模式重新定义执行的SQL
		PageHelper.startPage(page, rows);
		//执行数据库查询
		List<GoodInfo> list = serv.findGood(gname, tname,sort);
		//定义分页对象,存放查询结果集
		PageInfo<GoodInfo> pi = new PageInfo<GoodInfo>(list);
		Long total = pi.getTotal();
		List<GoodInfo> goods = pi.getList();
		//page 当前页
		//rows 每页记录数
		//total 全部记录数
		//url 列表URL
		String url = "/list";
		//String pageHtml = PageUtil.toHtml(url, page, rows, total);
		
		PageUtil pu2 = new PageUtil(url, page, rows, total);
		String pageHtml = pu2.toHtml();
		req.setAttribute("pageHtml", pageHtml);
		req.setAttribute("goods", goods);
		req.setAttribute("gname", gname);
		req.setAttribute("tname", tname);
		req.setAttribute("sort", sort);
		return "good";
	}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值