青海省住房和城乡建设厅 网站首页百度广告投诉电话
文章目录
- 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 {@Beanpublic 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 {@Autowiredprivate 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 {@Autowiredprivate ArticleMapper articleMapper;@Overridepublic 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给定
以上为个人学习分享,如有问题,欢迎指出:)