Spring Boot架构解析

125 阅读2分钟

在使用 Spring Boot 开发过程中,这些术语是常见的分层架构组成部分,每一层都有特定的功能和职责。以下是这些术语的含义和它们在项目中的作用:

分层架构概述

Spring Boot 项目通常按照职责划分为以下几层:

1、Controller(控制层)

作用:处理客户端的请求,返回响应数据(如 JSON)。

关键点:

位于前端与后端的交互层。

常用注解:@RestController, @RequestMapping, @GetMapping 等。

示例

@RestController
@RequestMapping("/users")
public class UserController {
    @GetMapping("/{id}")
    public String getUser(@PathVariable Long id) {
        return "User ID: " + id;
    }
}

2、Entity(实体层)

###作用:映射数据库表,表示数据对象。 ###关键点: 与数据库表结构一一对应。

常用注解:@Entity, @Table, @Id, @Column。

示例

@Entity
public class User {
    @Id
    private Long id;
    private String name;
    private String email;
    // Getters and Setters
}

3、Mapper(数据访问层)

作用:负责与数据库交互(增删改查)。

关键点:

使用 MyBatis 或类似工具。

SQL 写在注解或 XML 文件中。

示例

@Mapper
public interface UserMapper {
    @Select("SELECT * FROM users WHERE id = #{id}")
    User getUserById(Long id);
}

4、Service(业务逻辑层)

作用:处理业务逻辑,调用 Mapper 与数据库交互。

关键点:

定义接口 + 实现类(Impl)。

常用注解:@Service。

示例:

@Service
public class UserService {
    public String processUserData(Long id) {
        return "Processed User: " + id;
    }
}

5、Impl(实现类)

作用:Service 接口的具体实现。

关键点:

通常处理复杂逻辑和多个 Mapper 的调用。

示例

@Service
public class UserServiceImpl implements UserService {
    @Autowired
    private UserMapper userMapper;

    @Override
    public User getUserById(Long id) {
        return userMapper.getUserById(id);
    }
}

6、XML(SQL 映射文件)

作用:存储复杂 SQL 查询(用于 MyBatis)。

关键点:

SQL 灵活性高,支持动态语句。

示例(UserMapper.xml)

<select id="getUserById" resultType="User">
    SELECT * FROM users WHERE id = #{id}
</select>

各层关系总结

1、Controller 处理请求,调用 Service。

2、Service 执行业务逻辑,调用 Mapper 操作数据库。

3、Mapper 直接与数据库交互,返回数据。

4、Entity 用于传递和存储数据。

简单示例

完整调用流程

// 1. Controller
@RestController
@RequestMapping("/users")
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public User getUser(@PathVariable Long id) {
        return userService.getUserById(id);
    }
}

// 2. Service
@Service
public class UserService {
    @Autowired
    private UserMapper userMapper;

    public User getUserById(Long id) {
        return userMapper.getUserById(id);
    }
}

// 3. Mapper
@Mapper
public interface UserMapper {
    @Select("SELECT * FROM users WHERE id = #{id}")
    User getUserById(Long id);
}

// 4. Entity
@Entity
public class User {
    @Id
    private Long id;
    private String name;
    private String email;
    // Getters and Setters
}

简化记忆

Controller:收请求,回响应。

Service:写逻辑,调 Mapper。

Mapper:连数据库,查数据。

Entity:装数据,对应表。