SpringBoot中使用MyBatis,使用PageHelper进行分页查询以及碰到的错误

第一步:Maven导入我们需要的jar包

<dependency>
   <groupId>com.github.pagehelpergroupId>
   <artifactId>pagehelperartifactId>
   <version>4.1.6version>
dependency>

第二步:配置我们的PageHelper

 
  
  //配置mybatis的分页插件pageHelper
    @Bean
    public PageHelper pageHelper(){
        System.out.println("开始配置数据分页插件");
        PageHelper pageHelper = new PageHelper();
        Properties properties = new Properties();
        properties.setProperty("offsetAsPageNum","true");
        properties.setProperty("rowBoundsWithCount","true");
        properties.setProperty("reasonable","true");
        properties.setProperty("dialect","mysql");    //配置mysql数据库的方言
        pageHelper.setProperties(properties);
        return pageHelper;
    }
第三步:配置我们分页查询的Bean
/**
 * 分页bean
 */

import java.util.List;

public class PageBean {
    // 当前页
    private Integer currentPage = 1;
    // 每页显示的总条数
    private Integer pageSize = 10;
    // 总条数
    private Integer totalNum;
    // 是否有下一页
    private Integer isMore;
    // 总页数
    private Integer totalPage;
    // 开始索引
    private Integer startIndex;
    // 分页结果
    private List items;

    public PageBean() {
        super();
    }

    public PageBean(Integer currentPage, Integer pageSize, Integer totalNum) {
        super();
        this.currentPage = currentPage;
        this.pageSize = pageSize;
        this.totalNum = totalNum;
        this.totalPage = (this.totalNum+this.pageSize-1)/this.pageSize;
        this.startIndex = (this.currentPage-1)*this.pageSize;
        this.isMore = this.currentPage >= this.totalPage?0:1;
    }

    public Integer getCurrentPage() {
        return currentPage;
    }

    public void setCurrentPage(Integer currentPage) {
        this.currentPage = currentPage;
    }

    public Integer getPageSize() {
        return pageSize;
    }

    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }

    public Integer getTotalNum() {
        return totalNum;
    }

    public void setTotalNum(Integer totalNum) {
        this.totalNum = totalNum;
    }

    public Integer getIsMore() {
        return isMore;
    }

    public void setIsMore(Integer isMore) {
        this.isMore = isMore;
    }

    public Integer getTotalPage() {
        return totalPage;
    }

    public void setTotalPage(Integer totalPage) {
        this.totalPage = totalPage;
    }

    public Integer getStartIndex() {
        return startIndex;
    }

    public void setStartIndex(Integer startIndex) {
        this.startIndex = startIndex;
    }

    public List getItems() {
        return items;
    }

    public void setItems(List items) {
        this.items = items;
    }
}
第四步:我们在我们的ServiceImpl当中去使用PageHelper,其中的UserModel是我们自己为对应数据库里面的数据
写的一个Model,userDao是我们自己写的去查询数据库的dao,我们需要去查询出我们想要的数据再由pageHelper
帮助分页。
@Override
    public List findUserModelByPage(int currentPage, int pageSize,String tableName) {
        //设置分页信息,分别是当前页数和每页显示的总记录数【记住:必须在mapper接口中的方法执行之前设置该分页信息】
        PageHelper.startPage(currentPage, pageSize);
        List allItems = userDao.getAllUser(tableName);    //全部记录
        int countNums = allItems.size();            //总记录数
        PageBean pageData = new PageBean<>(currentPage, pageSize, countNums);
        pageData.setItems(allItems);
        return pageData.getItems();
    }

在这个中间,我自己遇到了一个错误,刚开始按照上面的配置好,查询出来的没有进行分页,而是把下面这语句查询
出来的数据全部展现了出来。
List allItems = userDao.getAllUser(tableName);    //全部记录
后来,由网上去查询所知,现在我们在使用数据库的时候,都会去配置Druid数据库连接池,假如你在配置druid连接
池的时候,重新设置了SqlSessionFactory,那么第二步的配置PageHelper就不能单独配置一个bean了,而是需要配
置在SqlSessionFactory里面了,如下,那么就可以顺利解决查询不分页的问题。
@Bean
    public SqlSessionFactory sqlSessionFactory() throws Exception {
        SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
        sqlSessionFactoryBean.setDataSource(druidDataSource());
        //mybatis分页
        PageHelper pageHelper = new PageHelper();
        Properties props = new Properties();
        props.setProperty("dialect", "mysql");
        props.setProperty("reasonable", "true");
        props.setProperty("supportMethodsArguments", "true");
        props.setProperty("returnPageInfo", "check");
        props.setProperty("params", "count=countSql");
        pageHelper.setProperties(props);
        //添加插件
       sqlSessionFactoryBean.setPlugins(new Interceptor[]{pageHelper});
        //添加XML目录
        VFS.addImplClass(SpringBootVFS.class);
        PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
        sqlSessionFactoryBean.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));
        logger.info("dao层扫描包为:mapper/*.xml");
        return sqlSessionFactoryBean.getObject();
    }







你可能感兴趣的:(SpringBoot中使用MyBatis,使用PageHelper进行分页查询以及碰到的错误)