当前位置: 首页 > article >正文

spring 的model repository service controller的功能

1. Controller层(控制层)

功能
负责接收和处理HTTP请求,协调客户端与业务逻辑之间的交互。
核心职责
请求处理:解析HTTP请求参数(如URL参数、Body数据、Headers)。
路由分发:根据请求路径(@RequestMapping)调用对应的Service方法。
响应生成:返回格式化数据(如JSON、XML)或视图(如HTML页面)。
输入校验:验证请求参数的合法性(如使用@Valid注解)。
示例代码

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

    @PostMapping
    public ResponseEntity<UserDTO> createUser(@RequestBody @Valid UserDTO userDTO) {
        UserDTO savedUser = userService.createUser(userDTO);
        return ResponseEntity.ok(savedUser);
    }
}

常见注解
@RestController, @RequestMapping, @GetMapping, @PostMapping, @RequestBody, @ResponseBody


2. Service层(服务层)

功能
封装核心业务逻辑,协调数据操作和事务管理。
核心职责
业务规则实现:处理复杂的业务逻辑(如订单结算、权限校验)。
事务管理:通过@Transactional保证数据库操作的原子性。
依赖整合:调用多个Repository或外部服务(如第三方API)。
异常处理:抛出业务异常(如UserNotFoundException),由Controller统一捕获。
示例代码

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    @Transactional
    public UserDTO createUser(UserDTO userDTO) {
        if (userRepository.existsByEmail(userDTO.getEmail())) {
            throw new EmailAlreadyExistsException("Email已存在");
        }
        User user = UserMapper.toEntity(userDTO);
        User savedUser = userRepository.save(user);
        return UserMapper.toDTO(savedUser);
    }
}

常见注解
@Service, @Transactional


3. Repository层(数据访问层)

功能
直接与数据库交互,提供数据的增删改查(CRUD)操作。
核心职责
数据持久化:通过ORM框架(如Spring Data JPA、MyBatis)操作数据库。
查询封装:定义自定义查询方法(如findByEmail)。
数据缓存:集成缓存机制(如Redis)提升性能。
示例代码

public interface UserRepository extends JpaRepository<User, Long> {
    Optional<User> findByEmail(String email);
    
    @Query("SELECT u FROM User u WHERE u.status = :status")
    List<User> findActiveUsers(@Param("status") String status);
}

常见注解
@Repository(通常可省略,因JPA接口默认实现)、@Query


4. Model层(模型层)

功能
定义数据结构,包括实体(Entity)、数据传输对象(DTO)等。
核心职责
数据表示
Entity:映射数据库表结构(如@Entity)。
DTO:封装请求/响应数据,避免暴露实体细节。
VO:视图对象,适配前端展示需求。
数据校验:通过注解定义字段约束(如@NotBlank, @Email)。
示例代码

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;
    
    @Column(unique = true)
    private String email;
    
    // Getters and Setters
}

public class UserDTO {
    @NotBlank
    @Email
    private String email;
    
    // Getters and Setters
}

常见注解
@Entity, @Table, @Column, @NotBlank, @Email


各层协作流程

以用户注册功能为例:

  1. Controller层:接收POST /api/users请求,解析请求体中的UserDTO
  2. Service层:校验邮箱唯一性,调用UserRepository保存用户实体,返回UserDTO
  3. Repository层:执行SQL插入操作,将User实体持久化到数据库。
  4. Model层:定义User实体和UserDTO的结构,确保数据一致性。

分层优势

  1. 解耦与维护性:各层职责单一,修改业务逻辑不影响数据访问逻辑。
  2. 可测试性:可独立测试Controller(MockMVC)、Service(Mock Repository)、Repository(内存数据库)。
  3. 代码复用:Service层封装通用逻辑,避免Controller重复代码。
  4. 安全性:DTO隔离数据库实体,防止敏感字段(如密码哈希)暴露给前端。

通过这种分层设计,Spring应用能够实现高内聚、低耦合的架构,提升开发效率和系统可维护性。


http://www.kler.cn/a/582220.html

相关文章:

  • Yashan DB 文件管理
  • 《深度剖析架构蒸馏与逻辑蒸馏:探寻知识迁移的差异化路径》
  • 【音视频】ffmpeg命令提取像素格式
  • 20250212:linux系统DNS解析卡顿5秒的bug
  • 在 Spring Boot 2.7.x 中引入 Kafka-0.9 的实践
  • vscode 好用插件
  • MySQL-储存引擎
  • 深度解析:如何在 Vue 3 中安全访问子组件实例
  • 使用STM32CubeMX配置定时器中断实现LED每秒闪烁一次(STM32G070CBT6)
  • windows上传uniapp打包的ipa文件到app store构建版本
  • Selenium 中 ActionChains 支持的鼠标和键盘操作设置及最佳实践
  • 密码学系列 - 利用CPU指令加速
  • 高效自动化测试:打造Python+Requests+Pytest+Allure+YAML的接口测试框架
  • 鸿蒙NEXT开发-自定义相机拍照
  • 小程序 wxml 语法 —— 42 条件渲染
  • JavaScript 模块 vs C# 类:封装逻辑的两种哲学
  • 【社交+陪玩服务】全场景陪玩系统源码 小程序+H5双端 社群互动+即时点单+搭建教程
  • Linux 进程信息查看
  • 【每日学点HarmonyOS Next知识】防止重复点击、对话框收拾拦截、自定义键盘焦点、页面层级、自定义对话框创建
  • 【二分算法】-- x的平⽅根(easy)