6--SpringBootWeb案例(详解)

灯火不休ᝰ 2024-10-04 14:03:01 阅读 79

目录

环境搭建

部门管理

查询部门

接口文档

 代码

删除部门

接口文档

代码

新增部门

接口文档

代码


已有前端,根据接口文档完成后端功能的开发

成品如下:

环境搭建

1.

准备数据库表

(dept

emp)

<code>-- 部门管理

create table dept(

id int unsigned primary key auto_increment comment '主键ID',

name varchar(10) not null unique comment '部门名称',

create_time datetime not null comment '创建时间',

update_time datetime not null comment '修改时间'

) comment '部门表';

-- 部门表测试数据

insert into dept (id, name, create_time, update_time) values(1,'学工

部',now(),now()),(2,'教研部',now(),now()),(3,'咨询部',now(),now()), (4,'就业

部',now(),now()),(5,'人事部',now(),now());

-- 员工管理(带约束)

create table emp (

id int unsigned primary key auto_increment comment 'ID',

username varchar(20) not null unique comment '用户名',

password varchar(32) default '123456' comment '密码',

name varchar(10) not null comment '姓名',

gender tinyint unsigned not null comment '性别, 说明: 1 男, 2 女',

image varchar(300) comment '图像',

job tinyint unsigned comment '职位, 说明: 1 班主任,2 讲师, 3 学工主管, 4 教研主管, 5

咨询师',

entrydate date comment '入职时间',

dept_id int unsigned comment '部门ID',

create_time datetime not null comment '创建时间',

update_time datetime not null comment '修改时间'

) comment '员工表';

-- 员工表测试数据

INSERT INTO emp

(id, username, password, name, gender, image, job, entrydate,dept_id,

create_time, update_time) VALUES

(1,'jinyong','123456','金庸',1,'1.jpg',4,'2000-01-01',2,now(),now()),

(2,'zhangwuji','123456','张无忌',1,'2.jpg',2,'2015-01-01',2,now(),now()),

(3,'yangxiao','123456','杨逍',1,'3.jpg',2,'2008-05-01',2,now(),now()),

(4,'weiyixiao','123456','韦一笑',1,'4.jpg',2,'2007-01-01',2,now(),now()),

(5,'changyuchun','123456','常遇春',1,'5.jpg',2,'2012-12-05',2,now(),now()),

(6,'xiaozhao','123456','小昭',2,'6.jpg',3,'2013-09-05',1,now(),now()),

(7,'jixiaofu','123456','纪晓芙',2,'7.jpg',1,'2005-08-01',1,now(),now()),

(8,'zhouzhiruo','123456','周芷若',2,'8.jpg',1,'2014-11-09',1,now(),now()),

(9,'dingminjun','123456','丁敏君',2,'9.jpg',1,'2011-03-11',1,now(),now()),

(10,'zhaomin','123456','赵敏',2,'10.jpg',1,'2013-09-05',1,now(),now()),

(11,'luzhangke','123456','鹿杖客',1,'11.jpg',5,'2007-02-01',3,now(),now()),

(12,'hebiweng','123456','鹤笔翁',1,'12.jpg',5,'2008-08-18',3,now(),now()),

(13,'fangdongbai','123456','方东白',1,'13.jpg',5,'2012-11-01',3,now(),now()),

(14,'zhangsanfeng','123456','张三丰',1,'14.jpg',2,'2002-08-01',2,now(),now()),

(15,'yulianzhou','123456','俞莲舟',1,'15.jpg',2,'2011-05-01',2,now(),now()),

(16,'songyuanqiao','123456','宋远桥',1,'16.jpg',2,'2007-01-01',2,now(),now()),

(17,'chenyouliang','123456','陈友谅',1,'17.jpg',NULL,'2015-03-

21',NULL,now(),now());

2. 创建springboot工程,引入对应的起步依赖(web、mybatis、mysql驱动、lombok)

项目工程目录结构:

3.

配置文件

application.properties

中引入

mybatis

的配置信息,准备对应的实体类

application.properties文件

#数据库连接

spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver

spring.datasource.url=jdbc:mysql://localhost:3306/tlias

spring.datasource.username=root

spring.datasource.password=1234

#开启mybatis的日志输出

mybatis.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

#开启数据库表字段 到 实体类属性的驼峰映射

mybatis.configuration.map-underscore-to-camel-case=true

 实体类

/*部门类*/

@Data

@NoArgsConstructor

@AllArgsConstructor

public class Dept {

private Integer id;

private String name;

private LocalDateTime createTime;

private LocalDateTime updateTime;

}

/*员工类*/

@Data

@NoArgsConstructor

@AllArgsConstructor

public class Emp {

private Integer id;

private String username;

private String password;

private String name;

private Short gender;

private String image;

private Short job;

private LocalDate entrydate;

private Integer deptId;

private LocalDateTime createTime;

private LocalDateTime updateTime;

}

4.

准备对应的

Mapper

Service(

接口、实现类

)

Controller

基础结构

访问数据层:

DeptMapper:

<code>package com.itheima.mapper;

import org.apache.ibatis.annotations.Mapper;

@Mapper

public interface DeptMapper {

}

EmpMapper:

package com.itheima.mapper;

import org.apache.ibatis.annotations.Mapper;

@Mapper

public interface EmpMapper {

}

 业务层:

DeptService

package com.itheima.service;

//部门业务规则

public interface DeptService {

}

 DeptServiceImpl:

package com.itheima.service.impl;

import lombok.extern.slf4j.Slf4j;

import org.springframework.stereotype.Service;

//部门业务实现类

@Slf4j

@Service

public class DeptServiceImpl implements DeptService {

}

EmpService

package com.itheima.service;

//员工业务规则

public interface EmpService {

}

EmpServiceImpl

package com.itheima.service.impl;

import com.itheima.service.EmpService;

import lombok.extern.slf4j.Slf4j;

import org.springframework.stereotype.Service;

//员工业务实现类

@Slf4j

@Service

public class EmpServiceImpl implements EmpService {

}

控制层:

DeptController

package com.itheima.controller;

import org.springframework.web.bind.annotation.RestController;

//部门管理控制器

@RestController

public class DeptController {

}

EmpController

package com.itheima.controller;

import org.springframework.web.bind.annotation.RestController;

//员工管理控制器

@RestController

public class EmpController {

}

项目工程结构:

在前后端进行交互的时候,我们基于当前主流的REST风格的API接口进行交互。

REST(Representational State Transfer),表述性状态转换,它是一种软件架构风格。

通过URL定位要操作的资源,通过HTTP动词(请求方式)来描述具体的操作。

在REST风格的URL中,通过四种请求方式,来操作数据的增删改查。

GET : 查询 POST :新增 PUT :修改 DELETE :删除

 前后端工程在进行交互时,使用统一响应结果 Result。

<code>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);

}

}

部门管理

查询部门

接口文档

基本信息

请求路径:/depts

请求方式:GET

请求参数:无

响应数据:json格式

 请求参数

响应数据

参数格式:application/json

参数说明

参数名 类型 是否必须 备注
code number 必须 响应码,1 代表成功,0 代表失败
msg string 非必须 提示信息
data object[ ] 非必须 返回的数据
|- id number 非必须 id
|- name string 非必须 部门名称
|- createTime string 非必须 创建时间
|- updateTime string 非必须 修改时间

响应数据样例

 {

  "code": 1,

  "msg": "success",

  "data": [

    {

      "id": 1,

      "name": "学工部",

      "createTime": "2022-09-01T23:06:29",

      "updateTime": "2022-09-01T23:06:29"

    },

    {

      "id": 2,

      "name": "教研部",

      "createTime": "2022-09-01T23:06:29",

      "updateTime": "2022-09-01T23:06:29"

    }

  ]

}

 代码

DeptController 

@Slf4j

@RestController

public class DeptController {

@Autowired

private DeptService deptService;

//@RequestMapping(value = "/depts" , method = RequestMethod.GET)

@GetMapping("/depts")

public Result list(){

log.info("查询所有部门数据");

List<Dept> deptList = deptService.list();

return Result.success(deptList);

}

}

 DeptService(业务接口)

public interface DeptService {

/**

* 查询所有的部门数据

* @return 存储Dept对象的集合

*/

List<Dept> list();

}

DeptServiceImpl(业务实现类) 

@Slf4j

@Service

public class DeptServiceImpl implements DeptService {

@Autowired

private DeptMapper deptMapper;

@Override

public List<Dept> list() {

List<Dept> deptList = deptMapper.list();

return deptList;

}

}

 DeptMapper

@Mapper

public interface DeptMapper {

//查询所有部门数据

@Select("select id, name, create_time, update_time from dept")

List<Dept> list();

}

删除部门

接口文档

基本信息

请求路径:/depts/{id}

请求方式:DELETE

接口描述:该接口用于根据ID删除部门数据

参数格式:路径参数

参数说明:

参数名 类型 是否必须 备注
id number 必须 部门ID

请求参数样例:

/depts/1

响应数据

参数格式:application/json

参数说明:

参数名 类型 是否必须 备注
code number 必须 响应码,1 代表成功,0 代表失败
msg string 非必须 提示信息
data object 非必须 返回的数据

响应数据样例: 

 {

    "code":1,

    "msg":"success",

    "data":null

}

代码

在controller中接收请求路径中的路径参数:@PathVariable

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);

//省略...

}

新增部门

接口文档

基本信息

请求路径:/depts

请求方式:POST

口描述接:该接口用于添加部门数据

请求参数

格式:application/json

参数说明:

参数名 类型 是否必须 备注
name string 必须 部门名称

请求参数样例:

{

    "name": "教研部"

响应数据

参数格式:application/json

参数说明:

参数名 类型 是否必须 备注
code number 必须 响应码,1 代表成功,0 代表失败
msg string 非必须 提示信息
data object 非必须 返回的数据

响应参数样例:

参数名 类型 是否必须 备注
code number 必须 响应码,1 代表成功,0 代表失败
msg string 非必须 提示信息
data object 非必须 返回的数据

代码

在controller中接收json格式的请求参数:

@RequestBody //把前端传递的json数据填充到实体类中

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.insert(dept);

}

//省略...

}

DeptMapper

@Mapper

public interface DeptMapper {

@Insert("insert into dept (name, create_time, update_time) values (#{name},#

{createTime},#{updateTime})")

void insert(Dept dept);

//省略...

}



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。