引入 common_utils

首先需要引入 common_utils 依赖的模块为 ​​common_base​

项目搭建与创作者接口-创作者CRUD_数据

<dependencies>
<dependency>
<groupId>top.it6666</groupId>
<artifactId>common_utils</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
</dependencies>

然后紧接着 ​​service​​ 模块也引入了 common_utils 了为啥呢,看下图

项目搭建与创作者接口-创作者CRUD_数据_02

分页查询

配置 Mp 分页插件

至于修改那个模块中的那个文件我就以为图来表示了,以文字太麻烦了如下图,当然了你可以手写也可以直接拷贝我下方给出来的代码

项目搭建与创作者接口-创作者CRUD_分页查询_03

/**
* <p>
* 配置分页插件
* </p>
*/
@Bean
public PaginationInterceptor paginationInterceptor() {
return new PaginationInterceptor();
}

然后在作者控制器中编写分页查询的代码,如下图

项目搭建与创作者接口-创作者CRUD_Project_04

/**
* <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 当中的实体,是用与前端交互封装数据对象的实体类

项目搭建与创作者接口-创作者CRUD_分页查询_05

/**
* @author BNTang
*/
@Data
public class AuthorQuery {
private String name;
private Integer level;
private String begin;
private String end;
}

在分页方法当中添加查询的参数,在添加之前需要修改掉请求方式为 Post,get 请求没有办法传递 JSON,mp 生成的基础服务的分页方法满足不了我们自己的需求,这个时候我们需要自己手动的去添加方法并实现,修改 ​​AuthorService.java​​ 添加如下方法

项目搭建与创作者接口-创作者CRUD_分页查询_06

/**
* 带条件查询的分页
*
* @param pageInfo 分页信息
* @param authorQuery 查询条件
*/
void pageQuery(Page<Author> pageInfo, AuthorQuery authorQuery);

紧接着就是在对应的实现类当中进行实现该方法

项目搭建与创作者接口-创作者CRUD_Project_07

@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​​ 修改内容如下图,当然你可以直接拷贝我下面的代码

项目搭建与创作者接口-创作者CRUD_Project_08

/**
* <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 页面进行测试一下接口效果如下图

项目搭建与创作者接口-创作者CRUD_数据_09

根据 ID 查询

测试自行访问 swagger 自测,后续不在贴图,代码如下修改 ​​AuthorController.java​

项目搭建与创作者接口-创作者CRUD_分页_10

/**
* <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 的依赖

项目搭建与创作者接口-创作者CRUD_数据_11

创建处理器, 设置自动填充日期

项目搭建与创作者接口-创作者CRUD_分页查询_12

/**
* @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);
}
}

在实体类当中添加自动填充的注解

项目搭建与创作者接口-创作者CRUD_分页_13

@TableField(fill = FieldFill.INSERT)
@TableField(fill = FieldFill.INSERT_UPDATE)

然后继续完善添加创作者的接口,修改 ​​AuthorController​

项目搭建与创作者接口-创作者CRUD_数据_14

/**
* <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​

项目搭建与创作者接口-创作者CRUD_Project_15

/**
* <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();
}
}