pagehelper分页插件

个人网站 http://www.javamap.cn

开发工具:IDEA

使用框架:mybatis+Struts2+spring

项目类型:BBS论坛

原始的分页方式需要在sql语句中进行控制分页,但是在使用中,我们期待更好的方式来实现分页,比如mybatis的pagehelper或者sqlhelper(支持更多类型数据库)。 以下简单示例 pagehelper :

1.添加依赖

我使用的是5.1.10,注意版本,4和5在操作中有区别,springboot项目请添加 pagehelper-spring-boot-starter ,其他依赖请自行补全

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

2. 配置文件

2.1 mybatis配置文件mybatis_config.xml(自定义名)中配置
 <plugins>
    <!--注意这里要写成PageInterceptor, 5.0之前的版本都是写PageHelper, 5.0之后要换成PageInterceptor,所有要注意版本-->
    <plugin interceptor="com.github.pagehelper.PageInterceptor">
        <property name="helperDialect" value="mysql" />  <!--其他数据库自行更改  --> 
        <property name="reasonable" value="true" />
    </plugin>
</plugins>                                                                                                                                                                             
2.2 spring配置文件中配置
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
   <!-- 实例化sqlSessionFactory时需要使用上述配置好的数据源以及SQL映射文件 -->
   <property name="dataSource" ref="dataSource"/>

   <!-- 给实体类起别名 -->
   <property name="typeAliasesPackage" value="cn.javamap.pojo"/>

   <!--   ***配置分页插件pagehelper*** -->
   <property name="plugins">
      <array>
         <bean class="com.github.pagehelper.PageInterceptor">
            <property name="properties">
               <props>
                  <prop key="helperDialect">mysql</prop>
                  <prop key="reasonable">true</prop>
                  <prop key="autoRuntimeDialect">true</prop>
               </props>
   <!-- 下面注释的写法也是可以的,但是总感觉不好看 --> 
               <!--<value>
                  helperDialect=mysql
                  reasonable=true
                  autoRuntimeDialect=true
               </value>-->
            </property>
         </bean>
      </array>
   </property>

   <!-- 加载mybatis配置文件 -->
   <!--      <property name="configLocation" value="classpath:mybatis_config.xml"></property>-->

   <!--   自动扫描cn/javamap/dao/包下的所有配置文件   -->
   <property name="mapperLocations">
      <list>
         <value>classpath:cn/javamap/dao/*Mapper.xml</value>
      </list>
   </property>
<!-- 当mybatis的xml文件和mapper接口不在相同包下时,需要用mapperLocations属性指定xml文件的路径。
          *是个通配符,代表所有的文件,**代表所有目录下 -->
   <!--      <property name="mapperLocations" value="classpath:cn/javamap/dao/*.xml" />-->
</bean>

**** dao层 *和* service层自行补全,sql语句中不需要进行分页操作

3. 方法操作(由于使用的Struts2,所有事在action中操作,springmvc需稍作变化)

3.1 操作分页的实体类(可省略)
@Component
public class Page {
    private Long totalNum;   //查询总共记录数
    private Integer pageCount;  //总共页数
    private Integer pageNo;     //当前页数
    private Integer pageSize;   //每页数量
//变量可以直接定义为 int,包装类我在使用中报了类型装换异常,所以下面把 pageNo 的get+set方法改成了int,别的没变

    public Page() {
        this.pageNo = 1;   //初始化当前页面为第一页
        this.pageSize = 4;  //初始化每页个数4个
    }

    public int getPageNo() {
        return pageNo;
    }
    //  pageNo在页面中需要进行运算,改成int型,不然会报类型装换异常,很坑
    public void setPageNo(int pageNo) {
        this.pageNo = pageNo;
    }
}
3.2 分页方法
   //如果没有创建分页实体类的,可以直接在类里给出变量

 public String boardList() {
//第一步至关重要,开启分页,注意 page.getPageNo() 我是在构造方法里给值的
        PageHelper.startPage(page.getPageNo(), 5);
//查询语句,返回的是List集合,写自己的查询
        topicList = topicService.selectByBoardId(board.getBoardid());
//        分页操作,创建 PageInfo 对象,泛型写上面List的,参数就给上面List
        PageInfo<Topic> topicPageInfo = new PageInfo<Topic>(topicList);
    }

================================================================

4. 页面操作

${page.totalNum} 
${page.pageNo}/${page.pageCount}  
<c:if test="${page.pageNo<=1}">
   首页 上一页 
</c:if>
<%-- 页码不是首页时,“首页”和“上一页”可跳转访问 --%>
<c:if test="${page.pageNo>1}">
   <a href="TopicAction_boardList?page.pageNo=1 & board.boardid=${board.boardid}">首页</a> 
   <a href="TopicAction_boardList?page.pageNo=${page.pageNo-1} & board.boardid=${board.boardid}">上一页</a> 
</c:if>
<%-- 定义数字页码 --%>
<c:forEach var="p" begin="1" end="${page.pageCount}">
   <c:if test="${p == page.pageNo}">
      ${p</c:if>
   <c:if test="${p != page.pageNo}">
      <a href="TopicAction_boardList?page.pageNo=${p} & board.boardid=${board.boardid}">${p</a> 
   </c:if>
</c:forEach>
<%-- 页码为尾页时,“尾页”和“下一页”不可访问 --%>
<c:if test="${page.pageNo>=page.pageCount}">
   下一页 尾页 
</c:if>
<%-- 页码不是尾页时,“尾页”和“下一页”可跳转访问 --%>
<c:if test="${page.pageNo<page.pageCount}">
   <a href="TopicAction_boardList?page.pageNo=${page.pageNo+1} & board.boardid=${board.boardid}">下一页</a> 
   <a href="TopicAction_boardList?page.pageNo=${page.pageCount} & board.boardid=${board.boardid}">尾页</a> 
</c:if>

上述页面其实很麻烦,可以参考附加链接朋友的页面操作 https://blog.csdn.net/qq_28316183/article/details/78122696

总结:操作并不难,但是在使用中,总感觉有时候有点小问题,可能是自己写的不好吧

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值