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/