java分页

本文介绍了一种基于Java的自定义分页实现方法,包括分页类的设计、JSP页面展示、Controller处理逻辑、DAO层接口及MyBatis SQL映射文件等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

之前没自己弄过分页,这次自己琢磨了个,下次再有项目需要时可以借鉴!

1、分页类:


package com.heitian.ssm.model;

import java.util.ArrayList;
import java.util.List;


public class PageModel<E> {
    //结果集
    private List<E> list;
    //查询记录数
    private Long totalRecords;
    //每页多少条数据
    private Long pageSize;
    //第几页
    private int pageNo;
    private int showSize = 10;

    /**
     * 总页数
     * @return
     */
    public Long getTotalPages(){
        return(totalRecords+pageSize-1)/pageSize;
    }

    /**
     * 获取要显示的页码数
     * @return
     */
    public List<Integer> getShowPageNumber(){
        List<Integer> showPageNumbers = new ArrayList<>();
        int half = showSize/2;
        if(pageNo<=half){
            for(int i = 1;i<showSize+1;i++){
                if(i<=getTotalPages()){
                    if(i>=1){
                        showPageNumbers.add(i);
                    }
                }else{
                    break;
                }
            }
        }else if(pageNo > half && pageNo < getTotalPages()-half){
            for(int i = pageNo-half;i<pageNo+half+1;i++){
                if(i<=getTotalPages()){
                    if(i>=1){
                        showPageNumbers.add(i);
                    }
                }else{
                    break;
                }
            }
        }else if(pageNo >getTotalPages()- half){
            for(int i = Integer.valueOf(getTotalPages()+"")- showSize;i<getTotalPages()+1;i++){
                if(i<=getTotalPages()){
                    if(i>=1){
                        showPageNumbers.add(i);
                    }
                }else{
                    break;
                }
            }
        }
        return showPageNumbers;
    }

    /**
     * 取得首页
     * @return
     */
    public int getTopPageNo(){
        return 1;
    }
    public List<E> getList() {
        return list;
    }
    /**
     * 上一页
     * @return
     */
    public int getPreviousPageNo(){
        if(pageNo<=1){
            return 1;
        }
        return pageNo-1;
    }
    /**
     * 下一页
     * @return
     */
    public Long getNextPageNo(){
        if(pageNo>=getBottomPageNo()){
            return getBottomPageNo();
        }
        return Long.valueOf(pageNo+1);
    }
    /**
     * 取得尾页
     * @return
     */
    public Long  getBottomPageNo(){
        return getTotalPages();
    }
    public void setList(List<E> list) {
        this.list = list;
    }
    public Long getTotalRecords() {
        return totalRecords;
    }
    public void setTotalRecords(Long totalRecords) {
        this.totalRecords = totalRecords;
    }
    public Long  getPageSize() {
        return pageSize;
    }
    public void setPageSize(Long pageSize) {
        this.pageSize = pageSize;
    }
    public int getPageNo() {
        return pageNo;
    }
    public void setPageNo(int pageNo) {
        this.pageNo = pageNo;
    }

}
2、单独的分页页面:

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"  import="java.util.*" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ page isELIgnored="false" %>
<footer class="panel-footer">
    <div class="row">
        <div class="col-sm-4 hidden-xs"></div>
        <div class="col-sm-4 text-center"> <small class="text-muted inline m-t-sm m-b-sm">
                ${(pageModel.pageNo-1)*pageModel.pageSize+1}                 ${pageModel.pageNo*pageSize>pagemodel.totalRecords?pageModel.totalRecords:pageModel.pageNo*pageModel.pageSize} ,
         总共:${pageModel.getTotalPages()}          ${pageModel.totalRecords}  记录
        </small> </div>

        <div class="col-sm-4 text-right text-center-xs">
            <ul class="pagination pagination-sm m-t-none m-b-none">
                <li><a href="${request_url}?page=${pageModel.getPreviousPageNo()}${page_params}"><i class="fa fa-chevron-left"></i></a></li>
                <c:forEach var="item"  items="${pageModel.getShowPageNumber()}">
                    <li ${item==pageModel.pageNo?"class=\"active\"":""}>
                        <a href="${request_url}?page=${item}${page_params}" >${item}</a>
                    </li>
                 </c:forEach>
                <li><a href="${request_url}?page=${pageModel.getNextPageNo()}${page_params}"><i class="fa fa-chevron-right"></i></a></li>
            </ul>
        </div>
    </div>
</footer>
3、controller类

package com.heitian.ssm.controller;

import com.heitian.ssm.model.PageModel;
import com.heitian.ssm.model.User;
import com.heitian.ssm.service.UserService;
import org.apache.log4j.Logger;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;

import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;


@Controller
@RequestMapping("/user")
public class UserController {

    private Logger log = Logger.getLogger(UserController.class);
    @Resource
    private UserService userService;

    @RequestMapping("/showUser")
    public String showUser(HttpServletRequest request, Model model,@RequestParam Map<String,Object> params){
        log.info("查询所有用户信息");
        PageModel<User> pageModel = new PageModel<>();
        if(params.get("page") ==null){
            params.put("page","1");
        }
        pageModel.setPageNo(Integer.valueOf(params.get("page")+""));
        pageModel.setPageSize(10L);
        params.put("offset",(pageModel.getPageNo()-1)*pageModel.getPageSize());
        params.put("limit",10);

        List<User> userList = userService.getAllUser(params);
        Long count = userService.count(params);

        pageModel.setTotalRecords(count);
        pageModel.setPageSize(pageModel.getPageSize());
        pageModel.setList(userList);
        model.addAttribute("pageModel",pageModel);
//        model.addAttribute("params",params);
        model.addAttribute("request_url","showUser");
        model.addAttribute("userList",userList);

        //键值对获取keyvalue
        Set<String> strings = params.keySet();
        Iterator<String> iterator = strings.iterator();
        StringBuffer pageParams = new StringBuffer();
        while(iterator.hasNext()){
            String key = iterator.next();
            String value = params.get(key).toString().trim()+"";
            pageParams.append("&"+key+"="+value);
        }
        model.addAttribute("page_params",pageParams.toString());

        return "showUser";
    }
}
4、Dao层

package com.heitian.ssm.dao;

import com.heitian.ssm.model.User;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;


@Repository
public interface UserDao {

    List<User> selectAllUser(Map<String,Object> params);

    Long count(Map<String,Object> params);
}
5、xml sql语句层

<?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.heitian.ssm.dao.UserDao">

    <resultMap id="UserBaseMap" type="com.heitian.ssm.model.User">
        <id column="id" property="id" jdbcType="BIGINT"/>
        <result column="user_name" property="userName" jdbcType="VARCHAR"/>
        <result column="user_phone" property="userPhone" jdbcType="VARCHAR"/>
        <result column="user_email" property="userEmail" jdbcType="VARCHAR"/>
        <result column="user_pwd" property="userPwd" jdbcType="VARCHAR"/>
        <result column="pwd_salt" property="pwdSalt" jdbcType="VARCHAR"/>
        <result column="create_time" property="createTime" jdbcType="DATE"/>
        <result column="modify_time" property="modifyTime" jdbcType="DATE"/>
        <result column="is_delete" property="isDelete" jdbcType="SMALLINT"></result>
    </resultMap>

    <select id="selectAllUser" resultMap="UserBaseMap">
        SELECT * FROM t_user limit ${offset},${limit}
    </select>

    <select id="count" resultType="java.lang.Long">
        SELECT COUNT(*) FROM (SELECT * FROM t_user) as t
    </select>

</mapper>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值