So sánh, phân biệt CrudRepository với JpaRepository trong Spring Data

So sánh, phân biệt CrudRepository với JpaRepository trong Spring Data.

(Xem lại: Code ví dụ Spring Boot JpaRepository)

So sánh CrudRepository với JpaRepository

Khi lập trình với Spring Data JPA, một số bạn thắc mắc sự khác nhau giữa CrudRepository với JpaRepository, khi dùng cả 2 đều cho ra kết quả như nhau.

Vậy sự khác nhau giữa chúng là gì?
Thực chất thì JpaRepository thừa kế từ CrudRepository và có thêm một số chức năng mở rộng.

Mở JavaDoc ta sẽ thấy:

@NoRepositoryBean
public interface JpaRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {

  List<T> findAll();

  List<T> findAll(Sort sort);

  List<T> findAllById(Iterable<ID> ids);

  <S extends T> List<S> saveAll(Iterable<S> entities);

  void flush();

  <S extends T> S saveAndFlush(S entity);

  void deleteInBatch(Iterable<T> entities);

  void deleteAllInBatch();

  T getOne(ID id);

  @Override
  <S extends T> List<S> findAll(Example<S> example);

  @Override
  <S extends T> List<S> findAll(Example<S> example, Sort sort);
}
@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
  Iterable<T> findAll(Sort sort);

  Page<T> findAll(Pageable pageable);
}
@NoRepositoryBean
public interface CrudRepository<T, ID> extends Repository<T, ID> {

  <S extends T> S save(S entity);

  <S extends T> Iterable<S> saveAll(Iterable<S> entities);

  Optional<T> findById(ID id);

  boolean existsById(ID id);

  Iterable<T> findAll();

  Iterable<T> findAllById(Iterable<ID> ids);

  long count();

  void deleteById(ID id);

  void delete(T entity);

  void deleteAll(Iterable<? extends T> entities);

  void deleteAll();
}

JpaRepository thừa kế từ PagingAndSortingRepository, còn PagingAndSortingRepository lại thừa kế từ CrudRepository

Do đó JpaRepository thừa kế CrudRepository. Ngoài các method thừa kế từ CrudRepository thì JpaRepository còn có các method riêng cho mình, đặc biệt là việc phân trang, sắp xếp kết quả trả về…

Vậy nên các bạn cứ thoải mái mà dùng JpaRepository thay cho CrudRepository nhé, tiện lợi hơn rất nhiều.

(Mình nhớ không nhầm thì trước kia chỉ có CrudRepository thì phải, sau đấy có thêm JpaRepository để thực hiện thêm một chức năng mở rộng

So sánh, phân biệt CrudRepository với JpaRepository trong Spring Data stackjava.com

Okay, Done!

 

References:

https://docs.spring.io/spring-data/jpa/docs/2.1.0.M2/reference/html/

stackjava.com