Spring Boot项目中的Controller、Service、Mapper和Entity层的作用与联系

目录

一、Controller层

1.2Controller层重要注解:

1.3@Controller

1.4@RequestMapping

(1)基础用法

(2)用 @RequestMapping 处理 HTTP 的各种方法

Service层

后端service层一般需要做以下几件事情:

如何通过service层调用dao:

Mapper层

1.1 @Repository

1.2 @Mapper

Entity层

关系与联系


一、Controller层


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

    /**
     * 查询用户列表
     */
    @RequiresPermissions("user:list")
    @GetMapping("/list")
    public JSONObject listUser(HttpServletRequest request) {
        return userService.listUser(CommonUtil.request2Json(request));
    }

    @RequiresPermissions("user:add")
    @PostMapping("/addUser")
    public JSONObject addUser(@RequestBody JSONObject requestJson) {
        CommonUtil.hasAllRequired(requestJson, "username, password, nickname, roleIds");
        return userService.addUser(requestJson);
    }

    @RequiresPermissions("user:update")
    @PostMapping("/updateUser")
    public JSONObject updateUser(@RequestBody JSONObject requestJson) {
        CommonUtil.hasAllRequired(requestJson, " nickname, roleIds, deleteStatus, userId");
        return userService.updateUser(requestJson);
    }

    @RequiresPermissions(value = {"user:add", "user:update"}, logical = Logical.OR)
    @GetMapping("/getAllRoles")
    public JSONObject getAllRoles() {
        return userService.getAllRoles();
    }

  

Controller层是Spring Boot应用程序的入口点,通常处用于理请求的输入和输出,并负责验证输入数据的有效性。它将http请求参数传递给Service层,然后将Service层的处理结果封装成适当的响应返回给客户端。

1.2Controller层重要注解:

  • @Controller
  • @RequestMapping
  • @ResponseBody
  • @RestController
  • @GetMapping
  • @PostMapping

1.3@Controller

当Spring检测到@Controller注解时,将其自动注册为Controller对象

1.4@RequestMapping

(1)基础用法

@RequestMapping 注解用于将任意HTTP 请求映射到控制器方法上,可以在控制器类上和控制器类中的方法上使用。

 @RequiresPermissions("user:list")
    @GetMapping("/list")
    public JSONObject listUser(HttpServletRequest request) {
        return userService.listUser(CommonUtil.request2Json(request));
    }

如上述代码所示,到 /user:list的请求会由  listUser(HttpServletRequest request)方法来处理,

用于将任意HTTP 请求映射到控制器方法上。

### Spring Boot架构设计与实现 #### 三架构概述 一个典型的Spring Boot应用程序通常采用分架构来提高模块化程度和可维护性。主要分为三个次:ControllerServiceMapper,每一都有特定的功能和职责。 #### Controller Controller负责处理HTTP请求并返回响应给客户端。这一通过接收来自前端或其他服务的调用,解析参数并将业务逻辑委托给下一——Service。为了简化开发过程,Spring框架提供了`@RestController`注解用于定义RESTful Web Services控制器[^1]。 ```java package com.example.controller; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import java.util.List; @RestController @RequestMapping("/users") public class UserController { private final UserService userService; @Autowired public UserController(UserService userService) { this.userService = userService; } @GetMapping public List<User> getAllUsers() { return userService.getAllUsers(); } } ``` #### Service Service包含了核心业务逻辑,在这里实现了数据验证、计算以及其他复杂的操作流程。它作为间件连接着上的应用程序接口(即Controller)和底的数据访问对象(DAO)。此还承担事务管理的任务,确保多个数据库操作要么全部成功执行,要么完全回滚[^3]。 ```java package com.example.service.impl; import com.example.entity.User; import com.example.mapper.UserMapper; import com.example.service.UserService; import org.springframework.stereotype.Service; import javax.transaction.Transactional; import java.util.List; @Service @Transactional public class UserServiceImpl implements UserService { private final UserMapper userMapper; public UserServiceImpl(UserMapper userMapper) { this.userMapper = userMapper; } @Override public List<User> getAllUsers() { return userMapper.selectAll(); } } ``` #### Mapper Mapper主要用于映射Java对象到关系型数据库表结构之间转换的工作。MyBatis是一个流行的持久框架,可以方便地配置SQL语句并与实体类关联起来。在Spring Boot应用,可以通过`@MapperScan`指定扫描包路径自动注册所有的Mapper接口实例[^2]。 ```java package com.example.mapper; import com.example.entity.User; import org.apache.ibatis.annotations.Select; import java.util.List; public interface UserMapper { @Select("SELECT * FROM users") List<User> selectAll(); } ``` #### Entity 实体类 虽然不是严格意义上的“”,但在讨论分架构时不可或缺的是Entity部分。这部分表示领域模型或POJO(Plain Old Java Object),它们代表了存储于数据库的记录,并且可以在不同次间传递而不改变其状态。 ```java package com.example.entity; public class User { private Long id; private String name; private Integer age; // Getters and Setters... } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值