SpringBoot总结
1232字约4分钟
2026-01-22
JSON参数请求
非集合类接收
User user
{
"name": "zhangsna",
"age": "20"
}集合类接收(List<User>)
[
{ "name": "tom", "age": 20, "gender": "男", "bumen_id": 1 },
{ "name": "tom", "age": 22, "gender": "男", "bumen_id": 2 },
]@RestController // 该注解的作用:返回的值将自动转换成json格式
@Autowired // 将IOC容器中提供的bean赋值给当前变量,也叫依赖注入
@RequestMapping("/hi") // 网页访问路径
@Data // 相当于代码块中的属性都拥有set、get、toString、equals和hashcode方法
@NoArgsConstructor // 无参构造器
@AllArgsConstructor // 有参构造器
@Mapper // MyBatis映射接口,会自动生成该接口的实现类对象(代理对象),交给IOC容器管理返回数据
- 收 JSON → 用
@RequestBody(写在参数上) - ✅ 返 JSON → 用
@ResponseBody(写在方法 / 类上) 或 直接用@RestController(写在类上)
访问注解
| 注解 | 对应请求方式 | 核心业务场景 |
|---|---|---|
| @GetMapping | GET | 查询 / 获取数据 |
| @PostMapping | POST | 新增 / 提交数据 |
| @DeleteMapping | DELETE | 删除数据 |
| @RequestMapping | 所有方式 | 万能匹配 / 兼容场景 |
// 类上标注:所有该类的接口,统一前缀为 /api/v1/user
@RestController
@RequestMapping("/api/v1/user")
public class UserController {
// 最终匹配:GET 请求 → http://localhost:8080/api/v1/user/1
@GetMapping("/{id}")
public User getById(@PathVariable Long id) { ... }
// 最终匹配:POST 请求 → http://localhost:8080/api/v1/user
@PostMapping
public Result add(@RequestBody User user) { ... }
// 最终匹配:DELETE 请求 → http://localhost:8080/api/v1/user/1
@DeleteMapping("/{id}")
public Result delete(@PathVariable Long id) { ... }
}三层架构
Spring/SpringBoot 后端项目,强制遵守【三层架构】开发规范,这是所有企业级项目的标准,也是这三个注解存在的意义,三层职责严格分离,禁止跨层、禁止混用,三者的关系是:
【控制层 Controller】 → 【业务层 Service】 → 【数据层 Repository/Mapper】调用关系:前端请求 → Controller 层接收 → 调用 Service 层处理业务 → Service 层调用 Repository 层操作数据库 → 层层返回结果给前端
解耦核心:每层只做自己的事,职责单一,代码可维护、可扩展、可复用
✔️ @RestController 【控制层】
- 作用:= @Controller + @ResponseBody,标记控制器类,类中所有方法自动返回 JSON,不跳转页面
- 位置:只能加在 Controller 类上
- 职责:接收前端请求、校验参数、调用 Service、返回 JSON 结果;无任何业务逻辑
✔️ @Service 【业务层】
- 作用:标记业务逻辑类,赋予事务支持能力
- 位置:只能加在 Service 实现类上(接口不加)
- 职责:项目核心,写所有业务逻辑、做事务控制 (@Transactional)、调用 Mapper;不接收前端请求,不直接操作数据库
✔️ @Repository 【数据层】
- 作用:标记数据库访问类,Spring 自动处理数据库异常
- 位置:加在 Dao 实现类上;SpringBoot+Mybatis 开发中,用@Mapper替代它(作用等价)
- 职责:只做数据库纯 CRUD 操作;无任何业务逻辑
接收json
@RequestBody:接收请求体的 JSON 数据,封装为 Java 对象,Controller 层核心注解;- 只用在 POST/PUT/PATCH/DELETE 请求,绝对不能用在 GET 请求;
- 一个方法只能有 一个
@RequestBody,参数校验搭配@Validated使用。
@RequestMapping("/user1")
public String user1(@RequestBody User user1) {
System.out.println(user1);
return "ok";
}调用接口或者方法
@Mapper // 会自动生成该接口的实现类对象(代理对象),交给IOC容器管理
public interface UserMapper {
// 将sql语句查询的信息赋值给集合
@Select("select * from user1")
public List<User> list();
}@RestController // 该注解的作用:返回的值将自动转换成json格式
public class Hello {
@Autowired // 将IOC容器中提供的bean赋值给当前变量,也叫依赖注入
private UserMapper userMapper;
// 读取数据
@RequestMapping("/hi")
public List<User> hi() {
List<User> userList = userMapper.list();
return userList;
}
}实现set、get、构造器注解

pom.xml
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>添加如下三个注解之后,该方法就不需要手动编写set、get还有构造器方法
@Data // 相当于代码块中的属性都拥有set、get、toString、equals和hashcode方法
@NoArgsConstructor // 无参构造器
@AllArgsConstructor // 有参构造器
public class User {
private Integer id;
private String name;
private Short age;
private Character gender;
private Short bumen_id;
}public void insertUser() {
// 添加参数
User user = new User();
user.setName("ceshi");
user.setAge((short) 20);
user.setGender('男');
user.setBumen_id((short) 1);
}MySQL

Integer id 中的 id 对应 #{id}
@Delete("delete from user1 where id = #{id}")
public void delete(Integer id);代码复用
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--com.mao.mapper.UserMapper:实现接口-->
<mapper namespace="com.mao.mapper.UserMapper">
<!-- 定义重复利用的sql语句 -->
<sql id="select1">
select id,name,age,bumen_id from user1
</sql>
<select id="findByName" resultType="com.mao.pojo.User">
<!-- 引入重复利用的sql语句,输入对应的id值 -->
<include refid="select1"/>
<where>
<if test = "name != null">
name like '%${name}%'
</if>
<if test = "bumen_id != null">
and bumen_id = #{bumen_id}
</if>
</where>
</select>
</mapper>YAML


ceshi: '测试配置文件'// 调用配置文件中的信息
@Value("${ceshi}")
String ceshi;yml环境切换
application.yml
spring:
profiles:
# 使用test环境(application-test.yml)
active: testapplication-dev.yml
server:
port: 9001application-test.yml
server:
port: 9002