【VIDEO_Parent】-项目搭建与创作者接口-创作者CRUD

2023-11-29 22:33:13 浏览数 (2)

引入 common_utils

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

代码语言:html复制
<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 当中的实体,是用与前端交互封装数据对象的实体类
代码语言:java复制
/**
 * @author BNTang
 */
@Data
public class AuthorQuery {
    private String name;
    private Integer level;
    private String begin;
    private String end;
}

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

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

代码语言:java复制
/**
 * <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

代码语言: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

代码语言:java复制
/**
 * <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

代码语言:java复制
/**
 * <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腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

0 人点赞