基于SSM的分页

现在基本每一个项目都有用到分页,SSM也是当前企业用到的比较频繁的框架,这里我就总结一下基于SSM的分页:

一、首先我们要准备一个分页的工具类

  1. /** 
  2.  * 分页 
  3.  */  
  4. public class Page implements Serializable {  
  5.   
  6.     private static final long serialVersionUID = -3198048449643774660L;  
  7.   
  8.     private int pageNow = 1; // 当前页数  
  9.   
  10.     private int pageSize = 4; // 每页显示记录的条数  
  11.   
  12.     private int totalCount; // 总的记录条数  
  13.   
  14.     private int totalPageCount; // 总的页数  
  15.   
  16.     @SuppressWarnings("unused")  
  17.     private int startPos; // 开始位置,从0开始  
  18.   
  19.     @SuppressWarnings("unused")  
  20.     private boolean hasFirst;// 是否有首页  
  21.   
  22.     @SuppressWarnings("unused")  
  23.     private boolean hasPre;// 是否有前一页  
  24.   
  25.     @SuppressWarnings("unused")  
  26.     private boolean hasNext;// 是否有下一页  
  27.   
  28.     @SuppressWarnings("unused")  
  29.     private boolean hasLast;// 是否有最后一页  
  30.       
  31.     /** 
  32.      * 通过构造函数 传入  总记录数  和  当前页 
  33.      * @param totalCount 
  34.      * @param pageNow 
  35.      */  
  36.     public Page(int totalCount, int pageNow) {  
  37.         this.totalCount = totalCount;  
  38.         this.pageNow = pageNow;  
  39.     }  
  40.       
  41.     /** 
  42.      * 取得总页数,总页数=总记录数/总页数 
  43.      * @return 
  44.      */  
  45.     public int getTotalPageCount() {  
  46.         totalPageCount = getTotalCount() / getPageSize();  
  47.         return (totalCount % pageSize == 0) ? totalPageCount  
  48.                 : totalPageCount + 1;  
  49.     }  
  50.   
  51.     public void setTotalPageCount(int totalPageCount) {  
  52.         this.totalPageCount = totalPageCount;  
  53.     }  
  54.   
  55.     public int getPageNow() {  
  56.         return pageNow;  
  57.     }  
  58.   
  59.     public void setPageNow(int pageNow) {  
  60.         this.pageNow = pageNow;  
  61.     }  
  62.   
  63.     public int getPageSize() {  
  64.         return pageSize;  
  65.     }  
  66.   
  67.     public void setPageSize(int pageSize) {  
  68.         this.pageSize = pageSize;  
  69.     }  
  70.   
  71.     public int getTotalCount() {  
  72.         return totalCount;  
  73.     }  
  74.   
  75.     public void setTotalCount(int totalCount) {  
  76.         this.totalCount = totalCount;  
  77.     }  
  78.     /** 
  79.      * 取得选择记录的初始位置 
  80.      * @return 
  81.      */  
  82.     public int getStartPos() {  
  83.         return (pageNow - 1) * pageSize;  
  84.     }  
  85.   
  86.     public void setStartPos(int startPos) {  
  87.         this.startPos = startPos;  
  88.     }  
  89.   
  90.     /** 
  91.      * 是否是第一页 
  92.      * @return 
  93.      */  
  94.     public boolean isHasFirst() {  
  95.         return (pageNow == 1) ? false : true;  
  96.     }  
  97.   
  98.     public void setHasFirst(boolean hasFirst) {  
  99.         this.hasFirst = hasFirst;  
  100.     }  
  101.     /** 
  102.      * 是否有首页 
  103.      * @return 
  104.      */  
  105.     public boolean isHasPre() {  
  106.         // 如果有首页就有前一页,因为有首页就不是第一页  
  107.         return isHasFirst() ? true : false;  
  108.     }  
  109.   
  110.     public void setHasPre(boolean hasPre) {  
  111.         this.hasPre = hasPre;  
  112.     }  
  113.     /** 
  114.      * 是否有下一页 
  115.      * @return 
  116.      */  
  117.     public boolean isHasNext() {  
  118.         // 如果有尾页就有下一页,因为有尾页表明不是最后一页  
  119.         return isHasLast() ? true : false;  
  120.     }  
  121.   
  122.     public void setHasNext(boolean hasNext) {  
  123.         this.hasNext = hasNext;  
  124.     }  
  125.     /** 
  126.      * 是否有尾页 
  127.      * @return 
  128.      */  
  129.     public boolean isHasLast() {  
  130.         // 如果不是最后一页就有尾页  
  131.         return (pageNow == getTotalCount()) ? false : true;  
  132.     }  
  133.   
  134.     public void setHasLast(boolean hasLast) {  
  135.         this.hasLast = hasLast;  
  136.     }

 

 

二、编写mapper.xml的SQL语句

    1. <!-- 分页SQL语句 -->  
    2. <select id="selectProductsByPage" resultMap="返回值类型">  
    3.   select   
    4.   *  
    5.   from 表名 WHERE user_id = #{userId,jdbcType=INTEGER} limit #{startPos},#{pageSize}   
    6. </select>  
    7. <!-- 取得记录的总数 -->  
    8. <select id="getProductsCount" resultType="long">  
    9.   SELECT COUNT(*) FROM 表名 WHERE user_id = #{userId,jdbcType=INTEGER}   
    10. </select

三、DAO层编写对应的方法

    1. ** 
    2.  * 使用注解方式传入多个参数,用户产品分页,通过登录用户ID查询 
    3.  * @param page 
    4.  * @param userId 
    5.  * @return startPos},#{pageSize}  
    6.  */  
    7. public List<Products> selectProductsByPage(@Param(value="startPos") Integer startPos,@Param(value="pageSize") Integer pageSize,@Param(value="userId") Integer userId);  
    8.   
    9. /** 
    10.  * 取得产品数量信息,通过登录用户ID查询 
    11.  * @param userId 
    12.  * @return 
    13.  */  
    14. public long getProductsCount(@Param(value="userId") Integer userId); 

四、service接口

    1. /** 
    2.      * 分页显示商品 
    3.      * @param request 
    4.      * @param model 
    5.      * @param loginUserId 
    6.      */  
    7.     void showProductsByPage(HttpServletRequest request,Model model,int loginUserId); 

五、service实现类

  1. @Override  
  2. public void showProductsByPage(HttpServletRequest request, Model model,int loginUserId) {  
  3.     String pageNow = request.getParameter("pageNow");  
  4.   
  5.     Page page = null;  
  6.   
  7.     List<ProductWithBLOBs> products = new ArrayList<ProductWithBLOBs>();  
  8.   
  9.     int totalCount = (int) productDao.getProductsCount(loginUserId);  
  10.   
  11.     if (pageNow != null) {  
  12.         page = new Page(totalCount, Integer.parseInt(pageNow));  
  13.         allProducts = this.productDao.selectProductsByPage(page.getStartPos(), page.getPageSize(), loginUserId);  
  14.     } else {  
  15.         page = new Page(totalCount, 1);  
  16.         allProducts = this.productDao.selectProductsByPage(page.getStartPos(), page.getPageSize(), loginUserId);  
  17.     }  
  18.   
  19.     model.addAttribute("products", products);  
  20.     model.addAttribute("page", page);  

 

六、controller层

  1. /** 
  2.  * 初始化 “我的产品”列表 JSP页面,具有分页功能 
  3.  *  
  4.  * @param request 
  5.  * @param model 
  6.  * @return 
  7.  */  
  8. @RequestMapping(value = "映射路径", method = RequestMethod.GET)  
  9. public String showMyProduct(HttpServletRequest request, Model model) {  
  10.     // 取得SESSION中的loginUser  
  11.     User loginUser = (User) request.getSession().getAttribute("loginUser");  
  12.     // 判断SESSION是否失效  
  13.     if (loginUser == null || "".equals(loginUser)) {  
  14.         return "redirect:/";  
  15.     }  
  16.   
  17.     int loginUserId = loginUser.getUserId();  
  18.     //此处的productService是注入的IProductService接口的对象  
  19.     this.productService.showProductsByPage(request, model, loginUserId);  
  20.   
  21.     return "跳转到的JSP路径";  

 

转载于:https://www.cnblogs.com/chun-chun/p/6062677.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值