如何将Controller中的数据写入逻辑迁移至UserService类?
解决Spring Boot中将数据库操作迁移至UserService的问题
我有一个包含username和email属性的User对象,现有MainController负责渲染user.html页面,页面包含两个输入框和一个按钮,点击按钮可将输入数据写入数据库,程序目前可正常运行,但希望将数据写入逻辑迁移至UserService类。
之前误以为MainController的usersShow方法参数为String类型,导致不知道如何给UserService的方法传递User类型参数,但实际上原代码中Controller的方法已经能正确接收User对象。
步骤1:完善UserService类,封装数据库操作逻辑
在UserService中添加处理数据库操作的方法,直接接收User类型参数,把原Controller中的数据操作逻辑迁移过来:
@Service public class UserService { private final UserRepository userRepository; @Autowired public UserService(UserRepository userRepository) { this.userRepository = userRepository; } // 保存用户的业务方法,封装数据库写入逻辑 public void saveUser(User user) { userRepository.save(user); } // 如需查询所有用户,也可在此封装 public List<User> getAllUsers() { return userRepository.findAll(); } }
步骤2:修改MainController,依赖UserService处理业务
移除MainController中对UserRepository的直接依赖,改为注入UserService,并调用其方法完成数据操作:
@Controller @RequestMapping public class MainController { private final UserService userService; @Autowired public MainController(UserService userService) { this.userService = userService; } @GetMapping(path = "/users") public String usersPage(Model model) { model.addAttribute("user", new User()); return "user"; } @PostMapping(path = "/users") public String usersShow(@ModelAttribute("user") User user) { // 调用UserService方法获取所有用户 System.out.println(userService.getAllUsers()); // 调用UserService方法保存用户 userService.saveUser(user); return "redirect:/users"; // 修正原代码中redirect路径不一致问题,与GetMapping路径保持统一 } }
关键说明
- 原代码中
@ModelAttribute("user")注解已经自动将表单提交的username、email数据绑定到User对象上,usersShow方法的参数本来就是User类型,不存在参数为String的问题,直接将该对象传入UserService的方法即可。 - 改造后符合分层架构设计:Controller仅负责处理请求、视图跳转,Service层封装业务逻辑与数据操作,降低代码耦合度。
内容的提问来源于stack exchange,提问作者Maksim1251
相关产品推荐
相关产品推荐

