So sánh, phân biệt CrudRepository với JpaRepository trong Spring Data
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:
JpaRepository.java
@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);
}
Code language: HTML, XML (xml)
PagingAndSortingRepository.java
@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
Iterable<T> findAll(Sort sort);
Page<T> findAll(Pageable pageable);
}
Code language: PHP (php)
CrudRepository.java
@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();
}
Code language: HTML, XML (xml)
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
Okay, Done!
References:
https://docs.spring.io/spring-data/jpa/docs/2.1.0.M2/reference/html/
Leave a Reply