您的位置:首页 > 编程语言 > Java开发

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

2018-01-26 17:46 1111 查看
第一步:Maven导入我们需要的jar包
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>4.1.6</version>
</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<T> {
// 当前页
private Integer currentPage = 1;
// 每页显示的总条数
private Integer pageSize = 10;
// 总条数
private Integer totalNum;
// 是否有下一页
private Integer isMore;
// 总页数
private Integer totalPage;
// 开始索引
private Integer startIndex;
// 分页结果
private List<T> 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<T> getItems() {
return items;
}

public void setItems(List<T> items) {
this.items = items;
}
}
第四步:我们在我们的ServiceImpl当中去使用PageHelper,其中的UserModel是我们自己为对应数据库里面的数据
写的一个Model,userDao是我们自己写的去查询数据库的dao,我们需要去查询出我们想要的数据再由pageHelper
帮助分页。
@Override
public List<UserModel> findUserModelByPage(int currentPage, int pageSize,String tableName) {
//设置分页信息,分别是当前页数和每页显示的总记录数【记住:必须在mapper接口中的方法执行之前设置该分页信息】
PageHelper.startPage(currentPage, pageSize);
List<UserModel> allItems = userDao.getAllUser(tableName);    //全部记录
int countNums = allItems.size();            //总记录数
PageBean<UserModel> pageData = new PageBean<>(currentPage, pageSize, countNums);
pageData.setItems(allItems);
return pageData.getItems();
}
在这个中间,我自己遇到了一个错误,刚开始按照上面的配置好,查询出来的没有进行分页,而是把下面这语句查询
出来的数据全部展现了出来。
List<UserModel> allItems = userDao.getAllUser(tableName);    //全部记录
后来,由网上去查询所知,现在我们在使用数据库的时候,都会去配置Druid数据库连接池,假如你在配置druid连接
池的时候,重新设置了SqlSessionFactory,那么第二步的配置PageHelper就不能单独配置一个bean了,而是需要配
置在SqlSessionFactory里面了,如下,那么就可以顺利解决查询不分页的问题。
@Beanpublic 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();}

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  PageHelper