• 基于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路径";  
  • 相关阅读:
    闰年测试
    EditBox的测试用例设计
    测试工程中的评审
    测试框架
    github
    第一次上机实验
    对软件测试的初步认识
    白盒测试
    Date : 日期对象
    C++ 格式化输出 及 输入 流
  • 原文地址:https://www.cnblogs.com/chun-chun/p/6062677.html
Copyright © 2020-2023  润新知