美文网首页Java 编程
springboot + mybatis 分页插件(Pagehe

springboot + mybatis 分页插件(Pagehe

作者: 不砍柴的樵夫 | 来源:发表于2020-04-20 11:19 被阅读0次

    方法一:使用pagehelper-spring-boot-starter的形式(最简单和通用的方式)

    使用步骤:

    (1)在pom.xml文件中引入依赖库

    <!-- 分页插件-->

    <!-- https://mvnrepository.com/artifact/com.github.pagehelper/pagehelper-spring-boot-starter -->

    <dependency>

        <groupId>com.github.pagehelper</groupId>

        <artifactId>pagehelper-spring-boot-starter</artifactId>

        <version>1.2.13</version>

    </dependency>

    (2)在application.properties中添加分页配置

    # 配置pageHelper分页插件的内容

    pagehelper.helper-dialect=mysql

    pagehelper.reasonable=true

    pagehelper.support-methods-arguments=true

    pagehelper.params=count=countSql

    或者在application.yml文件中添加分页配置

    pagehelper:

    helperDialect: mysql

    reasonable: true

    supportMethodsArguments: true

    params: count=countSql

    (3)进行使用。(在service层使用即可)

    /**

    * 查询所有的person内容

    * @return

    */

    public List jumpJsp(int pageNum ,int pageSize){

    PageHelper.startPage(pageNum ,pageSize);

    List personList = personService.findPerson();

    //得到分页的结果对象

    PageInfo personPageInfo = new PageInfo<>(personList);

    //得到分页中的person条目对象

    List pageList = personPageInfo.getList();

    //将结果存入map进行传送

    //Map result

    result.put("pageInfo" , pageList);

    return pageList;

    }

    解析:

    (1)PageHelper.startPage(pageNum , pageSize),这个方法就是类似我们数据库操作的limit start , count

    (2)得到的对象PageInfo里面包含很多的字段信息,这个可以自己看源码,非常详细

    (3)如果我们只想得到分页处理之后我们的实体对象的结果,那么就调用PageInfo对象的getList()方法即可。

    (4)这种配置使用的方式是最通用的方式,也就是对于环境搭建不同方式都可以利用这种使用方法。

    问题:如果运行时出现,org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration': 这个错误。

    解决办法:这是由于分页插件pagehelper的版本和mybatis不兼容的原因,修改分页插件的版本即可。

    方法二:使用最原始的形式(SpringBoot+Mybatis配置文件的形式,也就是整合环境还是利用xml的形式搭建的,但是都是通过@configuration注解开发类)

    使用步骤:

    (1)在pom.xml文件中,添加分页插件的依赖(注意和第一种方法的区别)

    com.github.pagehelper

    pagehelper

    4.1.6

    (2)在mybatis的配置文件中添加如下的插件

    (3)在service层进行使用插件

    /**

    * 查询所有的person内容

    * @return

    */

    @RequestMapping(value = "/list")

    public String jumpJsp(Map result){

    PageHelper.startPage(1 , 5);

    List personList = personService.findPerson();

    //得到分页的结果对象

    PageInfo personPageInfo = new PageInfo<>(personList);

    //得到分页中的person条目对象

    List pageList = personPageInfo.getList();

    //将结果存入map进行传送

    result.put("pageInfo" , pageList);

    return "person_list";

    }

    分析:对于这种方法的话,适用于对整合环境还是通过mybatis.xml的形式,所以,这种是具有针对性的一种情况。

    方法三:使用最原始的方式(SpringBoot+Mybatis搭建中,Mybatis是利用在application.properties进行设置,并且mapper文件的操作还是使用.xml形式编写的sql语句,而非mapper注解编写)

    使用步骤:

    (1)在pom.xml文件中添加分页插件的依赖

    com.github.pagehelper

    pagehelper

    4.1.6

    (2)添加下面一个类

    package com.hnu.scw.config;

    import com.github.pagehelper.PageHelper;

    import org.apache.ibatis.plugin.Interceptor;

    import org.mybatis.spring.SqlSessionFactoryBean;

    import org.springframework.context.annotation.Bean;

    import org.springframework.context.annotation.Configuration;

    import java.util.Properties;

    /**

    *

    * @ Description:用于配置分页插件的使用

    * @ Modified By:

    * @Version: $version$

    */

    @Configuration

    public class PgeHeplerConfig {

    //将分页插件注入到容器中

    @Bean

    public PageHelper pageHelper() {

    //分页插件

    PageHelper pageHelper = new PageHelper();

    Properties properties = new Properties();

    properties.setProperty("reasonable", "true");

    properties.setProperty("supportMethodsArguments", "true");

    properties.setProperty("returnPageInfo", "check");

    properties.setProperty("params", "count=countSql");

    pageHelper.setProperties(properties);

    //添加插件

    new SqlSessionFactoryBean().setPlugins(new Interceptor[]{pageHelper});

    return pageHelper;

    }

    }

    或者如下的代码:

    package com.hnu.scw.config;

    import com.github.pagehelper.PageHelper;

    import org.springframework.context.annotation.Bean;

    import org.springframework.context.annotation.Configuration;

    import java.util.Properties;

    /**

    * @ Description:用于配置分页插件的使用

    * @ Modified By:

    * @Version: $version$

    */

    @Configuration

    public class PgeHeplerConfig {

    //将分页插件注入到容器中

    @Bean

    public PageHelper pageHelper() {

    //分页插件

    PageHelper pageHelper = new PageHelper();

    Properties properties = new Properties();

    properties.setProperty("reasonable", "true");

    properties.setProperty("supportMethodsArguments", "true");

    properties.setProperty("helperDialect", "mysql");

    properties.setProperty("params", "count=countSql");

    pageHelper.setProperties(properties);

    return pageHelper;

          }

    }

    还可以直接在springboot的启动类添加下面的代码即可。(其实都一样的道理,因为上面的类都是用了@Configuration注解配置了的,也就是添加到了容器中)

    //将分页插件注入到容器中

    @Bean

    public PageHelper pageHelper() {

    //分页插件

    PageHelper pageHelper = new PageHelper();

    Properties properties = new Properties();

    properties.setProperty("reasonable", "true");

    properties.setProperty("supportMethodsArguments", "true");

    properties.setProperty("helperDialect", "mysql");

    properties.setProperty("params", "count=countSql");

    pageHelper.setProperties(properties);

    return pageHelper;

    }

    (3)直接使用

    /**

    * 查询所有的person内容

    * @return

    */

    @RequestMapping(value = "/list")

    public String jumpJsp(Map result){

    PageHelper.startPage(1 , 5);

    List personList = personService.findPerson();

    //得到分页的结果对象

    PageInfo personPageInfo = new PageInfo<>(personList);

    //得到分页中的person条目对象

    List pageList = personPageInfo.getList();

    //将结果存入map进行传送

    result.put("pageInfo" , pageList);

    return "person_list";

    }

    情景二:Spring+SpringMVC+Mybatis+Maven环境

    使用步骤:(其实这个就类似情景一种的方式二,换汤不换药)

    (1)在pom.xml中添加分页插件的依赖

    com.github.pagehelper

    pagehelper

    4.1.6

    (2)在mybatis中的配置文件SqlMapConfig.xml(这个名字是你自己搭建环境所取的,就是配置一些关于Mybatis的配置文件)添加分页插件。

    (3)在controller层或者service实现层中使用分页。

    /**

    * 查询所有的person内容

    * @return

    */

    @RequestMapping(value = "/list")

    public String jumpJsp(Map result){

    PageHelper.startPage(1 , 8);

    List personList = personService.findPerson();

    //得到分页的结果对象

    PageInfo personPageInfo = new PageInfo<>(personList);

    //得到分页中的person条目对象

    List pageList = personPageInfo.getList();

    //将结果存入map进行传送

    result.put("pageInfo" , pageList);

    return "person_list";

    }

    总结:

    (1)pagehelper插件本身就是基于Mybatis这种框架进行开发的插件。所以,主要都是针对Mybatis数据操作的架构的。

    (2)上面描述了多种情况的具体配置方式,都是自身经过实际开发编写的,而且对于不同的情景,各位要理解为什么要这样,这虽然只是讲解了分页插件的使用,当遇到其他插件的时候,都可以类似进行处理。

    (3)如果是用到的SSH(Spring+SpringMVC+Hibernate)或者SpringBoot+Hibernate这样的架构的时候,这个插件是无法使用的,就需要自己通过hibernate的形式进行处理,比如可以用HQL语法或者Criteria进行处理即可。毕竟,Hibernate是一种全自动化的数据库操作框架。

    相关文章

      网友评论

        本文标题:springboot + mybatis 分页插件(Pagehe

        本文链接:https://www.haomeiwen.com/subject/nhlrihtx.html