谷粒 | 03 | 后端接口:讲师模块增删改查

普通分页查询

开始阶段将所有业务写道控制层里便于理解,后续再逐渐拆分

1、配置类中引入MP分页组件

 //分页组件
    @Bean
    public PaginationInterceptor paginationInterceptor(){
        return new PaginationInterceptor();
    }

2、使用

  @ApiOperation("分页查询")
    @GetMapping("findByPage/{current}/{size}")
    public Result findByPage(@PathVariable long current,
                             @PathVariable long size){
        //创建page对象
        Page<EduTeacher> pageTeacher = new Page<>(current,size);

        //调用方法时候,底层封装,把分页所有数据封装到pageTeacher对象里面
        teacherService.page(pageTeacher,null);
        List<EduTeacher> records = pageTeacher.getRecords();
        long total = pageTeacher.getTotal();
        HashMap<String, Object> map = new HashMap<>();
        map.put("list",records);
        map.put("total",total);
        return Result.ok().data(map);
    }

多条件分页查询(wrapper)

1、将查询条件封装到对象里面,查询时传递对象即可

@Data
public class TeacherQuery {

    @ApiModelProperty(value = "教师名称,模糊查询")
    private String name;

    @ApiModelProperty(value = "头衔 1高级讲师 2首席讲师")
    private Integer level;

    @ApiModelProperty(value = "查询开始时间", example = "2019-01-01 10:10:10")
    private String begin;//注意,这里使用的是String类型,前端传过来的数据无需进行类型转换

    @ApiModelProperty(value = "查询结束时间", example = "2019-12-01 10:10:10")
    private String end;
}

2、使用

	//用@ResquestBody接收请求参数对象只能使用post请求
	@PostMapping("PageTeacherCondition/{current}/{size}")  
    public Result PageTeacherCondition(@PathVariable Long current,
                                       @PathVariable Long size,
                                       @RequestBody TeacherQuery teacherQuery) {

        Page<EduTeacher> teacherPage = new Page<>(current,size);
        //查询条件集querryWrapper
        QueryWrapper<EduTeacher> wrapper = new QueryWrapper();

        //查询条件
        String name = teacherQuery.getName();
        Integer level = teacherQuery.getLevel();
        String begin = teacherQuery.getBegin();
        String end = teacherQuery.getEnd();

        //动态sql。判断查询条件是否为空,不为空则拼接查询条件
        if (!StringUtils.isEmpty(name)) {
            wrapper.like("name",name);  //模糊查询
        }
        if (!StringUtils.isEmpty(level)) {
            wrapper.eq("level",level);
        }
        if(!StringUtils.isEmpty(begin)) {
            wrapper.ge("gmt_create",begin);
        }
        if(!StringUtils.isEmpty(end)) {
            wrapper.le("gmt_create",end);
        }
        
        //排序
        wrapper.orderByDesc("gmt_create");

        teacherService.page(teacherPage,wrapper);

        List<EduTeacher> records = teacherPage.getRecords();
        long total = teacherPage.getTotal();
        HashMap<String, Object> map = new HashMap<>();
        map.put("list",records);
        map.put("total",total);
        return Result.ok().data(map);

    }

添加

1、配置主键自增策略

//在自增字段id上添加自增注解
@TableId(value = "id", type = IdType.ID_WORKER_STR)
 private String id;

2、配置自动填充策略

在实体类属性上添加自动填充注解

    @ApiModelProperty(value = "创建时间")
    @TableField(fill = FieldFill.INSERT)
    private Date gmtCreate;

    @ApiModelProperty(value = "更新时间")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private Date gmtMod ified;

在公共配置模块下创建handler文件夹,在文件夹下创建自动填充配置类

@Component
@Slf4j
public class MyMetaObjectHandler implements MetaObjectHandler {
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("fill begin.....");
        //fieldName为实体类的属性名,不是数据库字段名
        this.setFieldValByName("gmtCreate",new Date(),metaObject);
        this.setFieldValByName("gmtModified",new Date(),metaObject);
        log.info("fill end.....");
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("update begin.....");
        this.setFieldValByName("gmtModified",new Date(),metaObject);
        log.info("update end.....");
    }
}

3、业务实现

@ApiOperation(value = "添加讲师")
    @PostMapping("insertTeacher")
    public Result insertTeacher(@RequestBody EduTeacher eduTeacher){
        boolean flag = teacherService.save(eduTeacher);
        if (flag) {
           return Result.ok();
        } else {
            return Result.error();
        }

    }

添加时不需要输入自动填充和自增的字段数据,这些都是自动生成

删除

根据id逻辑删除讲师信息

1、在逻辑删除属性上添加注解@TableLogic

@ApiModelProperty(value = "逻辑删除 1(true)已删除, 0(false)未删除")
@TableLogic
private Integer isDeleted;

2、在配置类中添加逻辑删除组件

@Configuration
@MapperScan("com.birdy.eduservice.mapper")
public class EduConfig {
    // 逻辑删除组件
    @Bean
    public ISqlInjector sqlInjector() {
        return new LogicSqlInjector();
    }
}

3、在application.properties中配置逻辑删除

# 配置逻辑删除
mybatis-plus.global-config.db-config.logic-delete-value=1  //删除后为1
mybatis-plus.global-config.db-config.logic-not-delete-value=0 //未删除为0

4、业务代码

@ApiOperation(value = "根据id逻辑删除讲师")
@DeleteMapping("delete/{id}")
public Result deleteTeacher(@PathVariable("id") String id){
    boolean flag = teacherService.removeById(id);
    if (flag) {
       return Result.ok(); //删除没有数据,只显示成功或失败
    }else {
       return Result.error();
    }

}
posted @ 2021-02-11 10:03  至安  阅读(126)  评论(0编辑  收藏  举报