谷粒 | 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();
}
}