mybatis-plus和pageHelper使用
1、依赖
<!-- mybatis-plus依赖 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.3.1</version>
</dependency>
<!-- 分页插件pageHelper -->
<dependency>
<groupId>com.github.pagehelper</groupId>
<artifactId>pagehelper</artifactId>
<version>5.3.1</version>
</dependency>
2、插件配置
/**
* 分页插件配置,不配置的话分页效果不起效
*/
@Configuration
public class MybatisPlusConfig {
/**
* MybatisPlus分页插件
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return mybatisPlusInterceptor;
}
/**
* PageHelper分页插件
* */
@Bean
PageInterceptor pageInterceptor() {
PageInterceptor pageInterceptor = new PageInterceptor();
Properties properties = new Properties();
properties.setProperty("helperDialect", "mysql");
pageInterceptor.setProperties(properties);
return pageInterceptor;
}
}
3、使用注意
3.1 mybatis-plus 通常查单表分页
/**
* 获取热门文章
*/
@Override
public Result<PageVo> getHotArticleList() {
// 设置条件
LambdaQueryWrapper<Article> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Article::getStatus, '0');
// 按照浏览量降序排序
queryWrapper.orderByDesc(Article::getViewCount);
// 查询5条数据
Page<Article> pageList = new Page<>(1, 5);
// 执行
baseMapper.selectPage(pageList, queryWrapper);
// 拷贝数据
List<ArticlePageVo> hotArticleList = pageList.getRecords()
.stream()
.map(article -> BeanUtil.copyProperties(article, ArticlePageVo.class))
.collect(Collectors.toList());
PageVo pageVo = new PageVo(hotArticleList, pageList.getTotal());
return Result.success(pageVo);
}
3.2 pageHelper 单表和多表分页都可以
/**
* 获取前台文章分页列表
*/
@Override
public Result<PageVo> getFrontArticleList(Integer pageNum, Integer pageSize) {
LambdaQueryWrapper<Article> queryWrapper = new LambdaQueryWrapper<>();
queryWrapper.eq(Article::getStatus, '0');
// 查询文章条数
Long total = baseMapper.selectCount(queryWrapper);
// 开启分页
PageHelper.startPage(pageNum, pageSize);
// 执行查询
List<ArticleFrontVo> articleFrontVos = baseMapper.selectFrontArticleWithDetails();
PageInfo<ArticleFrontVo> pageInfo = new PageInfo<>(articleFrontVos);
// 返回数据
PageVo pageVo = new PageVo(pageInfo.getList(), total);
return Result.success(pageVo);
}
3.3 注意
1、Myabtis-plus分页查询正常写就可以。
2、Pagehelper分页查询时
在 PageHelper.startPage(pageNum, pageSize);和PageInfo<ArticleFrontVo> pageInfo = new PageInfo<>(articleFrontVos);
中只能执行一句SQL语句,否则会出现分页异常情况。
遇到了一个大坑,在xml文件中写SQL不要在语句后面加上 ;结束符号了。
如何加上后使用pageHelper分页操作Limit语句会直接加在 ;这个符号后面导致SQL语句错误。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现