spring-data-jpa 使用Spring Data JPA在服务层中创建Crud方法

eufgjt7s  于 2022-11-10  发布在  Spring
关注(0)|答案(1)|浏览(190)

我正在使用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);
  }
}
cclgggtu

cclgggtu1#

是的,您提供了您自己的impl,它可以在重用Spring JPA的CrudRepository中的Derived查询的同时执行自定义操作。我已经见过很多次了。:)如果我们想在调用Derived方法之前执行自己的计算,我们就需要这样做。毕竟,计算很可能是存储库的一部分,所以将该逻辑放在服务中没有意义。但是在您的场景中,如果没有这样的自定义计算,那么就不需要这种间接访问。正如评论者提到的,您应该直接使用UserDao接口。:)

相关问题