JPA Repositoryインタフェース詳細1


JPA Repository Interface


Entity


JavaオブジェクトとDBテーブルに関連付けられているのはORMです.
ここでjavaオブジェクトをEntityと呼びます.
したがって、指向性要素を用いて、要素を簡単に表すことができる.

🤔 なぜエラーが発生したのでしょうか.
デフォルトでは、エンティティにプライマリ・キーが必要です.
@Id
@GeneratedValue //autoincrement
private long id;
追加します.

これにより、User Entityが作成されます.
では、これらのオブジェクトをどのように格納し、どのようにクエリーしますか?
ページをめくることです.

Repository


以前に説明したSpring Data JPAのサポートです.Javaインタフェースを宣言し、Jpa RepositoryはJpaに関連する多くの機能をサポートすることができます.
public interface UserRepoitory extends JpaRepository<User, Long> {
ではTESTの習慣を試してみましょう!!
@SpringBootTest //SpringConext를 로딩하여 Test에 활용하겠다.
class UserRepoitoryTest {

    @Autowired
    private UserRepoitory userRepoitory;

    @Test
    void crud(){  // create, read, update, delete
        userRepoitory.save(new User()); //User 생성하고 저장.
        System.out.println(" >>> " + userRepoitory.findAll());
    }

}

🤔 ではsaveやfindAllのような方法はどこから持ってきたのでしょうか。あとどのくらいありますか。

JpaRepository

	// 조건x 테이블 전체값 가져오기, Test 쓰이지만 실제서비스에선 성능때문에 잘 사용하지 않음.
	@Override
	List<T> findAll();

	// sort값을 즉 정렬 값 추가된 조회
	@Override
	List<T> findAll(Sort sort);

	// Id값을 List로 받아서 In 구문으로 조회하여 여러가지 레코드를 조회
	@Override
	List<T> findAllById(Iterable<ID> ids);

	// entity를 리터럴로 받아서 모두 저장
	@Override
	<S extends T> List<S> saveAll(Iterable<S> entities);

	// 현재 JPA컨텍스트에 가지고 있는 DB값을 DB에 반영하도록 하는 메서드
	void flush();

	// 위와 비슷 저장하고바로반영
	<S extends T> S saveAndFlush(S entity);
	<S extends T> List<S> saveAllAndFlush(Iterable<S> entities);

	// Entity를 리터러블(리스트상위인터페이스) 형식으로 받아서 한꺼번에 지운다.
	default void deleteInBatch(Iterable<T> entities){deleteAllInBatch(entities);}
	
   	// 조건없이 해당 엔티티 즉 테이블을 통제로 지운다. 실제로 안씀.FindAll이랑 비슷
	void deleteAllInBatch(Iterable<T> entities);
	
   	// 해당 ID값을 받아서 값을 조회한다.
	T getOne(ID id);
	T getById(ID id);

	// 예시를 이용한 findAll도 제공한다.
	<S extends T> List<S> findAll(Example<S> example);
	// 예시 + 정렬 값을 이용한 findAll도 사용 가능하다.
	<S extends T> List<S> findAll(Example<S> example, Sort sort);
PagingAndSortingRepository
	//Pageable을 사용해 쉽게 페이징 하도록 하는 메서드.
	Page<T> findAll(Pageable pageable);
CrudRepository
	// 우리가 사용하는 대부분이 여기 있다.
	
    // 엔티티에 대한 저장
	<S extends T> S save(S entity);

	// 리스트타입을 한번에 저장
	<S extends T> Iterable<S> saveAll(Iterable<S> entities);

	// Optional 타입으로 랩핑해서 Id값으로 객체를 찾는 것 findOne과 조금 다름.
	Optional<T> findById(ID id);

	// 해당객체의 존재 여부확인
	boolean existsById(ID id);


	Iterable<T> findAll();

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

	// 전체 엔티티의 개수 확인. 페이징할때 유용
	long count();

	// id값을 엔티티를 인자로 받아서 삭제.
	void deleteById(ID id);
	void delete(T entity);
	void deleteAllById(Iterable<? extends ID> ids);
	void deleteAll(Iterable<? extends T> entities);
	void deleteAll();
このように、いわゆる亀殻ライブラリを作成してJpaRepositoryを継承することで、上記の多くの機能を使用することができます.!!!😎😎😎
理解やおなじみのものは書きながら作りましょう!!!