일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- spring
- 그리디
- JDBC
- 스프링
- SpringBoot
- 스프링 핵심 기능
- kotlin
- 인프런
- 자바
- Greedy
- 알고리즘
- Proxy
- transaction
- db
- http
- 백준
- Servlet
- AOP
- QueryDSL
- Spring Boot
- 스프링 핵심 원리
- springdatajpa
- 김영한
- Android
- java
- Exception
- jpa
- pointcut
- JPQL
- Thymeleaf
- Today
- Total
목록인프런 (528)
개발자되기 프로젝트
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..
예를들어 모든 인원의 나이를 하나 씩 올리거나, 연봉을 올리거나 할 때, 엔티티를 하나하나 불러와서 업데이트 하는 것 보다. 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가 바인딩됨. 즉 ..