前置:需要先创建好项目,并且使用mabtis根据数据表生成好代码
mybatis plus自动生成代码(代码生成器)_wa1ttinG的博客-CSDN博客
一、controller层定义
controller层就是和用户打交道,直接与前端进行交互。可调用service层,要先的到对象一般使用自动装配,因此controller层总是使用@Autowired得到一个service对象。
二、controller类简单示例
定义了一个对与教师的teacher的controller业务
@RestController
@RequestMapping("/eduservice/teacher")
public class EduTeacherController {
@Autowired
private EduTeacherService teacherService;
@GetMapping("findAll")
public List<EduTeacher> findAllTeacher() {
List<EduTeacher> list = teacherService.list(null);
return list;
}
}
teacherService是由mabtis自动创建的Service层
将返回值作为json对象返回:@RestController
其源码
package org.springframework.web.bind.annotation;
import ...
@Target({ElementType.TYPE})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Controller
@ResponseBody
public @interface RestController {
@AliasFor(
annotation = Controller.class
)
String value() default "";
}
就是可以看到其有两个注解@Controller和@ResponseBody(注解具有继承性?),RestController是这两个的结合体,也就是@Controller:创建bean对象,@ResponseBody:注解表示该方法的返回的结果(return的结果)直接转换为json数据写入 HTTP 响应正文中,返回值就是响应结果!!
返回的JSON时间格式的时区也需要修改,且格式也不是我们想要的。
"2019-10-30T06:18:46.000+0000" |
进行修改,在application.properties中设置
#返回json的全局时间格式
spring.jackson.date-format=yyyy-MM-dd HH:mm:ss
spring.jackson.time-zone=GMT+8
@RequestMapping
前端访问什么url 该controller进行工作,多用于Controller类上,比如
@RestController
@RequestMapping("/eduservice/teacher")
public class EduTeacherController {
那么如果前端发送请求路径是/eduservice/teacher时,由EduTeacherController接手请求,再根据细节路径和请求方式匹配Controller中函数,需要注意路径前必须要加/。
RequestMapping一般命名为模块名+mysql表名(实体名),这样可以方便的知道是对哪个模块下的哪个表的操作。
三、增删改查操作实现
前置知识1:Restful路径
假设要对教师teacher进行操作
方式 | url | 意义 |
get | /teacher | 获取全部员工信息 |
get | /teacher/{id} | 获取该id的员工信息 |
post | /teacher | 添加(一条)员工信息 |
put | /teacher | 更新员工信息 |
delete | /teacher/{id} | 删除员工信息 |
助记:获取全部教师信息不需要添加id、更新和添加教师信息使用post方式传给后端一个类,也不需要额外指明id。
前置知识2:四种请求方式匹配
@GetMapping、@PostMapping、@DeleteMapping、@PutMapping
四种mapping通常作用于controller层中的函数上
这个路径可以不加/,随意,与所属controller的mapping拼接形成最终的访问路径。
1、查询所有数据
@GetMapping("findAll")
public List<EduTeacher> findAllTeacher() {
List<EduTeacher> list = teacherService.list(null);
return list;
}
比如@GetMapping("findAll"),就是前端发送的Get请求、且url是"/eduservice/teacher/findAll",此时该 函数就会生效,处理该请求。
2、删除一个数据
再比如删除操作,因为RequestMapping已经设定好了模块与表名的url:"/eduservice/teacher"
此时我们只需要在url上一个员工id就好了,并且使用的是delete方法,这样就可以通过url:"/eduservice/teacher/{某个id}"来调用该删除功能。
@DeleteMapping("{id}")
public boolean removeTeacher(@PathVariable String id){
boolean flag = teacherService.removeById(id);
return flag;
}
我们在参数中使用到了 @PathVariable 这个注解,@PathVariable String id是一种省略的写法,实际上就是@PathVariable(value="id") String id,将url的id映射到id这个变量上来。
controller返回值
mybatis在mapper层的增删改操作的返回值都是一个int类型的result,表示最终作用的行数,查操作则返回结果值或实体对象
mybatis在server层的增删改的实现的返回值都是一个bolean类型的值,表示是否修改成功,1为成功,0为失败,查操作则返回结果值或实体对象
因此我们的controller层增删改的返回值自然要选择bolean,因为其直接与server层交互
返回值规范