老师模块实现
- 一、实现讲师列表接口
- 1.1 POJO
- 1.2 mapper
- 1.3 service
- 1.4 controller
- 1.5 拷贝配置类
- 1.6 测试
- 二、讲师逻辑删除
- 2.1 controller中添加删除方法
- 2.2 完善JavaBean:EduTeacher
- 2.3 配置Handler
- 2.4 配置application.yml 文件
- 2.5 逻辑删除测试
- 三、分页条件查询
- 3.1 分页条件查询
- 3.1.1 创建 TeacherVo
- 3.1.2 controller
- 3.1.3 service
- 3.2 分页条件查询测试
- 四、讲师新增和修改
- 4.1 讲师新增
- 4.2 根据ID查询
- 4.3 修改
- 4.4 批量处理
- 4.5 修改处理类:自动填充
一、实现讲师列表接口
1.1 POJO
- 在z-domain项目中创建实体类EduTeacher
- TeacherVo
@Data//lombok注解
@ApiModel(value = "EduTeacher对象",description = "讲师")//swagger注解
//@TableName("edu_teacher")
public class EduTeacher {
@TableId(value = "id",type = IdType.AUTO)//mybatis-plus的注解
@ApiModelProperty(value = "讲师ID")//swagger注解
private Integer id;
@ApiModelProperty(value = "讲师姓名")
private String name;
@ApiModelProperty(value = "讲师资历,一句话说明讲师")
private String intro;
@ApiModelProperty(value = "讲师简介")
private String career;
@ApiModelProperty(value = "头衔 1高级讲师 2首席讲师")
private Integer level;
@ApiModelProperty(value = "讲师头像")
private String avatar;
@ApiModelProperty(value = "讲师排序")
private Integer sort;
@ApiModelProperty(value = "逻辑删除 1已删除, 0未删除")
@TableField(value = "is_deleted",fill = FieldFill.INSERT)
@TableLogic//逻辑删除
private Integer isDeleted;
@ApiModelProperty(value = "创建时间")
@TableField(value = "gmt_create",fill = FieldFill.INSERT)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date gmtCreate;
@ApiModelProperty(value = "更新时间")
@TableField(value = "gmt_modified",fill = FieldFill.INSERT_UPDATE)
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
private Date gmtModified;
}
1.2 mapper
@Mapper
public interface EduTeacherMapper extends BaseMapper<EduTeacher> {
}
1.3 service
- 接口
public interface EduTeacherService extends IService<EduTeacher> {
}
- 实现类
@Service
public class EduTeacherServiceImpl extends ServiceImpl<EduTeacherMapper, EduTeacher> implements EduTeacherService {
}
1.4 controller
@RestController
@RequestMapping("/teacher")
@Api(tags = "老师接口", description = "老师接口描述,完成增删改查操作") //swagger 类级别的注解,显示中文类名
public class EduTeacherController {
@Resource
private EduTeacherService eduTeacherService;
/**
* 查询所有
* @return
*/
@GetMapping
@ApiOperation(value = "查询所有老师") //swagger 方法级别的注解,显示中文方法名
public BaseResult<List<EduTeacher>> selectAll() {
// 查询
List<EduTeacher> list = eduTeacherService.list();
// 返回
return BaseResult.ok("查询成功", list);
}
}
1.5 拷贝配置类
- MyBatisPlusConfig
@Component
public class MyBatisPlusConfig {
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor(){
MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return mybatisPlusInterceptor;
}
}
- Swagger2ConfigurationV3
/**
* Swagger2 配置类,
* 访问路径:swagger-ui.html
* 自动注册:
* 位置:resources/META-INF/spring.factories
* 内容:
* org.springframework.boot.autoconfigure.EnableAutoConfiguration=\
* com.czxy.changgou4.config.Swagger2Configuration
*/
@Configuration
@EnableSwagger2
public class Swagger2ConfigurationV3 {
@Bean
public Docket createRestApi() {
// 1 确定文档Swagger版本
Docket docket = new Docket(DocumentationType.SWAGGER_2);
// 2 设置 api基本信息
docket.apiInfo(apiInfo());
// 3 设置自定义加载路径
docket = docket.select()
.apis(RequestHandlerSelectors.basePackage("com.czxy"))
.paths(PathSelectors.any())
.build();
//4 设置权限
docket.securitySchemes(securitySchemes());
docket.securityContexts(securityContexts());
return docket;
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("API")
.description("基于swagger接口文档")
.contact(new Contact("xxx","http://www.xxx.com"))
.version("1.0")
.build();
}
private List<ApiKey> securitySchemes() {
List<ApiKey> list = new ArrayList<>();
// name 为参数名 keyname是页面传值显示的 keyname, name在swagger鉴权中使用
list.add(new ApiKey("Authorization", "Authorization", "header"));
return list;
}
private List<SecurityContext> securityContexts() {
List<SecurityContext> list = new ArrayList<>();
list.add(SecurityContext.builder()
.securityReferences(defaultAuth())
.forPaths(PathSelectors.regex("^(?!auth).*$"))
.build());
return list;
}
private List<SecurityReference> defaultAuth() {
AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
authorizationScopes[0] = authorizationScope;
List<SecurityReference> list = new ArrayList();
list.add(new SecurityReference("Authorization", authorizationScopes));
return list;
}
}
1.6 测试
二、讲师逻辑删除
2.1 controller中添加删除方法
/**
* 通过id删除
* @param teacherId
* @return
*/
@ApiOperation(value = "根据ID删除讲师")
@ApiImplicitParams(value = {
@ApiImplicitParam(name = "teacherId", value = "讲师ID", required = true,paramType = "path")//方式一
})
@DeleteMapping("/{teacherId}")
public BaseResult deleteById(@PathVariable("teacherId") Integer teacherId) {
// 删除操作
boolean result = eduTeacherService.removeById(teacherId);
// 处理
if(result) {
return BaseResult.ok("删除成功");
}
return BaseResult.error("删除失败");
}
2.2 完善JavaBean:EduTeacher
@ApiModelProperty(value = "逻辑删除 1(true)已删除, 0(false)未删除")
@TableLogic
@TableField(fill = FieldFill.INSERT, value = "is_deleted")
private Boolean isDeleted;
2.3 配置Handler
@Component
public class TeacherMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
// 添加时,填充的内容
// this.setFieldValByName("字段名", 字段值 , metaObject);
this.setFieldValByName("isDeleted",0 , metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
// 修改时,填充的内容
}
}
2.4 配置application.yml 文件
- 配置指定删除和不删除的状态。
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
global-config:
db-config:
logic-delete-value: 1
logic-not-delete-value: 0
2.5 逻辑删除测试
三、分页条件查询
3.1 分页条件查询
3.1.1 创建 TeacherVo
- TeacherVo
@Data
public class TeacherVo {
private String name; //讲师姓名
private String level; //头衔
private String beginDate; //开始时间
private String endDate; //结束时间
}
3.1.2 controller
/**
* 条件 + 分页 查询
* @param teacherVo
* @param size
* @param current
* @return
*/
@ApiOperation("条件+分页查询")
@PostMapping("/condition/{size}/{current}")
public BaseResult condition(
@RequestBody TeacherVo teacherVo,
@PathVariable("size") Integer size,
@PathVariable("current") Integer current) {
// 条件查询 + 分页
Page<EduTeacher> page = eduTeacherService.condition(teacherVo, size, current);
// 返回
return BaseResult.ok("查询成功", page);
}
3.1.3 service
- 接口
/**
* 条件 + 分页 查询
* @param teacherVo
* @param size
* @param current
* @return
*/
Page<EduTeacher> condition(TeacherVo teacherVo, Integer size, Integer current);
- 实现类
@Override
public Page<EduTeacher> condition(TeacherVo teacherVo, Integer size, Integer current) {
//1 条件
QueryWrapper<EduTeacher> queryWrapper = new QueryWrapper<>();
// 1.1 姓名 模糊
if(StringUtils.isNotBlank(teacherVo.getName())) {
queryWrapper.like("name", teacherVo.getName());
}
// 1.2 头衔 精确(等值)
if(StringUtils.isNotBlank(teacherVo.getLevel())) {
queryWrapper.eq("level", teacherVo.getLevel());
}
// 1.3 创建时间 范围
if(StringUtils.isNotBlank(teacherVo.getBeginDate())) {
queryWrapper.ge("gmt_create", teacherVo.getBeginDate() + " 00:00:00" );
}
if(StringUtils.isNotBlank(teacherVo.getEndDate())) {
queryWrapper.le("gmt_create", teacherVo.getEndDate() + " 23:59:59");
}
//2 分页
Page<EduTeacher> page = new Page<>(current, size);
//3 查询
baseMapper.selectPage(page, queryWrapper);
//4 关联
//5 返回
return page;
}
3.2 分页条件查询测试
四、讲师新增和修改
4.1 讲师新增
- controller
/**
* 添加老师
* @param eduTeacher
* @return
*/
@ApiOperation("添加")
@PostMapping
public BaseResult save(@ApiParam(name = "eduTeacher", value = "老师" , required = true) @RequestBody EduTeacher eduTeacher) {
if(true) {
// throw new RuntimeException("用户存在");
// throw new EduException("用户存在");
// 将上面的代码抽取工具类
// ExceptionUtils.cast("用户已存在");
}
// 保存
boolean result = eduTeacherService.save(eduTeacher);
// 提示
if(result) {
return BaseResult.ok("添加成功");
}
return BaseResult.error("添加失败");
}
4.2 根据ID查询
- controller
/**
* 通过id查询详情
* @param teacherId
* @return
*/
@GetMapping("/{teacherId}")
public BaseResult<EduTeacher> findById(@PathVariable("teacherId") Integer teacherId ) {
// int i = 1 / 0;
// 查询
EduTeacher eduTeacher = eduTeacherService.getById(teacherId);
if(eduTeacher != null) {
// 返回
return BaseResult.ok("查询成功", eduTeacher);
}
return BaseResult.error("查询失败");
}
4.3 修改
- controller
/**
* 修改
* @param eduTeacher
* @return
*/
@PutMapping
public BaseResult updateById(@RequestBody EduTeacher eduTeacher) {
// 修改
boolean result = eduTeacherService.updateById(eduTeacher);
// 返回
if(result) {
return BaseResult.ok("修改成功");
}
return BaseResult.error("修改失败");
}
4.4 批量处理
- controller
/**
* 批量删除
* @param ids
* @return
*/
@PostMapping("/batchDelete")
public BaseResult batchDelete(@RequestBody List<Integer> ids) {
// 批量删除
boolean result = eduTeacherService.removeByIds(ids);
// 返回
if(result) {
return BaseResult.ok("批量删除成功");
}
return BaseResult.error("批量删除失败");
}
4.5 修改处理类:自动填充
- handler
@Component
public class TeacherMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
// 添加-自动填充数据
setFieldValByName("isDeleted", 0, metaObject);
// 添加时间、修改时间
setFieldValByName("gmtCreate", new Date(), metaObject);
setFieldValByName("gmtModified", new Date(), metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
// 修改时间
setFieldValByName("gmtModified", new Date(), metaObject);
}
}