스프링 46

Query By Example 간단 예제, 사용

이번 스프링에서 밀어주는 query 탐색법이다. Entity를 생성해서 Example 객체로 변환, repository로 찾아버림 JPA Repository findAll과 같은 메서드에 이미 Example 버전을 만들어 놨다. (left join이 안되어서 실무에선 주로 QueryDsl을 사용한다.) 버전 1. 그냥 Entity객체 생성해서 실행 @Test public void queryByExampleTest() throws Exception { //given Team teamA = new Team("teamA"); Member m1 = new Member("m1",0,teamA); Member m2 = new Member("m2",0,teamA); em.persist(teamA); em.persis..

스프링/JPA 2022.03.01

`SpringDataJPA` 기본 save 작동 과정 (merge와 persist를 중심으로 효율성 개선)

기본적으로 SpringDataJPA의 기본 구현체인 save는 새로운 엔티티면 저장(persist) 기존에 있으면 (db에서 한번이라도 퍼올렸던 경험) merge를 한다. SimpleJpaRepository의 save 메서드 모습. @Repository @Transactional(readOnly = true) public class SimpleJpaRepository implements JpaRepositoryImplementation { @Transactional @Override public S save(S entity) { Assert.notNull(entity, "Entity must not be null."); if (entityInformation.isNew(entity)) { em.persi..

스프링/JPA 2022.02.27

API 구현시 Parameter로 자동 Paging 객체 매핑하기

Pageable 인터페이스를 구현체로 SpringDataJPA의 기능을 이용해 SpringBoot가 Parameter로 PageRequest라는 객체를 생성을 해서 구현을 해준다. //마지막 파라미터로 Pageable 인터페이스 받아서 쓰면 된다. //파라미터 Page 넘기면 자동으로 Mapping, Paging @GetMapping("/members") public Page list(Pageable pageable){ return memberRepository.findAll(pageable); } 페이징을 위해 Pageable을 받는 findAll이 PagingAndSortingRepository에 구현되어있다.(Data JPA) @NoRepositoryBean public interface Pagin..

스프링/JPA 2022.02.25

API 구현시 `@PathVariable`로 id받아 자동 Entity 매핑하기

어떤 Entity를 조회할 때, id 값으로 받는 경우에 사용하면 편하다. @RestController @RequiredArgsConstructor public class MemberController { private final MemberRepository memberRepository; **//1번 우리가 예상하는 구현** @GetMapping("/getMember/{id}") public String findMember(@PathVariable("id") Long id) { Member member = memberRepository.findById(id).get(); return member.getUsername(); } **//2번 Spring이 id로 자동으로 Member 삽입** @GetMa..

스프링/MVC 2022.02.24

Entity를 변경/생성할 때, 변경자와 시간 히스토리 관리하려면?

순수 JPA로 하는 법 @MappedSuperclass 를 선언한 속성값 선언용 Class를 만들어 Entity에서 상속받게 하라. MappedSuperclass 생성, 변수 선언 @MappedSuperclass //실제 상속관계는 아니고 그냥 값만 내려서 사용할 수 있게 해주는 class //이걸 선언해야 이후 상속한 Entity Table 생성시 변수값이 추가된다. public class JpaBaseEntity { @Column(updatable = false) //DB의 값이 변경되지 않게 고정해주는 어노테이션 private LocalDateTime createdDate; private LocalDateTime updatedDate; @PrePersist //persist (등록) 하기전에 발동 ..

스프링/JPA 2022.02.24

Spring Data JPA 구현체를 만들고 싶다면?

💡 Spring Data JPA 레포지토리가 인터페이스만 정의하기 때문에 인터페이스 구현체를 만들 때 만들어야하는 기능이 너무 많다. 인터페이스의 메서드를 직접 구현하는 방법을 알아보자. 만약 Spring JPA data 를 상속하고 있는 Repository interface를 구현하려고 하려면 이 모든 method들을 구현해야 한다. 그러나 따로 메서드를 빼서 내가 원하는 구현을 하고 싶을 땐 어떻게 해야할까? ex ) 직접 sql 접근 (JDBC Connection), QueryDsl 사용할 때 쿼리 직접 넣으니까 빼서 구현 등 custom Interface 생성 public interface MemberRepositoryCustom { List findMemberCustom(); } custom I..

스프링/JPA 2022.02.23
1 2 3 4 5