Spring Boot 项目分层架构详解

在现代 Spring Boot 项目中,Controller、Service、Mapper 和 Entity 四层架构能够有效提升代码可维护性、可测试性与团队协作效率。下面以“商品管理(Product)”为例,系统梳理这四层的职责分工与协作关系。

一、Controller层

作为Springboot应用程序的入口点,Controller 层主要负责接收来自前端或其他系统的 HTTP 请求,校验输入参数,将业务委托给 Service 层处理,并将处理结果封装为响应返回客户端。常见职责包括:接口路由、请求参数绑定、异常捕获等。 Controller 层不处理业务细节,只做参数收集与响应封装。

示例代码:

@RestController
@RequestMapping("/products")
public class ProductController {
		@Autowired  
    private ProductService productService;
  
    public ProductController(ProductService productService) {
        this.productService = productService;
    }

    @GetMapping("/{id}")
    public Product getProductById(@PathVariable Long id) {
        return productService.getProductById(id);
    }

    @PostMapping
    public Product addProduct(@RequestBody Product product) {
        return productService.addProduct(product);
    }
  
  	// 其他请求处理……
}

二、Service层

Service 层聚焦于业务规则、流程与事务控制,是实际功能的核心实现单元。它通常不会直接暴露给外部调用,而是专注业务与数据的交互和处理,接收 Controller 的请求,调用 Mapper 进行数据操作,同时负责业务判断、数据转换、事务控制等复杂操作。

示例代码:

@Service
public class ProductService {
		@Autowired
    private ProductMapper productMapper;
    
    public ProductService(ProductMapper productMapper) {
        this.productMapper = productMapper;
    }

    public Product getProductById(Long id) {
        return productMapper.selectById(id);
    }

    public Product addProduct(Product product) {
        productMapper.insert(product);
        return product;
    }
  
  	// 其它业务方法……
}
// 补充,项目中可能习惯用一个接口表示Service(就定义各种方法),然后再用一个类去实现它

三、Mapper层

Mapper 层(又称 Repository 层)专责于数据库交互,定义各种持久化操作接口。结合 MyBatis、JPA 等 ORM(对象关系映射) 框架,实现数据对象与数据库表的无缝映射。

示例代码:

@Repository
public interface ProductMapper {
    Product selectById(Long id);
    void insert(Product product);
    // 还可扩展 update/delete 等方法
}

四、Entity层

Entity 层定义了与数据库表结构一一对应的 Java 对象, 只承载数据结构定义,不负责业务或数据库操作逻辑,用于描述和传递业务数据。通过注解声明表名、主键、字段等信息,实现 POJO 到数据库记录的自动映射。

示例代码:

@Entity
@Table(name = "product")
public class Product {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "name")
    private String name;

    @Column(name = "price")
    private Double price;

  	// 其它属性
    // getter 和 setter 省略
}

五、分层协作

Controller 层负责入口与出口,将请求交给 Service;Service 层实现业务逻辑,调用 Mapper 完成数据操作;Mapper 层负责和数据库交互,CRUD 操作对象为 Entity;Entity 层定义数据模型,实现对象与表的映射。这种分层架构使代码职责明确、易于维护和扩展。

请求
调用业务
CRUD 请求
SQL 操作
返回数据
返回实体
返回处理结果
响应
客户端
HTTP 请求
Controller
参数收集 & 校验
Service 层
执行业务 & 事务
Mapper/Repo
数据库 CRUD
数据库 / Entity

你可能感兴趣的:(后端,spring,boot,架构,后端)