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(总页数)即可。
-
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); } }
-
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; } }
-
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. 实体类
- 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; }
- 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; }
总结
- 引入依赖,注意版本问题
- 写好config配置类,注意扫描配置类的路径配置
- 传参pageNum和pageSize给定
以上为个人学习分享,如有问题,欢迎指出:)