努力吗?

 平生第一次追女孩子,不知道该怎么做什么,说什么.有些时候好累!但是还是要坚持,还是要努力的.我希望这次是第一次,也会是最后一次.
 估计是要拿出高考的劲头来努力了,不知道会不会落榜!
  看来感情才是最复杂的东西,远远超过了知识.
      经常会非常高兴,欣喜;偶尔会有些落寂;总有些许不安和担忧;总有许多未来要设想.....
或许这就是初恋的感觉吧............ 

    就像张晗韵的歌一样,酸酸甜甜的!!!

当然应该使用 `Service` 层!在实际企业级开发中,**业务逻辑应当放在 Service 层**,以实现良好的分层架构(Controller → Service → Mapper),提高代码的可维护性、可测试性和事务管理能力。 下面我为你**补全并重构之前的代码,加入 Service 层**,并对整体结构进行优化。 --- ### ✅ 新增:Service 接口 SupplierService.java ```java package com.example.demo.service; import com.example.demo.entity.Supplier; import java.util.List; public interface SupplierService { /** * 新增供应商 */ boolean addSupplier(Supplier supplier); /** * 查询所有供应商 */ List<Supplier> getAllSuppliers(); /** * 根据 ID 删除供应商 */ boolean deleteSupplierById(Long id); } ``` --- ### ✅ 新增:Service 实现类 SupplierServiceImpl.java ```java package com.example.demo.service.impl; import com.example.demo.entity.Supplier; import com.example.demo.mapper.SupplierMapper; import com.example.demo.service.SupplierService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import java.util.List; @Service // 注册为 Spring Bean @Transactional // 开启事务管理,确保删除等操作原子性 public class SupplierServiceImpl implements SupplierService { @Autowired private SupplierMapper supplierMapper; @Override public boolean addSupplier(Supplier supplier) { return supplierMapper.insert(supplier) > 0; } @Override public List<Supplier> getAllSuppliers() { return supplierMapper.findAll(); } @Override public boolean deleteSupplierById(Long id) { return supplierMapper.deleteById(id) > 0; } } ``` --- ### 🔁 修改 Controller:注入 Service 替代直接调用 Mapper ```java package com.example.demo.controller; import com.example.demo.entity.Supplier; import com.example.demo.service.SupplierService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.*; import java.util.List; @Controller @RequestMapping("/api/suppliers") public class SupplierController { @Autowired private SupplierService supplierService; // M2.1: 新增供应商(POST) @PostMapping @ResponseBody public String addSupplier(@RequestBody Supplier supplier) { boolean success = supplierService.addSupplier(supplier); return success ? "{\"status\":\"success\", \"message\":\"供应商添加成功\"}" : "{\"status\":\"fail\", \"message\":\"添加失败\"}"; } // M2.2: 查询所有供应商(返回页面) @GetMapping public String getAllSuppliers(Model model) { List<Supplier> suppliers = supplierService.getAllSuppliers(); model.addAttribute("suppliers", suppliers); return "suppliers"; // Thymeleaf 模板 } // M2.3: 删除供应商(DELETE) @DeleteMapping("/{id}") @ResponseBody public String deleteSupplier(@PathVariable Long id) { boolean success = supplierService.deleteSupplierById(id); return success ? "{\"status\":\"deleted\", \"message\":\"删除成功\"}" : "{\"status\":\"not found\", \"message\":\"未找到该记录\"}"; } } ``` --- ### 🧱 分层架构说明(更新后) | 层级 | 职责 | |------|------| | `Controller` | 接收 HTTP 请求,调用 Service,返回视图或 JSON | | `Service` | 封装业务逻辑,控制事务,协调多个 DAO 操作(如需) | | `Mapper` | 单纯的数据访问,执行 SQL | | `Entity` | 数据模型 | | `Thymeleaf` | 视图展示 | --- # ✅ 为什么需要 Service 层? 1. **业务逻辑集中管理**:比如“删除前检查是否有关联订单”,这类逻辑不应写在 Controller。 2. **事务控制更灵活**:用 `@Transactional` 可保证多个数据库操作要么全部成功,要么回滚。 3. **便于单元测试**:可以独立测试业务逻辑,不依赖 Web 层。 4. **解耦清晰**:Controller 只负责接口,Service 负责“怎么做”。 --- # 知识点(列出该代码中遇到的知识点) 1. **Spring 分层架构(MVC)** Controller 处理请求,Service 封装业务逻辑,Mapper 操作数据库,层次分明。 2. **@Service 与业务逻辑解耦** 使用 Service 层将核心逻辑从控制器分离,提升可维护性与复用性。 3. **@Transactional 事务管理** 保证数据操作的原子性,防止部分成功导致的数据不一致问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值