オープニング広告
自家製の淘宝網の襟クーポンサイト:q.hayye.cn(電話オープン)は
、宣伝されていない単語は、プッシュしない使いやすいと主張し、文字は、我々はいけないと言います。
フロントエンドのオープンソースアドレス:https://gitee.com/hayye/tbq
バックエンドが開かない......
随時淘宝網神のバウチャーがありますが、技術的な議論するグループを追加するために歓迎します!
テキスト開始
1. CrudRepository
唯一のいくつかの比較的単純な方法のCRUD。
出典:
@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();
}
2. PagingAndSortingRepository
彼は基本的なCRUDに加えて、CrudRepositoryを継承するだけでなく、ソートやページングの方法を提供します。
出典:
@NoRepositoryBean
public interface PagingAndSortingRepository<T, ID> extends CrudRepository<T, ID> {
Iterable<T> findAll(Sort sort);
Page<T> findAll(Pageable pageable);
}
簡単な使用法:インターフェイスの継承後、直接呼び出しを完了するために以下の方法を使用して。
ゼロからのページ番号ことに注意してください...
Sort sort = new Sort(Sort.Direction.DESC,"id");
Page<Book> page = bookRepository.findAll(PageRequest.of(0,2,sort));
3. JpaRepository
最初の二つのインタフェースはインタフェースの基礎となるSpringData比較され、NoSQLのと互換性、JpaRepositoryから、リレーショナル・データベース最適化されたバッチ操作、手動リフレッシュデータベース、等戻りリストを開始しました。
出典:
@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);
<S extends T> List<S> findAll(Example<S> example);
<S extends T> List<S> findAll(Example<S> example, Sort sort);
}
4. SimpleJpaRepository
主にEntityManagerの休止によるJpaRepository実装クラス、。
セクション出典:
@Repository
@Transactional(readOnly = true)
public class SimpleJpaRepository<T, ID> implements JpaRepository<T, ID>, JpaSpecificationExecutor<T> {
private final JpaEntityInformation<T, ?> entityInformation;
private final EntityManager em;
private final PersistenceProvider provider;
//...
@Transactional
public void delete(T entity) {
Assert.notNull(entity, "The entity must not be null!");
em.remove(em.contains(entity) ? entity : em.merge(entity));
}
@Transactional
public void flush() {
em.flush();
}
@Transactional
public <S extends T> S save(S entity) {
if (entityInformation.isNew(entity)) {
em.persist(entity);
return entity;
} else {
return em.merge(entity);
}
}
public Optional<T> findById(ID id) {
Assert.notNull(id, ID_MUST_NOT_BE_NULL);
Class<T> domainType = getDomainClass();
if (metadata == null) {
return Optional.ofNullable(em.find(domainType, id));
}
LockModeType type = metadata.getLockModeType();
Map<String, Object> hints = getQueryHints().withFetchGraphs(em).asMap();
return Optional.ofNullable(type == null ? em.find(domainType, id, hints) : em.find(domainType, id, type, hints));
}
//...
}
実際のビジネスに応じて決定インタフェース固有の継承。
附属書:デモソースhttps://github.com/hayye/JPADemo