tlias
- 1 需求分析和开发规范
- 2 部门管理
- 2.1 查询部门
- 2.2 删除部门
- 2.3 添加部门
- 2.4 更新部门
1 需求分析和开发规范
需求说明–接口文档–思路分析–开发–测试–前后端联调
-
查看页面原型明确需求
- 根据页面原型和需求,进行表结构设计、编写接口文档(已提供)
-
阅读接口文档
-
思路分析
-
功能接口开发
- 就是开发后台的业务功能,一个业务功能,我们称为一个接口
-
功能接口测试
- 功能开发完毕后,先通过Postman进行功能接口测试,测试通过后,再和前端进行联调测试
-
前后端联调测试
- 和前端开发人员开发好的前端工程一起测试
1 开发规范-Restful
http://localhost:8080/users/1 GET:查询id为1的用户 http://localhost:8080/users POST:新增用户 http://localhost:8080/users PUT:修改用户 http://localhost:8080/users/1 DELETE:删除id为1的用户
在REST风格的URL中,通过四种请求方式,来操作数据的增删改查。
- GET : 查询
- POST :新增
- PUT :修改
- DELETE :删除
2 开发规范-统一响应结果 Result
package com.itheima.pojo; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; @Data @NoArgsConstructor @AllArgsConstructor public class Result { private Integer code;//响应码,1 代表成功; 0 代表失败 private String msg; //响应信息 描述字符串 private Object data; //返回的数据 //增删改 成功响应 public static Result success(){ return new Result(1,"success",null); } //查询 成功响应 public static Result success(Object data){ return new Result(1,"success",data); } //失败响应 public static Result error(String msg){ return new Result(0,msg,null); } }
创建项目工程目录结构:
controller:控制层。存放控制器Controller mapper:持久层/数据访问层。存放mybatis的Mapper接口 pojo:存放实体类 service:业务层。存放业务代码
第1步:准备数据库表
第2步:创建一个SpringBoot工程,选择引入对应的起步依赖
第3步:配置文件application.properties中引入mybatis的配置信息,准备对应的实体类
第4步:准备对应的Mapper、Service(接口、实现类)、Controller基础结构
2 部门管理
开发的部门管理功能包含:
- 查询部门
- 删除部门
- 新增部门
- 更新部门
2.1 查询部门
DeptController
@Slf4j @RestController public class DeptController { @Autowired private DeptService deptService; //@RequestMapping(value = "/depts" , method = RequestMethod.GET) @GetMapping("/depts") public Result list(){ log.info("查询所有部门数据"); List
deptList = deptService.list(); return Result.success(deptList); } } DeptService(业务接口)
public interface DeptService { /** * 查询所有的部门数据 * @return 存储Dept对象的集合 */ List
list(); } DeptServiceImpl(业务实现类)
@Slf4j @Service public class DeptServiceImpl implements DeptService { @Autowired private DeptMapper deptMapper; @Override public List
list() { List deptList = deptMapper.list(); return deptList; } } DeptMapper
@Mapper public interface DeptMapper { //查询所有部门数据 @Select("select id, name, create_time, update_time from dept") List
list(); } 2.2 删除部门
请求路径:/depts/{id} 请求方式:DELETE 接口描述:该接口用于根据ID删除部门数据
问题1:怎么在controller中接收请求路径中的路径参数?
@PathVariable
问题2:如何限定请求方式是delete?
@DeleteMapping
DeptController
@Slf4j @RestController public class DeptController { @Autowired private DeptService deptService; @DeleteMapping("/depts/{id}") public Result delete(@PathVariable Integer id) { //日志记录 log.info("根据id删除部门"); //调用service层功能 deptService.delete(id); //响应 return Result.success(); } //省略... }
DeptService
public interface DeptService { /** * 根据id删除部门 * @param id 部门id */ void delete(Integer id); }
DeptServiceImpl
@Slf4j @Service public class DeptServiceImpl implements DeptService { @Autowired private DeptMapper deptMapper; @Override public void delete(Integer id) { //调用持久层删除功能 deptMapper.deleteById(id); } }
DeptMapper
@Mapper public interface DeptMapper { /** * 根据id删除部门信息 * @param id 部门id */ @Delete("delete from dept where id = #{id}") void deleteById(Integer id); }
2.3 添加部门
-
基本信息
请求路径:/depts 请求方式:POST 接口描述:该接口用于添加部门数据
DeptController
@Slf4j @RestController public class DeptController { @Autowired private DeptService deptService; @PostMapping("/depts") public Result add(@RequestBody Dept dept){ //记录日志 log.info("新增部门:{}",dept); //调用service层添加功能 deptService.add(dept); //响应 return Result.success(); } }
DeptService
public interface DeptService { /** * 新增部门 * @param dept 部门对象 */ void add(Dept dept); }
DeptServiceImpl
@Slf4j @Service public class DeptServiceImpl implements DeptService { @Autowired private DeptMapper deptMapper; @Override public void add(Dept dept) { //补全部门数据 dept.setCreateTime(LocalDateTime.now()); dept.setUpdateTime(LocalDateTime.now()); //调用持久层增加功能 deptMapper.inser(dept); } }
DeptMapper
@Mapper public interface DeptMapper { @Insert("insert into dept (name, create_time, update_time) values (#{name},#{createTime},#{updateTime})") void inser(Dept dept); }
2.4 更新部门
DeptController
@Slf4j @RestController public class DeptController { @Autowired private DeptService deptService; @GetMapping("/{id}") public Result puts(@PathVariable Integer id){ //调用service功能 Dept dept=deptService.updateById(id); log.info("根据id{}更新部门{}",id,dept); //响应 return Result.success(dept); } @PutMapping public Result update(@RequestBody Dept dept){ log.info("修改部门"); deptService.update(dept); //响应 return Result.success(); } }
DeptService
public interface DeptService { /** * 4 更新部门 * @param id ,dept */ Dept updateById(Integer id); void update(Dept dept); }
DeptServiceImpl
@Slf4j @Service public class DeptServiceImpl implements DeptService { @Autowired private DeptMapper deptMapper; @Override public Dept updateById(Integer id) { return deptMapper.updateById(id); } @Override public void update(Dept dept) { dept.setUpdateTime(LocalDateTime.now()); deptMapper.update(dept); } }
DeptMapper
@Mapper public interface DeptMapper { @Select("select * from dept where id= #{id}") Dept updateById(Integer id); @Update("update dept set name=#{name},update_time=#{updateTime} where id=#{id}") void update(Dept dept); }
使用postman 第一次是get请求,第二次是put请求
要与上述代码对应
测试前后端, 也是成功修改部门信息
-
还没有评论,来说两句吧...