Talis智能学习辅助系统项目总结

Posted by Marlin on November 28, 2025

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 语句,从而实现对数据库的增删改查操作。