引入 common_utils
首先需要引入 common_utils 依赖的模块为 common_base
<dependencies>
<dependency>
<groupId>top.it6666</groupId>
<artifactId>common_utils</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>
然后紧接着 service
模块也引入了 common_utils 了为啥呢,看下图
分页查询
配置 Mp 分页插件
至于修改那个模块中的那个文件我就以为图来表示了,以文字太麻烦了如下图,当然了你可以手写也可以直接拷贝我下方给出来的代码
代码语言:java复制/**
* <p>
* 配置分页插件
* </p>
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}
然后在作者控制器中编写分页查询的代码,如下图
代码语言:java复制/**
* <p>
* 分页查询创作者
* </p>
*/
@ApiOperation(value = "作者分页列表数据")
@GetMapping("/pageList/{page}/{limit}")
public ResponseResult pageList(
@ApiParam(name = "page", value = "当前页", required = true) @PathVariable Long page,
@ApiParam(name = "limit", value = "每页记录数", required = true) @PathVariable Long limit) {
// 分页查询
Page<Author> pageInfo = new Page<>(page, limit);
authorService.page(pageInfo, null);
// 获取当前页的数据
List<Author> records = pageInfo.getRecords();
// 获取总记录
long total = pageInfo.getTotal();
return ResponseResult.ok().data("total", total).data("rows", records);
}
添加分页条件筛选
- 需求:根据名称
name
,头衔level
、时间gmt_create
- 把前端传的数据给封装到一个类当中, 放到
VO
包中,新建VO
包 - vo 当中的实体,是用与前端交互封装数据对象的实体类
/**
* @author BNTang
*/
@Data
public class AuthorQuery {
private String name;
private Integer level;
private String begin;
private String end;
}
在分页方法当中添加查询的参数,在添加之前需要修改掉请求方式为 Post,get 请求没有办法传递 JSON,mp 生成的基础服务的分页方法满足不了我们自己的需求,这个时候我们需要自己手动的去添加方法并实现,修改 AuthorService.java
添加如下方法
/**
* 带条件查询的分页
*
* @param pageInfo 分页信息
* @param authorQuery 查询条件
*/
void pageQuery(Page<Author> pageInfo, AuthorQuery authorQuery);
紧接着就是在对应的实现类当中进行实现该方法
代码语言:java复制@Override
public void pageQuery(Page<Author> pageInfo, AuthorQuery authorQuery) {
QueryWrapper<Author> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByAsc("sort");
if (Objects.isNull(authorQuery)) {
// 没有条件
baseMapper.selectPage(pageInfo, queryWrapper);
return;
}
// 有条件,判断条件是否为空
if (!StringUtils.isEmpty(authorQuery.getName())) {
// 模糊查询 name
queryWrapper.like("name", authorQuery.getName());
}
if (!Objects.isNull(authorQuery.getLevel())) {
queryWrapper.eq("level", authorQuery.getLevel());
}
// 查询创建的时间大于等于开始时间
if (!StringUtils.isEmpty(authorQuery.getBegin())) {
queryWrapper.ge("gmt_create", authorQuery.getBegin());
}
// 查询创建的时间在小于等于结束时间
if (!StringUtils.isEmpty(authorQuery.getEnd())) {
queryWrapper.le("gmt_create", authorQuery.getEnd());
}
baseMapper.selectPage(pageInfo, queryWrapper);
}
修改 AuthorController
修改内容如下图,当然你可以直接拷贝我下面的代码
/**
* <p>
* 分页查询创作者,还可以添加过滤条件进行查询
* </p>
*/
@ApiOperation(value = "作者分页列表数据")
@PostMapping("/pageList/{page}/{limit}")
public ResponseResult pageList(
@ApiParam(name = "page", value = "当前页", required = true) @PathVariable Long page,
@ApiParam(name = "limit", value = "每页记录数", required = true) @PathVariable Long limit,
@ApiParam(name = "authorQuery", value = "查询对象")
@RequestBody(required = false) AuthorQuery authorQuery) {
// 分页查询
Page<Author> pageInfo = new Page<>(page, limit);
authorService.pageQuery(pageInfo, authorQuery);
// 获取当前页的数据
List<Author> records = pageInfo.getRecords();
// 获取总记录
long total = pageInfo.getTotal();
return ResponseResult.ok().data("total", total).data("rows", records);
}
改造完毕之后访问 swagger 页面进行测试一下接口效果如下图
根据 ID 查询
测试自行访问 swagger 自测,后续不在贴图,代码如下修改 AuthorController.java
/**
* <p>
* 根据id查询作者
* </p>
*
* @param id 作者Id
* @return 查询到的作者
*/
@ApiOperation(value = "根据id查询作者")
@GetMapping("/getAuthorWithId/{id}")
public ResponseResult getAuthorWithId(
@ApiParam(name = "id", value = "作者的id", required = true) @PathVariable String id) {
Author author = authorService.getById(id);
return ResponseResult.ok().data("item", author);
}
添加作者
配置自动填充
移动 mp 依赖的位置原先 mp 依赖是放在 service 模块当中,现在移动到 common_base 当中因为我们在 service 引入了 common_base 所以就会包含 mp 的依赖
创建处理器, 设置自动填充日期
代码语言:java复制/**
* @author BNTang
**/
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
this.setFieldValByName("gmtCreate", new Date(), metaObject);
this.setFieldValByName("gmtModified", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
this.setFieldValByName("gmtModified", new Date(), metaObject);
}
}
在实体类当中添加自动填充的注解
代码语言:java复制@TableField(fill = FieldFill.INSERT)
代码语言:java复制@TableField(fill = FieldFill.INSERT_UPDATE)
然后继续完善添加创作者的接口,修改 AuthorController
/**
* <p>
* 添加作者
* </p>
*
* @param author 需要添加的创作者
* @return 添加结果
*/
@ApiOperation(value = "添加作者")
@PostMapping("/addAuthor")
public ResponseResult addAuthor(
@ApiParam(name = "author", value = "作者对象", required = true) @RequestBody Author author) {
authorService.save(author);
return ResponseResult.ok();
}
更新创作者
修改 AuthorController
/**
* <p>
* 更新创作者
* </p>
*
* @param author 更新的创作者
* @return 更新结果
*/
@ApiOperation(value = "更新创作者")
@PostMapping("/updateAuthor")
public ResponseResult updateAuthor(
@ApiParam(name = "author", value = "作者对象", required = true) @RequestBody Author author) {
boolean flag = authorService.updateById(author);
if (flag) {
return ResponseResult.ok();
} else {
return ResponseResult.error();
}
}
最后
我正在参与2023腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!