当前位置: 首页 > news >正文

Mybatis-Plus使用page类实现分页查询

文章目录

  • 1. pom.xml
  • 2. 配置类
  • 3. 业务代码
  • 4. 实体类
  • 总结

1. pom.xml

注意当前使用的mybatis plus的版本,版本过高会需要额外引入jsqlparser包,才有PaginationInnerInterceptor类。

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.10</version>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-jsqlparser</artifactId>
    <version>3.5.10</version> <!-- 确保版本和 MyBatis Plus 主包一致 -->
</dependency>

2. 配置类

package com.whl.info.config;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class MybatisPlusConfig {

    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
        // 添加分页插件
        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 数据库类型
        return interceptor;
    }

}

注意,config类如果是在别的模块下,需要在该服务下的主启动类中配置能扫描到config类的路径名@ComponentScan(basePackages = {"com.example.a","com.example.a"})
比如,模块目录如下:

- module-a
  - src
    - main
      - java
        - com
          - example
            - a
              - MyBatisConfig.java
- module-b
  - src
    - main
      - java
        - com
          - example
            - b
              - ApplicationB.java

那么在模块B中的主启动类ApplicationB.java示例如下:

@SpringBootApplication
@ComponentScan(basePackages = {"com.example.a", "com.example.b"})
public class ApplicationB {
    public static void main(String[] args) {
        SpringApplication.run(ApplicationB.class, args);
    }
}

或者直接将config放在B模块目录下,但是如果其他模块也有分页操作,需要写重复的代码,不便于维护,最好是将config都放在同一个模块下,别的模块在依赖中引用即可。
如,在 B 模块的 pom.xml 中添加对 A 模块的依赖:

<dependency>
    <groupId>com.example</groupId>
    <artifactId>module-a</artifactId>
    <version>1.0.0</version>
</dependency>

3. 业务代码

只需要给定pageNum(分页当前页)和pageSize(总页数)即可。

  1. controller层:

    package com.whl.info.controller;
    
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import com.whl.entity.result.Result;
    import com.whl.info.entity.dto.ArticleDto;
    import com.whl.info.entity.dto.ArticlePageDto;
    import com.whl.info.entity.vo.ArticleVo;
    import com.whl.info.service.ArticleService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.*;
    
    import java.util.List;
    
    @RestController
    @RequestMapping("/article/")
    public class ArticleController {
    
        @Autowired
        private ArticleService articleService;
    
        /**
         * 分页查询文章列表
         * @param articlePageDto
         * @return
         */
        @PostMapping("articleListPage")
        public Result<Page<ArticleVo>> getArticleListByPage(@RequestBody ArticlePageDto articlePageDto){
            Page<ArticleVo> articleVoPage = articleService.getArticleListByPage(articlePageDto);
            return Result.success(articleVoPage);
        }
    }
    
  2. service层:

    public interface ArticleService {
        Page<ArticleVo> getArticleListByPage(ArticlePageDto articlePageDto);
    }
    
    
    package com.whl.info.service.impl;
    
    import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
    import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
    import com.baomidou.mybatisplus.core.metadata.IPage;
    import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
    import com.mysql.cj.util.StringUtils;
    import com.whl.info.entity.dto.ArticleDto;
    import com.whl.info.entity.dto.ArticlePageDto;
    import com.whl.info.entity.vo.ArticleVo;
    import com.whl.info.mapper.ArticleMapper;
    import com.whl.info.service.ArticleService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.stereotype.Service;
    
    import java.util.List;
    
    @Service
    public class ArticleServiceImpl implements ArticleService {
    
        @Autowired
        private ArticleMapper articleMapper;
    
        @Override
        public Page<ArticleVo> getArticleListByPage(ArticlePageDto articlePageDto) {
            //1. 分页对象
            Page<ArticleVo> articleVoPage = new Page<>(articlePageDto.getPageNum(), articlePageDto.getPageSize());
    
            //2. 查询条件
            LambdaQueryWrapper<ArticleVo> queryWrapper = new LambdaQueryWrapper<>();
            //校验入参,条件查询
            if (!StringUtils.isNullOrEmpty(articlePageDto.getArticleName())){
                queryWrapper.like(ArticleVo::getArticleTitle, articlePageDto.getArticleName());
            }
            if (!StringUtils.isNullOrEmpty(articlePageDto.getStartTime()) && !StringUtils.isNullOrEmpty(articlePageDto.getEndTime())){
                queryWrapper.between(ArticleVo::getPublishTime,articlePageDto.getStartTime(), articlePageDto.getEndTime());
            }else if (!StringUtils.isNullOrEmpty(articlePageDto.getStartTime())){
                queryWrapper.ge(ArticleVo::getPublishTime, articlePageDto.getStartTime());
            }else if (!StringUtils.isNullOrEmpty(articlePageDto.getEndTime())){
                queryWrapper.le(ArticleVo::getPublishTime, articlePageDto.getEndTime());
            }
            if (articlePageDto.getArticleCategory() != null){
                queryWrapper.eq(ArticleVo::getArticleCategory, articlePageDto.getArticleCategory());
            }
    
            //3. 执行查询
            Page<ArticleVo> voPage = articleMapper.selectPage(articleVoPage, queryWrapper);
    
            return voPage;
        }
    }
    
  3. mapper层:

    @Mapper
    public interface ArticleMapper extends BaseMapper<ArticleVo> {
    }
    
    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    <mapper namespace="com.whl.info.mapper.ArticleMapper">
    
    
    </mapper>
    

4. 实体类

  1. dto代表传参
    package com.whl.info.entity.dto;
    
    import com.whl.entity.page.PageVo;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public class ArticlePageDto {
        /**
         * 文章名称
         */
        private String articleName;
    
        /**
         * 开始时间
         */
        private String startTime;
    
        /**
         * 结束时间
         */
        private String endTime;
    
        /**
         * 文章类型
         */
        private Integer articleCategory;
    
        /**
         * 当前页
         */
        private Integer pageNum;
    
        /**
         * 每页大小
         */
        private Integer pageSize;
    }
    
  2. vo代表回参
    package com.whl.info.entity.vo;
    
    import com.baomidou.mybatisplus.annotation.IdType;
    import com.baomidou.mybatisplus.annotation.TableField;
    import com.baomidou.mybatisplus.annotation.TableId;
    import com.baomidou.mybatisplus.annotation.TableName;
    import lombok.AllArgsConstructor;
    import lombok.Data;
    import lombok.NoArgsConstructor;
    
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    @TableName("article_info")
    public class ArticleVo {
    
        /**
         * 主键自增
         */
        @TableId(type = IdType.AUTO)
        private Integer id;
    
        /**
         * 文章封面
         */
        @TableField("article_pic_url")
        private String articlePicUrl;
    
        /**
         * 文章标题
         */
        @TableField("article_title")
        private String articleTitle;
    
        /**
         * 文章分类
         */
        @TableField("article_category")
        private Integer articleCategory;
    
        /**
         * 发布时间
         */
        @TableField("publish_time")
        private String publishTime;
    
        /**
         * 置顶
         */
        @TableField("on_head")
        private Integer onHead;
    
        /**
         * 创建时间
         */
        @TableField("create_time")
        private String createTime;
    
        /**
         * 是否删除
         */
        @TableField("is_delete")
        private Integer isDelete;
    }
    

总结

  1. 引入依赖,注意版本问题
  2. 写好config配置类,注意扫描配置类的路径配置
  3. 传参pageNum和pageSize给定

以上为个人学习分享,如有问题,欢迎指出:)

相关文章:

  • 基础dp——动态规划
  • AIGC-Stable Diffusion模型介绍
  • 数据库高安全—openGauss安全整体架构安全认证
  • GEE | 基于Landsat的1984-2024年归一化水体指数NDWI分析
  • 网络传输的七层协议
  • 7. 数组的动态创建
  • BFS(广度优先搜索)的理解与代码实现
  • 【NLP算法面经】腾讯 WXG 技术研究-NLP算法三面复盘(★附面题整理★)
  • [Windows] 通达信MPV1.23绿色免安装,整合DeepSeek版
  • 2024信息技术、信息安全、网络安全、数据安全等国家标准合集共125份。
  • 【js逆向入门】图灵爬虫练习平台 第七题
  • 学术论文项目网站搭建教程【Github】
  • SF-HCI-SAP问题收集1
  • FunAudioLLM:用语音大模型解锁智能语音交互的无限可能
  • ZT10 游游的除2操作
  • 《FFTformer:基于频域的高效Transformer用于高质量图像去模糊》
  • uniprot系列相关数据库介绍
  • Leetcode-668. Kth Smallest Number in Multiplication Table[C++][Java]
  • 鸿蒙5.0实战案例:基于AVCodecKit的音视频解码及二次处理播放
  • 算法与数据结构(旋转链表)
  • 秦洪看盘|上市公司业绩“排雷”近尾声,A股下行压力趋缓
  • 解读|特朗普“助攻”下加拿大自由党“惨胜”,卡尼仍需克服“特鲁多阴影”
  • 准80后湖北省财政厅副厅长徐晶华已调任襄阳市副市长
  • 北京公园使用指南
  • 学校食堂饭菜有蛆?举报人遭值班人员辱骂?四川苍溪县教育局回应
  • 2025厦门体育产业采风活动圆满举行