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语句错误。

posted @   有何和不可  阅读(1187)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示