任务:
接口:Controller,Service,Mapper
//创建数据库
crate database guli_edu;
use guli_edu;
//创建老师表
CREATE TABLE edu_teacher(
id char(19) PRIMARY KEY NOT NULL COMMENT '讲师ID',
name VARCHAR(20) NOT NULL COMMENT '讲师姓名',
intro VARCHAR(500) NOT NULL DEFAULT '' COMMENT '讲师简介',
career VARCHAR(500) DEFAULT NULL COMMENT '讲师资历,一句话说明讲师',
level int(10) UNSIGNED NOT NULL COMMENT '头衔 1高级讲师 2首席讲师',
avatar VARCHAR(255) DEFAULT NULL COMMENT '讲师头像',
sort int(10) UNSIGNED NOT NULL DEFAULT '0' COMMENT '排序',
is_deleted TINYINT(1) UNSIGNED NOT NULL DEFAULT '0' COMMENT '逻辑删除 1(true)已删除,0(false)未删除',
gmt_create datetime NOT NULL COMMENT '创建时间',
gmt_modified datetime NOT NULL COMMENT '更新时间',
UNIQUE KEY uk_name (name)
)ENGINE=INNODB DEFAULT CHARSET=utf8mb4 COMMENT='讲师'
本项目父工程为Spring Boot工程,子工程全部为Maven工程。
# 服务端口
server.port=8001
# 服务名
spring.application.name=service-edu
# 环境设置:dev(开发环境)、test(测试环境)、prod(生产环境)
spring.profiles.active=dev
# mysql数据库连接
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/guli?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=123456
#mybatis日志
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
1. 编写Controller代码:
2. 编写Config类
3. 编写启动类
4. 测试
输入http://localhost:8001/eduservice/edu-teacher/findAll,结果如下。
看到时间格式不是我们想要的默认情:况下json时间格式带有时区,并且是世界标准时间,和我们的时间差了八个小时。在application.properties中设置在配置文件中配置。
#返回json的全局时间格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
/**
* 逻辑删除插件
*/
@Bean
public ISqlInjector sqlInjector() {
return new LogicSqlInjector();
}
@ApiModelProperty(value = "逻辑删除 1(true)已删除,0(false)未删除")
@TableLogic
private Boolean isDeleted;
//逻辑删除讲师方法
@DeleteMapping("{id}")//id需要通过路径来传递
public boolean removeTeacher(@PathVariable String id){//获取路径中的ID值
boolean flag = teacherService.removeById(id);
return flag;
}
@Data
public class TeacherQuery {
@ApiModelProperty(value = "教师名称,模糊查询")
private String name;
@ApiModelProperty(value = "头衔 1高级讲师 2首席讲师")
private Integer level;
@ApiModelProperty(value = "查询开始时间", example = "2019-01-01 12:03:45")
private String begin;
@ApiModelProperty(value = "查询结束时间", example = "2019-12-02 12:23:56")
private String end;
}
//4.多条件组合查询带分页
@PostMapping("pageTeacherCondition/{current}/{limit}")
public R pageTeacherCondition(@PathVariable long current,//当前页
@PathVariable long limit,//页大小
@RequestBody(Required = false
)TeacherQuery teacherQuery//查询条件
){
//创建一个Page对象
Page<EduTeacher> pageTeacher = new Page<>(current, limit);
//构建条件
QueryWrapper<EduTeacher> wrapper = new QueryWrapper<>();
//多条件组合查询--------------------------------------
String name = teacherQuery.getName();
Integer level = teacherQuery.getLevel();
String begin = teacherQuery.getBegin();
String end = teacherQuery.getEnd();
if(!StringUtils.isEmpty(name)){
wrapper.like("name", name);
}
if(!StringUtils.isEmpty(level.toString())){
wrapper.eq("level", level);
}
if(!StringUtils.isEmpty(begin)){
wrapper.ge("gmt_create", begin);//大于等于开始时间
}
if(!StringUtils.isEmpty(end)){
wrapper.le("gmt_create", end);//小于等于结束时间
}
//调用方法实现查询分页
teacherService.page(pageTeacher, wrapper);//这里多了一个wrapper查询条件
long total = pageTeacher.getTotal();//返回数据 total
List<EduTeacher> records = pageTeacher.getRecords();//返回数据records
return R.ok().data("total", total).data("rows",records);//返回数据total+records
}
@RequestBody:使用Json传递数据,把Json数据封装到对应的对象里面;需要post传递数据,get取不到
@ResponseBody:返回Json格式的数据
@ApiModelProperty(value = "创建时间")
@TableField(fill = FieldFill.INSERT)//自动填充
private Date gmtCreate;
@ApiModelProperty(value = "更新时间")
@TableField(fill = FieldFill.INSERT_UPDATE)//自动填充
private Date gmtModified;
@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);
}
}
/******************* 5.添加讲师接口*************************/
@PostMapping("addTeacher")
public R addTeacher(@RequestBody EduTeacher eduTeacher){
boolean flag = teacherService.save(eduTeacher);
if(flag) return R.ok();
else return R.error();
}
//6.根据讲师ID进行查询
@GetMapping("getTeacher/{id}")
public R getTeacher(@PathVariable Integer id){
EduTeacher eduTeacher = teacherService.getById(id);
return R.ok().data("teacher", eduTeacher);
}
//7.讲师信息修改
@PostMapping("updateTeacher")
public R updateTeacher(@RequestBody EduTeacher eduTeacher){
boolean flag = teacherService.updateById(eduTeacher);
if(flag)return R.ok();
else return R.error();
}
@ControllerAdvice
public class GlobalExceptionHandler {
//指定出现了什么异常,会执行该方法
@ExceptionHandler(Exception.class)
@ResponseBody //为了返回数据
public R Error(Exception e){
e.printStackTrace();
return R.error().message("执行了全局异常处理...");
}
}
(完)