前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【VIDEO_Parent】-项目搭建与创作者接口-创作者CRUD

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

原创
作者头像
BNTang
发布2023-11-29 22:33:13
1270
发布2023-11-29 22:33:13
举报

引入 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腾讯技术创作特训营第三期有奖征文,组队打卡瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 引入 common_utils
  • 分页查询
    • 配置 Mp 分页插件
    • 添加分页条件筛选
    • 根据 ID 查询
    • 添加作者
      • 配置自动填充
      • 更新创作者
      • 最后
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档