일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- SpringBoot
- Proxy
- Greedy
- spring
- 백준
- 인프런
- QueryDSL
- AOP
- 스프링 핵심 기능
- Android
- 그리디
- jpa
- kotlin
- Exception
- http
- Servlet
- Spring Boot
- java
- springdatajpa
- JPQL
- pointcut
- 김영한
- 스프링
- 알고리즘
- 자바
- Thymeleaf
- transaction
- JDBC
- 스프링 핵심 원리
- db
- Today
- Total
목록springdatajpa (16)
개발자되기 프로젝트
엔티티 대신에 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. @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. 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) // 몇 개? ..