我正在使用Spring和Spring Data JPA构建一个小型应用程序,并且需要在服务层使用CrudRepository方法,因此我创建了2个类:但是我不知道这是否是正确的甚至是最好的方法。
下面是一个示例:
- 你好
@Entity
public class User {
@Id
private Long id;
private String username;
}
DAO:
public interface UserDAO extends CrudRepository<User, Long> {
User findOneByUsername(String username);
}
一般服务
public interface GenericService<T, ID extends Serializable> {
<S extends T> S save(S entity);
}
服务
public interface UserService extends GenericService<User, Long> {
User findOneByUsername(String username);
}
通用服务实现
public class GenericServiceImpl<T, ID extends Serializable> implements GenericService<T, ID> {
@Autowired
private CrudRepository<T, ID> repository;
@Override
public <S extends T> S save(S entity) {
return repository.save(entity);
}
}
服务实施
@Service
@Transactional
public class UserServiceImpl extends GenericServiceImpl<User, Long> implements UserService {
@Autowired
private UserDAO userDAO;
@Override
public User findOneByUsername(String username) {
userDAO.findOneByUsername(username);
}
}
1条答案
按热度按时间cclgggtu1#
是的,您提供了您自己的impl,它可以在重用Spring JPA的CrudRepository中的Derived查询的同时执行自定义操作。我已经见过很多次了。:)如果我们想在调用Derived方法之前执行自己的计算,我们就需要这样做。毕竟,计算很可能是存储库的一部分,所以将该逻辑放在服务中没有意义。但是在您的场景中,如果没有这样的自定义计算,那么就不需要这种间接访问。正如评论者提到的,您应该直接使用UserDao接口。:)