基于ssm项目中pagehelper分页插件的使用(简单易上手)

分页插件的使用pagehelper(简单易上手)

1:导入分页插件依赖

  <dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper</artifactId>
    <version>4.2.1</version>
  </dependency>

2:在项目配置文件中mybatis-config.xml中导入配置

   <plugins>
        <!-- com.github.pagehelper为PageHelper类所在包名 -->
        <plugin interceptor="com.github.pagehelper.PageHelper">
            <!-- 4.0.0以后版本可以不设置该参数 -->
            <property name="dialect" value="mysql"/>
            <!-- 该参数默认为false -->
            <!-- 设置为true时,会将RowBounds第一个参数offset当成pageNum页码使用 -->
            <!-- 和startPage中的pageNum效果一样-->
            <property name="offsetAsPageNum" value="true"/>
            <!-- 该参数默认为false -->
            <!-- 设置为true时,使用RowBounds分页会进行count查询 -->
            <property name="rowBoundsWithCount" value="true"/>
            <!-- 设置为true时,如果pageSize=0或者RowBounds.limit = 0就会查询出全部的结果 -->
            <!-- (相当于没有执行分页查询,但是返回结果仍然是Page类型)-->
            <property name="pageSizeZero" value="true"/>
            <!--             3.3.0版本可用 - 分页参数合理化,默认false禁用 -->
            <!--             启用合理化时,如果pageNum<1会查询第一页,如果pageNum>pages会查询最后一页 -->
            <!--             禁用合理化时,如果pageNum<1或pageNum>pages会返回空数据 -->
            <property name="reasonable" value="true"/>
            <!-- 3.5.0版本可用 - 为了支持startPage(Object params)方法 -->
            <!-- 增加了一个`params`参数来配置参数映射,用于从Map或ServletRequest中取值 -->
            <!-- 可以配置pageNum,pageSize,count,pageSizeZero,reasonable,orderBy,不配置映射的用默认值 -->
            <!-- 不理解该含义的前提下,不要随便复制该配置 -->
            <property name="params" value="pageNum=start;pageSize=limit;"/>
            <!-- 支持通过Mapper接口参数来传递分页参数 -->
            <property name="supportMethodsArguments" value="true"/>
            <!-- always总是返回PageInfo类型,check检查返回类型是否为PageInfo,none返回Page -->
            <property name="returnPageInfo" value="check"/>
        </plugin>
    </plugins>

3mapper层,controller层, service层的代码实现

<1>:这是我的实体类

package com.yjr.pojo;
/*
类目
 */
public class ItemCategory {
    private Integer id;//主键
    private String name;
    private Integer pid;//父id
    private Integer isDelete;
   public ItemCategory(){};
    @Override
    public String toString() {
        return "ItemCategory{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", pid=" + pid +
                ", isDelete=" + isDelete +
                '}';
    }
    public ItemCategory(Integer id, String name, Integer pid, Integer isDelete) {
        this.id = id;
        this.name = name;
        this.pid = pid;
        this.isDelete = isDelete;
    }
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getPid() {
        return pid;
    }
    public void setPid(Integer pid) {
        this.pid = pid;
    }
    public Integer getIsDelete() {
        return isDelete;
    }
    public void setIsDelete(Integer isDelete) {
        this.isDelete = isDelete;
    }
}

<2>mapper层实现
ItemCategoryMapper接口

public interface ItemCategoryMapper {
    //通过sql查询数据库中的所有实体对象
    List<ItemCategory> findBySqlRerturnEntity(@Param("sql") String sql);
    }

ItemCategoryMapper.xml

<?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.yjr.mapper.ItemCategoryMapper">
    <!--    //通过sql语句查询返回一个List对象-->
    <!-- 查询分页-->
    <select id="findBySqlRerturnEntity  resultMap="ResultMapItemCategory">
        ${sql}
    </select>
</mapper>

<3>service层实现
ItemCategoryService接口

public interface ItemCategoryService {
    List<ItemCategory> findBySqlRerturnEntity(@Param("sql") String sql);
}

ItemCategoryServiceImpl实现类

public interface ItemCategoryMapper {
    //通过sql查询数据库中的所有实体对象
    List<ItemCategory> findBySqlRerturnEntity(@Param("sql") String sql);
    }

4:controller层编写


@Controller
@RequestMapping("/itemCategory")
public class ItemCategoryController {
    @Autowired
    private ItemCategoryService itemCategoryService;
    /*
     *分页查询类目表
     */
    private static final int PAGE_SIZE=5;//定义分页的页数默认是5
    @RequestMapping("/findBySql")
    public String findBySql(@RequestParam(value = "pageNum",defaultValue = "1",
       required = false) int pageNum,Model model, ItemCategory itemCategory) {
       //pageNum默认值设置为1,意思就是页面进入显示得就是第一页
        //设置分页参数: pageNum (页数) pagesize (每页的大小)
        //主要是分页拦截重构sql语句        
        PageHelper.startPage(pageNum,PAGE_SIZE);//调用PageHelper对象得startPage()静态方法
        String sql = "select * from item_category where isDelete = 0 and pid is  null order by id";
        List<ItemCategory> list = itemCategoryService.findBySqlRerturnEntity(sql);
        PageInfo pageInfo=new PageInfo(list);//将得到得对象裂变放到PageInfo对象中
        model.addAttribute("pagers", list);//将查询的item_category表项传到前端--pagers这里和前端对应即可
        model.addAttribute("pageInfo",pageInfo);//将pageInfo对象传入前端
        return "/itemCategory/itemCategory";//itemCategory这是商品类目显示页面
    }
}

5:前端jsp

<table class="table table-hover text-center">
        <tr>
            <th>ID</th>
            <th>类别名称</th>
            <th>操作</th>
        </tr>
  <%--调用后台传过来得ItemCategory对象列表 foreach循环显示到前端--%>
    <c:forEach items="${pagers}" var="data" varStatus="stat">
        <tr>
            <td>${data.id}</td>
            <%--id号--%>
            <%--ItemCategory.name--%>
            <td>${data.name}</td>
            <td>
                <div class="button-group">
                    <a class="button border-main" href="${ctx}/itemCategory/findBySql2?pid=${data.id}"><span class="icon-edit">查看二级分类</span> </a>
                    <a class="button border-main" href="${ctx}/itemCategory/update?id=${data.id}"><span class="icon-edit">修改</span> </a>
                    <a class="button border-red" href="${ctx}/itemCategory/delete?id=${data.id}"><span class="icon-trash-o">删除</span> </a>
                </div>
            </td>
        </tr>
    </c:forEach>
    </table>
    <%--**************************************这里是重点*******************************************--%>
    <font size="4">            
    <%--*******************************
    pageInfo对象功能很强大,
    总页数直接调用:pageInfo.pages,
    当前页数:pageInfo.pageNum
    首页:/itemCategory/findBySql?pageNum=1 
    上一页:pageInfo.prePage(当前页的前一页)
    下一页:pageInfo.nextPage(当前页的下一页)
    尾页:pageInfo.pages(总页数也就是最后一页)
    最后通过通过:${pageContext.request.contextPath}/itemCategory/findBySql?pageNum=?实现
    ************************************
    --%>
    【 当前第${pageInfo.pageNum},&nbsp;&nbsp;总共${pageInfo.pages},&nbsp;&nbsp;总共${pageInfo.total}条记录】
    &nbsp;&nbsp; <a href="${pageContext.request.contextPath}/itemCategory/findBySql?pageNum=1" title="">首页</a>&nbsp;&nbsp;&nbsp;
    <a href="${pageContext.request.contextPath}/itemCategory/findBySql?pageNum=${pageInfo.prePage}">上一页</a>
    <a href="${pageContext.request.contextPath}/itemCategory/findBySql?pageNum=${pageInfo.nextPage}">下一页</a>&nbsp;&nbsp;&nbsp;
    <a href="${pageContext.request.contextPath}/itemCategory/findBySql?pageNum=${pageInfo.pages}" title="">尾页</a>
    </font>

4: 效果展现

项目一级分类页面
在这里插入图片描述

5:分页实现的总结

主要是pagehelper插件的使用及配置。
其次是PageInfo对象的理解
下面给出一些PageInfo类的一些属性以供参考

当前页 
private int pageNum;
每页的数量  
private int pageSize;  
当前页的数量  
private int size;  
当前页面第一个元素在数据库中的行号  
private int startRow;  
当前页面最后一个元素在数据库中的行号  
private int endRow;  
总记录数  
private long total;  
总页数  
private int pages;  
结果集  
private List<T> list;  
第一页  
private int firstPage;  
前一页  
private int prePage;  
是否为第一页  
private boolean isFirstPage = false;  
是否为最后一页  
private boolean isLastPage = false;  
是否有前一页  
private boolean hasPreviousPage = false;  
是否有下一页  
private boolean hasNextPage = false;  
导航页码数  
private int navigatePages;  
所有导航页号  
private int[] navigatepageNums;  
  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
# Spring Boot 集成 MyBatis, 分页插件 PageHelper, 通用 Mapper ## 项目依赖 ```xml <!--mybatis--> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <!--mapper--> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <!--pagehelper--> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> ``` ## Spring DevTools 配置 在使用 DevTools 时,通用Mapper经常会出现 class x.x.A cannot be cast to x.x.A。 同一个类如果使用了不同的类加载器,就会产生这样的错误,所以解决方案就是让通用Mapper和实体类使用相同的类加载器即可。 DevTools 默认会对 IDE 引入的所有项目使用 restart 类加载器,对于引入的 jar 包使用 base 类加载器,因此只要保证通用Mapper的jar包使用 restart 类加载器即可。 在 `src/main/resources` 创建 META-INF 目录,在此目录下添加 spring-devtools.properties 配置,内容如下: ```properties restart.include.mapper=/mapper-[\\w-\\.]+jar restart.include.pagehelper=/pagehelper-[\\w-\\.]+jar ``` 使用这个配置后,就会使用 restart 类加载加载 include 进去的 jar 包。 ## 集成 MyBatis Generator 通过 Maven 插件集成的,所以运行插件使用下面的命令: >mvn mybatis-generator:generate Mybatis Geneator 详解: >http://blog.csdn.net/isea533/article/details/42102297 ## application.properties 配置 ```properties #mybatis mybatis.type-aliases-package=tk.mybatis.springboot.model mybatis.mapper-locations=classpath:mapper/*.xml #mapper #mappers 多个接口时逗号隔开 mapper.mappers=tk.mybatis.springboot.util.MyMapper mapper.not-empty=false mapper.identity=MYSQL #pagehelper pagehelper.helperDialect=mysql pagehelper.reasonable=true pagehelper.supportMethodsArguments=true pagehelper.params=count=countSql ``` ## application.yml 配置 完整配置可以参考 [src/main/resources/application-old.yml](https://github.com/abel533/MyBatis-Spring-Boot/blob/master/src/main/resources/application-old.yml) ,和 MyBatis 相关的部分配置如下: ```yaml mybatis: type-aliases-package: tk.mybatis.springboot.model mapper-locations: classpath:mapper/*.xml mapper: mappers: - tk.mybatis.springboot.util.MyMapper not-empty: false identity: MYSQL pagehelper: helperDialect: mysql reasonable: true supportMethodsArguments: true params: count=countSql ``` 注意 mapper 配置,因为参数名固定,所以接收参数使用的对象,按照 Spring Boot 配置规则,大写字母都变了带横线的小写字母。针对如 IDENTITY(对应i-d-e-n-t-i-t-y)提供了全小写的 identity 配置,如果 IDE 能自动提示,看自动提示即可。 ## SSM集成的基础项目 >https://github.com/abel533/Mybatis-Spring ## MyBatis工具 http://www.mybatis.tk - 推荐使用 Mybatis 通用 Mapper3 https://github.com/abel533/Mapper - 推荐使用 Mybatis 分页插件 PageHelper https://github.com/pagehelper/Mybatis-PageHelper ## 作者信息 - 作者博客:http://blog.csdn.net/isea533 - 作者邮箱:[email protected]
SSM使用PageHelper实现分页非常简单。首先,你需要在项目的pom.xml文件引入PageHelper的依赖。然后,在你的Mapper接口添加对应的方法,并在该方法上添加PageHelper分页注解。最后,你可以在Service层或Controller层调用该方法并传入分页参数,即可实现分页。下面是一个示例代码: 1. 首先,在pom.xml文件引入PageHelper的依赖: ```xml <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.5</version> </dependency> ``` 2. 在Mapper接口添加分页方法,并使用PageHelper的注解进行分页配置: ```java import com.github.pagehelper.Page; import org.apache.ibatis.annotations.Param; public interface YourMapper { // 使用PageHelper的注解进行分页配置 List<YourEntity> getYourList(@Param("pageNum") int pageNum, @Param("pageSize") int pageSize); } ``` 3. 在Service层或Controller层调用分页方法并传入分页参数: ```java import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; @Service public class YourService { @Autowired private YourMapper yourMapper; public PageInfo<YourEntity> getYourList(int pageNum, int pageSize) { // 设置分页参数 PageHelper.startPage(pageNum, pageSize); // 调用Mapper方法查询数据 List<YourEntity> list = yourMapper.getYourList(pageNum, pageSize); // 封装成PageInfo对象返回 PageInfo<YourEntity> pageInfo = new PageInfo<>(list); return pageInfo; } } ``` 通过以上三个步骤,你就可以在SSM使用PageHelper实现分页了。首先,在pom.xml文件引入PageHelper的依赖,然后在Mapper接口添加分页方法并使用PageHelper的注解进行分页配置,最后在Service层或Controller层调用分页方法并传入分页参数,即可实现分页。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [【分页查询】在SSM环境使用PageHelper](https://blog.csdn.net/weixin_44757863/article/details/109728886)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [SSM整合实例--(二)PageHelper分页操作](https://blog.csdn.net/Double____C/article/details/91048168)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值