springboot各层之间的关系

         目前,我的理解就是,DAO层的作用是从数据库里面拿取原材料,通过xml文件实现对数据库的操作,并且传递给业务层的具体实现类imp;Service业务层可以分为两个部分,一个是service接口,一个是imp具体实现类,service接口在Controller层使用,同时可以说是一个业务需求,而imp具体实现业务需求;Controller层与前端对接,提供所有的业务需求地址;POJO层里面的类则是对应数据库里面的表,类属性对应表里的元素。

员工简介

        如果整个项目是一个饭店,那么数据库就是菜篮,里面放了很多菜,而service层分为两个,一个是imp具体实现类,一个是service接口,前者扮演的是主厨,后者是店小二;dao层扮演的是主厨的副手,从菜篮拿菜、切菜;controller层扮演的是服务员,顾客把自己想要吃的菜告诉服务员,然后服务员拿一个小本本记下来;pojo层扮演的就是菜;utils层则是主厨做菜时需要使用的工具;config层则是整个饭店运营的所有的配置,如桌子椅子什么的。

日常运营

        饭店一天的运营情况:顾客进来饭店,首先前端打个招呼,欢迎光临!这个时候服务员走过来给顾客安排好座位,顾客看着前端给的菜单皱了一下眉头,过了好久才点完菜,服务员记下后就把小本本给店小二,于是店小二跑去厨房将本本给了主厨,主厨看了一下说好,于是开始拿着utils准备干活,结果发现菜还在菜篮里,就让自己的副手去准备好菜,自己好休息一会,副手起来拿着菜开始准备,洗菜、切菜,准备完后给主厨,于是主厨开始干活,一顿操作后将做好的菜放在盘子里,然后告诉店小二菜好了,于是店小二端着菜送到顾客那里,又来一个顾客,…饭店的一天就是这样。

### Spring Boot 后端项目中 Controller、Service 和 Dao 作用与调用关系 #### 1. **Controller ** Controller 的主要职责是接收客户端请求并返回响应结果。它通过 `@Controller` 或 `@RestController` 注解标记类,使得该类被识别为控制器组件[^4]。 - 接收 HTTP 请求并通过方法参数获取请求数据。 - 将接收到的数据传递给 Service 进行业务逻辑处理。 - 根据 Service 的返回结果构建响应体并发送回客户端。 示例代码如下: ```java @RestController @RequestMapping("/api") public class UserController { @Autowired private UserService userService; @GetMapping("/users/{id}") public ResponseEntity<User> getUserById(@PathVariable Long id) { User user = userService.getUserById(id); // 调用 Service 方法 return ResponseEntity.ok(user); } } ``` --- #### 2. **Service ** Service 的核心功能在于实现业务逻辑处理。它是整个应用程序的关键部分,负责协调多个 DAO 操作以及封装复杂的业务规则[^5]。 - 提供面向领域模型的服务接口,隐藏底数据库操作细节。 - 可能会调用多个 DAO 方法来完成特定的任务。 - 支持事务管理,默认情况下可以通过 `@Transactional` 注解开启声明式事务支持。 以下是 Service 的一个简单例子: ```java @Service public class UserService { @Autowired private UserDao userDao; public User getUserById(Long id) { return userDao.findById(id).orElse(null); // 调用 DAO 方法 } @Transactional public void updateUser(User user) { userDao.save(user); // 数据持久化操作 } } ``` --- #### 3. **Dao (Mapper )** Dao (也称为 Mapper )主要用于执行数据访问操作,例如查询、插入、更新和删除等。这一通常依赖于 ORM 工具(如 Hibernate 或 MyBatis),或者直接编写原生 SQL 查询语句[^2]。 - 定义了与数据库交互的具体方法。 - 不涉及任何业务逻辑,仅专注于 CRUD 操作和其他复杂查询。 下面是一个基于 JPA 的 Dao 实现: ```java @Repository public interface UserDao extends JpaRepository<User, Long> { Optional<User> findById(Long id); } ``` 如果使用 MyBatis,则可以定义 XML 映射文件或注解方式实现相同的功能。 --- #### 4. **Entity ** Entity 代表的是数据库表结构对应的 Java 对象(POJO)。这些对象用于在各之间传输数据,并作为 ORM 框架映射的基础单元[^1]。 一个典型的 Entity 类如下所示: ```java @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; private String email; // Getters and Setters... } ``` --- #### 总结 在一个标准的 Spring Boot 应用程序中,各个之间的协作遵循以下模式: - **Controller → Service**: 控制器将请求参数转发至服务以触发相应的业务逻辑。 - **Service → Dao**: 服务调用数据访问的方法来读取/修改存储在数据库中的记录。 - **Data Transfer via Entity**: 所有跨通信均借助实体类实例完成,从而确保数据一致性。 ---
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

月夜奇术师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值