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