일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Thymeleaf
- Spring Boot
- Greedy
- SpringBoot
- Exception
- Android
- JDBC
- db
- 스프링 핵심 원리
- pointcut
- 알고리즘
- 자바
- AOP
- http
- 스프링
- java
- Servlet
- 백준
- Proxy
- QueryDSL
- kotlin
- jpa
- spring
- 스프링 핵심 기능
- 김영한
- JPQL
- 그리디
- 인프런
- transaction
- springdatajpa
- Today
- Total
목록jpa (149)
개발자되기 프로젝트
1. Devtools html 수정을 자주할 텐데 매번 서버 다시 띄우기 너무 귀찮음. debTools 사용하면 html 수정 후 recompile만 하면 바로 반영됨. build.gradle implementation 'org.springframework.boot:spring-boot-devtools' 2. H2 Database DB 파일 생성 jdbc:h2:~/blog 최초 접근 user 폴더 경로에 blog.mv.db파일 생성 확인 네트워크 모드로 접근 jdbc:h2:tcp://localhost/~/blog 해당 url로 접근하여 사용하면됨. dependancy implementation 'org.springframework.boot:spring-boot-starter-jdbc' 3. applica..
엔티티 대신에 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. 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..
1. @EntityGraph? 연관된 엔티티들을 SQL 한번에 조회하는방법 2. 사례 member -> team은 다대일 지연로딩 관계. 따라서 team에 대한 데이터 접근(team.get~) 시 쿼리가 날라감. 따라서 member에 대한 쿼리 외에 team의 데이터 조회하는 쿼리 나감. 즉 N+1 이슈 발생함. 3. member만 조회 @Test public void findMemberLazy(){ //given //member1 -> TeamA //member2 -> TeamB Team teamA = new Team("teamA"); Team teamB = new Team("teamB"); teamRepository.save(teamA); teamRepository.save(teamB); Member..