每日面经分享(Spring Boot: part3 Service层)

  1. SpringBoot Service层的作用
    a. 封装业务逻辑:Service层负责封装应用程序的业务逻辑。Service层是控制器(Controller)和数据访问对象(DAO)之间的中间层,负责处理业务规则和业务流程。通过将业务逻辑封装在Service层中,可以保持控制器的简洁性,提高代码的可维护性和可复用性。
    b. 事务管理:Service层涉及到与数据库的交互和数据的修改。通过在Service层的方法上使用@Transactional注解,可以实现对数据库操作的事务管理。这样,在多个数据库操作中,如果其中一个操作失败,整个事务可以回滚,确保数据的一致性。
    c. 协调多个DAO操作:在业务逻辑中,需要对多个实体进行操作,涉及到多个DAO的调用。Service层可以协调这些DAO操作,确保它们按照正确的顺序和方式执行。优点:保持DAO的单一职责,提高代码的可读性和可维护性。
    d. 数据转换和验证:Service层负责对输入数据进行验证和转换。验证输入数据的有效性、完整性和一致性,以及进行数据格式转换和数据清洗等操作。确保数据的质量和正确性,避免在后续的处理过程中出现问题。
    e. 提供业务接口:Service层可以定义一组接口,用于提供对业务逻辑的访问。这些接口可以被其他组件(如控制器、其他服务等)调用,实现对业务逻辑的封装和复用。优点:提高代码的可测试性和可扩展性。
  2. SpringBoot Service层搭建过程
    a. 创建Service接口:创建一个名为UserService的接口,定义一些用户相关的方法。
public interface UserService {
    User getUserById(Long id);
    List<User> getAllUsers();
    void saveUser(User user);
    void updateUser(User user);
    void deleteUser(Long id);
}

b. 创建Service实现类:创建UserService接口的实现类UserServiceImpl,并添加@Service注解进行标识。

@Service
public class UserServiceImpl implements UserService {

    @Autowired
    private UserRepository userRepository;

    @Override
    public User getUserById(Long id) {
        return userRepository.findById(id).orElse(null);
    }

    @Override
    public List<User> getAllUsers() {
        return userRepository.findAll();
    }

    @Override
    public void saveUser(User user) {
        userRepository.save(user);
    }

    @Override
    public void updateUser(User user) {
        userRepository.save(user);
    }

    @Override
    public void deleteUser(Long id) {
        userRepository.deleteById(id);
    }
}

c. 创建Repository接口:在DAO层中创建一个名为UserRepository的接口,继承自Spring Data JPA的CrudRepository接口。

public interface UserRepository extends CrudRepository<User, Long> {
    // 可以根据需要添加自定义的查询方法
}

d. 使用Service层:在Controller层中使用UserService,通过依赖注入的方式将其注入到Control

@RestController
@RequestMapping("/users")
public class UserController {

    @Autowired
    private UserService userService;

    @GetMapping("/{id}")
    public User getUserById(@PathVariable Long id) {
        return userService.getUserById(id);
    }

    @GetMapping("/")
    public List<User> getAllUsers() {
        return userService.getAllUsers();
    }

    @PostMapping("/")
    public void saveUser(@RequestBody User user) {
        userService.saveUser(user);
    }

    @PutMapping("/")
    public void updateUser(@RequestBody User user) {
        userService.updateUser(user);
    }

    @DeleteMapping("/{id}")
    public void deleteUser(@PathVariable Long id) {
        userService.deleteUser(id);
    }
}

互联网大厂测开经历,目前担任测试开发负责人,每天分享互联网面经,如果你有测试相关的问题,欢迎咨询,海鲜市场【简历优化】、【就业指导】、【模拟/辅导面试】,已辅导20位以上同学拿到心仪offer

海鲜市场

相关推荐

  1. C++ 每日一问(一)

    2024-03-31 18:12:01       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-03-31 18:12:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-03-31 18:12:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-03-31 18:12:01       82 阅读
  4. Python语言-面向对象

    2024-03-31 18:12:01       91 阅读

热门阅读

  1. P8709 [蓝桥杯 2020 省 A1] 超级胶水

    2024-03-31 18:12:01       39 阅读
  2. zookeeper--ACL详解

    2024-03-31 18:12:01       40 阅读
  3. perl:字符串模糊匹配,计算 edit 距离

    2024-03-31 18:12:01       37 阅读
  4. linux 系列文章目录 - 打包压缩命令之tar命令

    2024-03-31 18:12:01       39 阅读
  5. OSPF与静态路由配置实验介绍

    2024-03-31 18:12:01       39 阅读
  6. 二叉树的遍历C语言

    2024-03-31 18:12:01       46 阅读
  7. 【PySide6】PySide6安装及VSCode配置PySide6环境

    2024-03-31 18:12:01       43 阅读
  8. 专升本-物联网

    2024-03-31 18:12:01       37 阅读
  9. linux下I/O多路复用

    2024-03-31 18:12:01       39 阅读
  10. 今天给兄弟姐妹们投喂一些vim的命令组合

    2024-03-31 18:12:01       34 阅读