2.SpringDataJPA共通のインタフェースと基本的な方法

オープニング広告
自家製の淘宝網の襟クーポンサイト:q.hayye.cn(電話オープン)は
、宣伝されていない単語は、プッシュしない使いやすいと主張し、文字は、我々はいけないと言います。
フロントエンドのオープンソースアドレス:https://gitee.com/hayye/tbq
バックエンドが開かない......
QQグループ
随時淘宝網神のバウチャーがありますが、技術的な議論するグループを追加するために歓迎します!


テキスト開始

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

おすすめ

転載: blog.csdn.net/qq_34674651/article/details/93723108