java – 应该在服务层中编写哪些方法?
作者:互联网
我尝试按照Spring MVC的教程进行操作.在教程中有UserDao接口(使用Spring Data JPA)
public interface UserDao extends JpaRepository<User, Long> {
User findByUsername(String username);
}
还有UserService和UserServiceImpl
public interface UserService {
void save(User user);
User findByUsername(String username);
}
@Service
public class UserServiceImpl implements UserService {
@Autowired
private UserDao userDao;
@Autowired
private RoleDao roleDao;
@Autowired
private BCryptPasswordEncoder bCryptPasswordEncoder;
@Override
public void save(User user) {
user.setPassword(bCryptPasswordEncoder.encode(user.getPassword()));
Set<Role> roles = new HashSet<>();
roles.add(roleDao.getOne(1L));
user.setRoles(roles);
userDao.save(user);
}
@Override
public User findByUsername(String username) {
return userDao.findByUsername(username);
}
}
>为什么save方法在Service Layer中而不在dao层?我读到所有CRUD操作都应该进入dao层.
> UserServiceImpl中findByUsername(String username)的用途是什么?我们可以在dao中使用该方法,因为我们使用Spring Data,所以Spring已经实现了这个功能.
解决方法:
>
I read that all CRUD operations should go in the dao layer.
你是对的. userDao.save(user) – 这是CRUD.但是设置密码并添加角色 – 它是业务逻辑的一部分. DAO层应该对业务逻辑一无所知.在这种情况下,dao层应该只准备用户并将其保存到db中.就这样.
>
What the purpose of findByUsername(String username) in UserServiceImpl
出于同样的原因,findByUsername(String username)在Service中.现在没有任何反应,只是从DAO调用了一个方法.但突然之间,有必要在从DAO调用方法之前添加一些逻辑.
标签:service-layer,java,spring,spring-data-jpa,spring-mvc 来源: https://codeday.me/bug/20190823/1701043.html