Talis智能学习辅助系统项目总结
示例一
1
2
3
4
5
6
7
8
9
10
// 实体类:表示数据库中的dept表
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Dept {
private Integer id;
private String name;
private LocalDateTime createTime;
private LocalDateTime updateTime;
}
@Data
@Data 是 Lombok 提供的一个注解,用于简化 Java 类的代码。它自动生成常用的方法,如 getter、setter、toString、equals 和 hashCode。
@NoArgsConstructor 和 @AllArgsConstructor
@NoArgsConstructor 和 @AllArgsConstructor 是 Lombok 提供的注解,用于自动生成构造器。
@NoArgsConstructor:生成一个无参构造器。@AllArgsConstructor:生成一个包含所有字段的全参构造器。
示例二
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
// controller层:处理HTTP请求,调用Service层业务逻辑,返回结果给客户端
@RestController // 标识这是一个控制器类,返回JSON格式的数据
@RequestMapping("/depts") // 定义处理的请求路径和处理方式
@Slf4j // 自动生成日志对象log,这样就可以直接使用log.info()等方法记录日志
public class DeptController {
@Autowired // 自动注入DeptService依赖
private DeptService deptService;
// 查询部门
@GetMapping
public Result list(){
log.info("查询全部部门数据");
List<Dept> deptList = deptService.findAll();
return Result.success(deptList);
}
// 添加部门
@PostMapping
public Result add(@RequestBody Dept dept){ // 使用 @RequestBody 注解从请求体中获取 Dept 对象
log.info("添加部门,dept={}", dept);
deptService.add(dept);
return Result.success();
}
// 查询回显
@GetMapping("/{id}")
public Result getInfo(@PathVariable Integer id){ // 使用 @PathVariable 注解从路径变量中获取 id
log.info("查询部门回显,id={}", id);
Dept dept = deptService.getById(id);
return Result.success(dept);
}
}
@RestController
@RestController 结合了 @Controller 和 @ResponseBody 的功能。
核心作用:
- 标识类为控制器:等同于
@Controller,表示该类是 Spring MVC 的控制器组件。 - 专用于 REST 服务:转为构建 RESTful API,无需手动处理视图解析。
- 自动序列化返回值:等同于在每个方法上添加
@ResponseBody,直接将返回值写入 HTTP 响应体(默认通过 Jackson 转为 JSON)。
RESTful API 是一种基于 REST(Representational State Transfer) 架构风格的 Web API,它用标准的 HTTP 动词 + 资源导向的 URL 来完成对资源的增删改查,数据一般采用 JSON 格式传输。
Jackson 是 Java 领域最流行的 JSON 处理库,负责在 Java 对象 和 JSON 字符串 之间做序列化/反序列化,也是 Spring Boot 默认的 HttpMessageConverter 实现。
@RequestMapping
核心作用:
- 处理 HTTP 请求:将 什么样的 HTTP 请求 映射到 哪个 Java 方法
- 支持多种 HTTP 方法:如 GET、POST、PUT、DELETE 等。
在具体方法上通常被以下注解所替代:
@GetMapping:处理 GET 请求@PostMapping:处理 POST 请求@PutMapping:处理 PUT 请求@DeleteMapping:处理 DELETE 请求
在 Talis 项目中,@RequestMapping 主要用于类级别的路径映射,而具体的 HTTP 方法映射则使用更具体的注解(如 @GetMapping)。
@Autowired
@Autowired是 Spring 框架中最核心的依赖注入(Dependency Injection, DI)注解之一。它用来告诉 Spring “请帮我找到一个合适的 Bean 并注入到这个字段/构造器/方法参数里”。
核心作用:
- 自动装配 Bean:取消
new操作,由 Spring IoC 容器自动装配 Bean,实现解耦与可测试。
@Slf4j
@Slf4j 是 Lombok 提供的一个注解,用于简化日志记录的代码。
核心作用:
- 自动生成日志对象:在类中自动生成一个名为
log的日志记录器对象,类型为org.slf4j.Logger。 - 简化日志记录:无需手动创建日志对象,可以直接使用
log.info()、log.debug()等方法记录日志。
@RequestBody
@RequestBody 是 Spring MVC 提供的注解,用于将 HTTP 请求体中的 JSON 数据反序列化为 Java 对象。
@PathVariable
@PathVariable 是 Spring MVC 提供的注解,用于将 URL 路径中的变量绑定到方法参数上。
示例三
1
2
3
4
// service层:定义业务逻辑接口
public interface DeptService {
List<Dept> findAll();
}
interface(接口)
interface 是 Java 语言的核心抽象机制,用来 “只定义规范、不给出实现”。
implements 关键字来实现接口,必须提供接口中所有方法的具体实现。
implements在下一段代码示例中会展示。
示例四
1
2
3
4
5
6
7
8
9
10
11
// service层:业务逻辑实现类
@Service
public class DeptServiceImpl implements DeptService {
@Autowired
private DeptMapper deptMapper;
public List<Dept> findAll(){
return deptMapper.findAll();
}
}
@Service
@Service 是 Spring 框架中最常用的 构造型注解(stereotype annotation) 之一,它唯一的作用是把业务类标识为 Spring Bean,让容器自动扫描、托管、支持 AOP/事务等后续功能。
核心作用:
- 告诉 Spring:这是一个 业务服务 Bean,请将其实例化并纳入 IoC 容器管理。
AOP 是 Aspect-Oriented Programming(面向切面编程)的缩写,它把软件中与业务无关、却被多处重复调用的“横切逻辑”(日志、事务、权限、缓存、异常处理……)单独封装成可插拔的“切面”,在运行期中、动态织入到业务方法的前后左右,从而让业务代码只关心逻辑,实现解耦与可维护。
人话:AOP=把“与业务无关却到处要干的杂事”封装成可插拔的切面,通过动态织入,让业务代码只关心核心逻辑。
implements(实现接口)
implements是 Java 中 “实现接口” 的关键字,用来让类(或枚举、记录)签字认同某个接口的契约,并提供全部抽象方法的具体实现。
示例五
1
2
3
4
5
6
7
8
9
10
11
12
// mapper层:定义数据库操作接口
@Mapper
public interface DeptMapper {
// 手动结果映射
@Results({
@Result(column = "create_time", property = "createTime"),
@Result(column = "update_time", property = "updateTime")
})
// 查询所有的部门数据
@Select("SELECT id, name, create_time, update_time FROM dept ORDER BY update_time DESC")
List<Dept> findAll();
}
此处
@Mapper注解下的 interface 接口是给 MyBatis 使用的,MyBatis 会在运行时动态生成该接口的实现类,并将 SQL 语句映射到接口的方法上。
@Mapper
@Mapper 是 MyBatis 框架提供的核心注解,用于把一个Java接口标记为 MyBatis 的 Mapper 接口,从而让 MyBatis 能够识别并生成该接口的实现类。
@Results 和 @Result
@Results 和 @Result 注解用于定义 SQL 查询结果与 Java 对象属性之间的映射关系。
@Results:用于定义一组映射关系,包含多个@Result注解。@Result:用于定义单个列与属性之间的映射关系。column属性:指定数据库查询结果中的列名。property属性:指定 Java 对象中的属性名。
@Select/@Insert/@Update/@Delete
@Select、@Insert、@Update 和 @Delete 是 MyBatis 提供的注解,用于在 Mapper 接口的方法上直接编写 SQL 语句,从而实现对数据库的增删改查操作。