需求简介
- 实现关于员工信息Student的增删改查
- 接口采用restful风格
- 数据库采用Mysql,数据源采用Druid
- 采用Log4j2日志系统
环境准备
1、新建项目
新建一个crud的项目,如下:
- 更改配置文件名application.properties为application.yml
- 准备一个数据库为crud备用
- 在src目录下新建以下目录包:
config:自定义配置文件
controller: 编写controller类的包
service:编写业务类的包
dao:定义数据表实体类
mapper: 编写mapper接口包 - 在resources目录下新建一个mapper包,
mapper: 用来保存**mapper.xml映射文件
2、新建数据库脚本
新建curd数据库
create database crud;
初始化数据库
CREATE TABLE `student` (
`id` bigint NOT NULL AUTO_INCREMENT,
`name` varchar(255) DEFAULT NULL COMMENT '名字',
`age` int DEFAULT NULL COMMENT '年龄',
`grade` varchar(255) DEFAULT NULL COMMENT '班级',
`created_time` datetime DEFAULT NULL COMMENT '创建时间',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
INSERT INTO `student` (`id`, `name`, `age`, `grade`, `created_time`) VALUES (1, '张三', 11, '三年级', '2022-10-08 23:38:23');
INSERT INTO `student` (`id`, `name`, `age`, `grade`, `created_time`) VALUES (2, '李四', 12, '六年级', '2022-10-08 23:38:50');
INSERT INTO `student` (`id`, `name`, `age`, `grade`, `created_time`) VALUES (3, '王五', 13, '四年级', '2022-10-09 23:00:48');
引入依赖
1、引入web依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
2、引入Lombok依赖
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
3、引入mysql依赖
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
4、引入Mybatis-Plus依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.2</version>
</dependency>
5、引入Druid依赖
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid-spring-boot-starter</artifactId>
<version>1.2.13-SNSAPSHOT</version>
</dependency>
6、引入Log4j2依赖
<!-- 剔除默认日志系统 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-logging</artifactId>
</exclusion>
</exclusions>
</dependency>
<!-- 引入Log4j2日志依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-log4j2</artifactId>
</dependency>
配置
1、配置数据库
spring:
datasource:
url: jdbc:mysql://localhost:3311/crud?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8 # 数据库连接串
username: root #用户名
password: 123456 # 密码
driver-class-name: com.mysql.cj.jdbc.Driver
type: com.alibaba.druid.pool.DruidDataSource
druid:
min-idle: 10
max-active: 50
initial-size: 20
2、配置Mybatis-Plus
mybatis-plus:
configuration:
map-underscore-to-camel-case: true # 启用驼峰命名法
auto-mapping-behavior: full
mapper-locations: classpath:mapper/*.xml # 设置映射目录
type-aliases-package: com.example.demo2.dao # 设置数据表实体类包
基础类编写
1、实体Bean,Student类编写
在dao类包下新建Student
类,使用Lombok来简化开发,如下:
@Data
public class Student {
private Long id;
private String name;
private int age;
private String grade;
private LocalDateTime createdTime;
}
2、映射类StudentMapper接口编写
在mapper类名下新建StudentMapper
接口类,该接口类继承BaseMapper
接口类
@Mapper
public interface StudentMapper extends BaseMapper<Student> {
}
3、业务类StudentService接口编写
在service类包下,新建一个StudentService的接口类,同时在service类包下新建一个impl的类包,同时在impl类包下新建一个StudentServiceImpl的类,该类实现StudentService接口类,如下:
StudentService.java
public interface StudentService {
}
StudentServiceImpl.java
@Service
public class StudentServiceImpl implements StudentService {
}
4、控制器StudentController类编写
在controller类包下新建一个StudentController
类,类的内容如下:
@RestController
@RequestMapping("student")
public class StudentController {
}
查询操作
1、新增数据库查询
在StudentMapper
接口类中,新增一个getById
的方法,使用的是注解的方式进行数据库查询操作,如下:
@Mapper
public interface StudentMapper extends BaseMapper<Student> {
@Select("select * from student where id=#{id}")
Student getById(Long id);
}
2、Service 层代码编写
在StudentService
接口类中新增getById
方法,该方法通过ID进行查询Student信息,该方法返回一个Student
对象,如下:
public interface StudentService {
/**
* 根据ID查询Student信息
* @param id
* @return
*/
Student getById(Long id);
}
在StudendServiceImpl
实现类中,实现StudentService
中的getById
方法,在该方法中调用StudentMapper
的用户查询方法,如下:
@Service
public class StudentServiceImpl implements StudentService {
// 自动注入StudentMapper实例
@Resource
private StudentMapper studentMapper;
@Override
public Student getById(Long id) {
Student student = studentMapper.getById(id);
return student;
}
}
3、 编写Controller接口
在StudentController类中新建一个新的接口,如下:
@RestController
@RequestMapping("student")
public class StudentController {
@Resource
private StudentService studentService;
@GetMapping("/{id}")
public Student getStudent(@PathVariable Long id){
Student student = studentService.getById(id);
return student;
}
}
4、测试
启动应用,用Apifox工具进行api接口测试,请求方式为:GET,访问URL:http://localhost:8080/student/1,如下所示:
接口返回结果如下:
{
"id": 1,
"name": "张三",
"age": 11,
"grade": "三年级",
"createdTime": "2022-10-08T23:38:23"
}
从结果中可以看出,接口正常返回,同时返回的是Student的JSON格式。
删除操作
1、Mapper层代码编写
@Mapper
public interface StudentMapper extends BaseMapper<Student> {
@Delete("delete from student where id=#{id}")
void deleteById(Long id);
}
2、Service层代码编写
在StudentService
接口类中新增deleteBydId
方法,该方法通过ID对Student进行删除,如下:
public interface StudentService {
/**
* 根据ID进行删除操作
* @param id
*/
void deleteBydId(Long id);
}
在StudendServiceImpl
实现类中,实现StudentService
中的deleteBydId
方法,在该方法中调用StudentMapper
的删除方法,如下:
@Service
public class StudentServiceImpl implements StudentService {
// 自动注入StudentMapper实例
@Resource
private StudentMapper studentMapper;
@Override
public void deleteBydId(Long id) {
studentMapper.deleteById(id);
}
}
3、Controller代码编写
在StudentController中新增一个删除接口,如下:
@RestController
@RequestMapping("student")
public class StudentController {
@Resource
private StudentService studentService;
@DeleteMapping("/{id}")
public String delStudent(@PathVariable Long id){
studentService.deleteBydId(id);
return "delete success";
}
}
4、测试
启动应用,用Apifox工具进行api接口测试,请求方式为:GET,访问URL:http://localhost:8080/student/3,如下所示:
接口访问返回结果如下:
delete success
从结果中可以看出,接口正常返回,同时在数据库中对应的ID的数据也进行了删除操作。
新增操作
1、Mapper层代码编写
@Mapper
public interface StudentMapper extends BaseMapper<Student> {
@Insert("insert into student (`name`, `age`, `grade`, `created_time`) values (#{name},#{age},#{grade},#{createdTime})")
void addStudent(Student student);
}
2、Service层代码编写
在StudentService
接口类中新增addStudent
方法,该方法调用StudentMapper
的addStudent
方法进行数据新增,如下
public interface StudentService {
void addStudent(Student student);
}
在StudendServiceImpl
实现类中,实现StudentService
中的addStudent
方法,在该方法中调用StudentMapper
的新增方法,如下:
@Service
public class StudentServiceImpl implements StudentService {
// 自动注入StudentMapper实例
@Resource
private StudentMapper studentMapper;
@Override
public void addStudent(Student student) {
studentMapper.addStudent(student);
}
}
3、Controller代码编写
在StudentController中新增一个数据新增的接口,如下:
@RestController
@RequestMapping("/student")
public class StudentController {
@Resource
private StudentService studentService;
@PostMapping
public String addStudent(@RequestBody Student student){
student.setCreatedTime(LocalDateTime.now());
studentService.addStudent(student);
return "add success";
}
}
4、测试
启动应用,用Apifox工具进行api接口测试,请求方式为:POST,请求体为JSON串,请求内容如下:
{
"name": "小六",
"age": 14,
"grade": "初中"
}
截图如下:
可得到如下结果,如下:
查看数据库中student表的数据,可以看到数据已新增到了数据库表中了,如下:
更新操作
1、Mapper层代码编写
在StudentMapper
接口类文件中新增一个update操作,如下:
@Mapper
public interface StudentMapper extends BaseMapper<Student> {
@Update("update student set name=#{name}, age=#{age}, grade=#{grade} where id=#{id}")
void updateStudent(Student student);
}
2、Service层代码编写
在StudentService
接口类中增加updateStudent
方法,该方法调用StudentMapper
的updateStudent
方法进行数据更新操作,如下
public interface StudentService {
void updateStudent(Student student);
}
在StudendServiceImpl
实现类中,实现StudentService
中的updateStudent
方法,在该方法中调用StudentMapper
的数据更新方法,如下:
@Service
public class StudentServiceImpl implements StudentService {
// 自动注入StudentMapper实例
@Resource
private StudentMapper studentMapper;
@Override
public void updateStudent(Student student) {
studentMapper.updateStudent(student);
}
}
3、Controller层代码编写
在StudentController中新增一个数据更新的接口,更新操作使用的是注解是@PutMapping
,如下:
@RestController
@RequestMapping("/student")
public class StudentController {
@Resource
private StudentService studentService;
@PutMapping
public String updateStudent(@RequestBody Student student){
studentService.updateStudent(student);
return "update success";
}
}
4、测试
启动应用,用Apifox工具进行api接口测试,请求方式为:PUT,请求体为JSON串,请求内容如下:
{
"id": "4",
"name": "小六",
"age": 14,
"grade": "初中二年级"
}
完整截图如下:
总结
到这里,就完成了简单的CURD操作 ,基本的开发逻辑是:
1、mapper数据库操作 -> 2、Service层业务代码编写 -> 3、controller层处理请求
使用到的主要注解如下
注解 | 使用 |
@GetMapper | 用于处理Get请求 |
@PostMapper | 用于处理Post请求 |
@PutMapper | 用于处理Put请求,一般用于更新操作 |
@DeleteMapper | 用于处理Delete请求 |
@PathVariable | 用于获取请求路径中的参数,如“#{id}” |
@RequestBody | 用来获取POST,PUT请求体 |
原创文章,作者:jiafegn,如若转载,请注明出处:https://www.techlearn.cn/archives/435