일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- http
- Android
- Servlet
- 김영한
- Spring Boot
- jpa
- 백준
- pointcut
- 인프런
- SpringBoot
- Greedy
- spring
- 스프링 핵심 기능
- QueryDSL
- Proxy
- kotlin
- java
- JPQL
- JDBC
- 알고리즘
- transaction
- AOP
- db
- 스프링
- 그리디
- 자바
- 스프링 핵심 원리
- springdatajpa
- Thymeleaf
- Exception
- Today
- Total
목록인프런/[인프런] Spring Data JPA (22)
개발자되기 프로젝트
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..
예를들어 모든 인원의 나이를 하나 씩 올리거나, 연봉을 올리거나 할 때, 엔티티를 하나하나 불러와서 업데이트 하는 것 보다. DB에서 bulk로 변경하는 편이 적합하다. 1. JPA로 bulk 연산 executeUpdate()를 실행하면 업데이트, 삭데된 엔티티의 수를 반환. public int bulkAgePlus(int age){ return em.createQuery("update Member m set m.age = m.age + 1 where m.age >= :age") .setParameter("age", age) .executeUpdate(); //Returns: the number of entities updated or deleted } public int bulkAgePlus(int a..
1. SpringDataJpa 스프링에서 페이징 기능을 표준화 시켰다 ㄷㄷㄷ 2. 페이징, 정렬 파라미터 org.springframework.data.domain.Sort : 정렬 기능 org.springframework.data.domain.Pageable : 페이징 기능 (내부에 Sort 포함) data.jpa가 아니다 즉, DB에 관계없이 적용이 가능한다. 3. 특별한 반환 타입 org.springframework.data.domain.Page : 추가 count 쿼리 결과를 포함하는 페이징 TotalCount 가져오는 쿼리는 자동으로 날라감. org.springframework.data.domain.Slice : 추가 count 쿼리 없이 다음 페이지만 확인 가능 (내부적으로 limit + 1조회..
1. JPA 의 페이징 JPA에서 페이징 하는 방법 조건 검색 조건 : 나이 10살 정렬 조건 : 이름으로 내림차순 페이징 조건 : 첫 번째 페이지, 페이지 당 보여 줄 데이터는 3건 2. 예제 setFirstResult() : 몇 번 째 부터? setMaxResult() : 몇 개? public List findbyPage(int age, int offset, int limit){ return em.createQuery("select m from Member m where m.age = :age order by m.userName desc") .setParameter("age", age) .setFirstResult(offset) //몇 번째부터? .setMaxResults(limit) // 몇 개? ..
1. JPA 반환 타입 @Test public void returnType(){ Member member1 = new Member("aaa", 10); Member member2 = new Member("bbb", 20); memberRepository.save(member1); memberRepository.save(member2); List members = memberRepository.findListByUserName("aaa"); Optional optionalMember = memberRepository.findOptionalByUserName("aaa"); Member findMember = memberRepository.findMemberByUserName("aaa"); /** * Coll..
1. 이름기반, 위치기반 파라미터 바인딩 이름기반 안씀 ㅋㅋㅋㅋㅋㅋ 가독성과,, 유지보수를 위해 이름기반을 쓰자. 위치기반은 순서가 바뀌면....어우.. select m from Member m where m.username = ?0 //위치 기반 select m from Member m where m.username = :name //이름 기반 @Pram으로 이름기반 바인딩. @Query("select m from Member m where m.username = :name") Member findMembers(@Param("name") String username); 2. 컬렉션 파라미터 바인딩 Collection 타입으로 in절 지원 Query의 "names"에 List names가 바인딩됨. 즉 ..
1. 등록된 회원들의 이름을 조회 MemberRepository @Query("select m.userName from Member m") List findUserNameList(); Test @Test public void findUserNameList(){ Member member1 = new Member("aaa", 10); Member member2 = new Member("bbb", 20); memberRepository.save(member1); memberRepository.save(member2); List userNameList = memberRepository.findUserNameList(); for (String userName : userNameList) { System.out.p..
1. @Query SpringDataJPA를 활용하여 repository의 method에 바로 쿼리를 정의하자. 실무에서 많이 쓰임 기존 SpringDataJPA에서 제공하는 기능은 조건이 너무 길어지면 method이름이 길어졌다. @Query를 사용하면 method이름은 간략히, 쿼리는 여러 조건을 추가할 수 있다. public interface MemberRepository extends JpaRepository { public List findMemberByUserNameAndAgeGreaterThan(String userName, int age); @Query(name = "Member.findByUserName") List findByUserName(@Param("userName") String..