SpringBoot的SSMP整合案例
之前文章我们完成了SSMP的实体类,数据层,业务层,表现层这四个层的开发。
后端的主要流程就是 Controller(表现层)=>Service(业务层)=>Dao(数据层)=>数据库
当然我们前后端分离开发也需要进行最后的数据交互的,也就是说是
前端=>Controller(表现层) 进行数据交互。 这个时候就有问题了,后端返回的数据格式不同
- 增删改操作返回true和false
- 查单条操作返回Json数据
- 查全部操作返回Json数组
这样格式不同的数据大大增加了前端的工作负担,所以我们要学习秦王一统六国,进行 数据格式统一
表现层消息一致性处理
设计表现层返回结果的模型类,用于后端与前端进行数据格式统一,也称为 前后端数据协议 在controll包下创建一个utils包,在utils包下创建R类
import lombok.Data;
@Data
public class R {
private Boolean flag;
private Object data;
//空参构造
public R(){
}
public R(Boolean flag,Object data){
this.flag=flag;
this.data=data;
}
}
复制代码
表现层接口统一返回值类型结果
再对controller(表现层)进行代码改动,把返回值全部统一为R
controller类
package com.jikebensan.book.controller;
import com.jikebensan.book.controller.utils.R;
import com.jikebensan.book.domain.Book;
import com.jikebensan.book.service.IBookService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/books")
public class BookController {
@Autowired//注入业务层bean
private IBookService iBookService;
@GetMapping//获取全部
public R getall(){
return new R(true,iBookService.list());
}
@PostMapping//保存信息
public R save(@RequestBody Book book){
return new R(true,iBookService.save(book));
}
@PutMapping//修改信息
public R update(@RequestBody Book book){
return new R(true,iBookService.modify(book));
}
@DeleteMapping("{id}")//删除
public R delete(@PathVariable Integer id){
return new R(true,iBookService.delete(id));
}
@GetMapping("{id}")//根据id条件查询
public R getbyid(@PathVariable Integer id){
return new R(true,iBookService.get(id));
}
}
复制代码
这时候就会有人会问“为什么return new R(true,iBookService.save(book));,都要加一个判断条件结果为true?”
因为数据请求都已经到达业务层了,那就证明服务器在处理过程中没有出错,所以设置为true.
测试
编写完表现层,那我们就测一下吧。 测试代码如下
@Test
void test3(){
iBookService.delete(10);
}
复制代码
实现效果为删除数据库第10条数据
测试成功,删除失败,因为没有第10条数据。