일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- jpa
- springdatajpa
- Servlet
- 백준
- spring
- QueryDSL
- 스프링
- pointcut
- 알고리즘
- JDBC
- http
- Android
- Greedy
- AOP
- 그리디
- java
- 스프링 핵심 원리
- Exception
- 스프링 핵심 기능
- SpringBoot
- kotlin
- JPQL
- Thymeleaf
- 인프런
- Proxy
- 자바
- transaction
- db
- 김영한
- Spring Boot
- Today
- Total
목록인프런/[인프런] Spring Data JPA (22)
개발자되기 프로젝트
1. Native Query 가급적 네이티브 쿼리는 사용하지 않는게 좋음, 정말 어쩔 수 없을 때 사용 최근에 나온 궁극의 방법 --> 스프링 데이터 Projections 활용 Repository @Query(value = "select * from member where userName = ?", nativeQuery = true) Member findByNativeQuery(String userName); Test Member result = memberRepository.findByNativeQuery("m1"); System.out.println("result = " + result); SQL select * from member where user_name = ? 2. 스프링 데이터 JPA 기반..
엔티티 대신에 DTO를 편리하게 조회할 때 사용 전체 엔티티가 아니라 딱 회원의 이름만 조회하고 싶은 경우! 1. closed Projection 인터페이스만 생성하면 구현체는 SpringDataJpa가 만듦. public interface UserNameOnly { String getUserName(); } 사용 방법 : 아래와 같이 return type으로 인터페이스를 지정해주면 됨. @Test public void projections(){ Team teamA = new Team("teamA"); em.persist(teamA); Member m1 = new Member("m1", 0, teamA); Member m2 = new Member("m2", 0, teamA); em.persist(m1);..
1. Query By Example 엔티티 자체를 검색 조건으로 사용 가능 엔티티로부터 Example 객체를 만들어 사용. 스프링에서 기본적으로 Example 파라미터를 받을 수 있도록 지원함. @Test public void queryByExample(){ Team teamA = new Team("teamA"); em.persist(teamA); Member m1 = new Member("m1", 0, teamA); Member m2 = new Member("m2", 0, teamA); em.persist(m1); em.persist(m2); em.flush(); em.clear(); //when //Probe Member member = new Member("m1"); //엔티티 자체가 검색조건 Ex..
1. SimpleJpaRepository @Repository @Transactional(readOnly = true) public class SimpleJpaRepository ...{ @Transactional public S save(S entity) { if (entityInformation.isNew(entity)) { em.persist(entity); return entity; } else { return em.merge(entity); } } ... } SpringDataJpa의 구현체 @Repository 스프링 빈으로 등록 JDBC/JPA에서 예외가 터지면 Spring에서 사용할 수 있는 예외로 바꿔줌 하부 기술을 바꿔도 예외 처리 메커니즘이 동일하게 유지됨. @Transaction(r..
1. 도메인 클래스 컨버터 HTTP 파라미터로 넘어온 엔티티의 아이디로 엔티티 객체를 찾아서 바인딩해줌 쉽게말해 @Pathvariable로 id를 받으면 스프링이 id를 가지고 엔티티를 바인딩함. findMember : id를 파라미터로 받아 직접 member를 찾아옴. fimdMember2 : id를 파라미터로 받으면 스프링이 member와 바인딩함. @GetMapping("/members/{id}") public String findMember(@PathVariable("id") Long id){ Member member = memberRepository.findById(id).get(); return member.getUserName(); } @GetMapping("/members2/{id}") p..
1. Auditing 엔티티를 생성 및 변경할 때 변경한 사람과 시간을 추적하고 싶으면? 등록일 수정일 등록자 수정자 2. JPA 활용 JpaBaseEntity @MappedSuperclass Designates a class whose mapping information is applied to the entities that inherit from it. A mapped superclass has no separate table defined for it. 해당 annotation은 상속받는 엔티티에 매핑 정보를 전달할 클래스를 지정. 즉, 해당 annotation이 붙은 클래스의 속성 정보만 하위 클래스에 전달하여 하위클래스에서 사용할 수 있음. 해당 annotation이 붙은 클래스는 별도 tab..
1. 사용자 정의 Repository 스프링 데이터 JPA 리포지토리는 인터페이스만 정의하고 구현체는 스프링이 자동 생성함. 해당 인터페이스를 직접 구현하면 구현해야 하는 기능이 너무 많음... 인터페이스의 메서드를 직접 구현하고 싶다면? JPA 직접 사용( EntityManager ) 스프링 JDBC Template 사용 MyBatis 사용 데이터베이스 커넥션 직접 사용 등등... Querydsl 사용 등등 2, custom Repository 생성하기 사용자 정의 구현 클래스 규칙: 리포지토리 인터페이스 이름 + Impl --> 필수!! 이름이 맞아야 스프링 데이터 JPA가 인식해서 ~~Impl을 스프링 빈으로 등록이 가능. 그래야 memberRepository 에서 MemberRepositoryCu..
1. JPA Hint??? JPA 쿼리 힌트(SQL 힌트가 아니라 JPA 구현체인 hibernate에 제공하는 힌트) 2. 쿼리 힌트 사용 org.springframework.data.jpa.repository.QueryHints 어노테이션을 사용 "org.hiberante.readOnly"가 적용되면 해당 메서드에 대해 스냅샷 만들지 않고, 따라서 변경감지도 하지 않음. //org.hibernate.readOnly를 hiberante가 열어놨다! //readOnly가 적용되면 영속성 컨텍스트에 스냅샷 안만들어 놓음. @QueryHints(value= @QueryHint(name = "org.hibernate.readOnly", value = "true")) Member findReadOnlyByUser..