| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 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 |
- java map 출력
- 인터프린터언어
- java참조자료형
- 격파르타후기
- java기본자료형
- 노베이스부트캠프
- java list 저장
- java알고리즘
- java알고리즘문제풀이
- 프로그래머스
- javaJRE
- java 자료구조 활용
- 컴파일
- 항해15기
- sqld자격증합격
- java최솟값구하기
- 코딩부트캠프후기
- java set 출력
- javaJVM
- 비전공자sqld
- 격파르타장점
- java map
- 작은수제거하기
- java list 출력
- java map 저장
- 격파르타비전공자
- java set 저장
- 격파르타합격후기
- 프로그래머스제일작은수
- 항해99후기
- Today
- Total
목록2세/JPA (19)
코딩과 결혼합니다
JOIN 데이터베이스에서 여러 테이블을 연결하여 관련된 데이터를 함께 가져오는데 사용된다. JOIN 절은 크게 INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN 으로 나눌 수 있다. INNER JOIN String jpql = "SELECT e FROM Employee e INNER JOIN e.department d WHERE d.name = 'IT'"; TypedQuery query = entityManager.createQuery(jpql, Employee.class); List resultList = query.getResultList(); "Employee" 엔티티와 "Department" 엔티티를 이너조인하여 부서 이름이 'IT'인 직원들을 가져오기 이너 조인은 ..
벌크성 수정 쿼리 데이터베이스의 특정 작업을 한 번에 대량으로 처리하는 쿼리. [순수 JPA] 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(); } 조건에 만족하는 데이터에 +1을 하는 쿼리. executeUpdate()로 데이터들을 업데이트한다. [Spring Data Jpa] @Modifying @Query("update Member m set m.age = m.age + 1 where m.age >= :age") int bulkAgePlus(@Param(..
파라미터 바인딩 @Query("select m from Member m where m.username in :names") List findByNames(@Param("names") List names); 쿼리 메서드는 복잡할수록 굉장히 길어진다. 그래서 위와 같이 파라미터 바인딩을 사용할 수 있는데, 위치 기반, 이름 기반 등의 방법이 있다. select m from Member m where m.username = ?0 //위치 기반 select m from Member m where m.username = :name //이름 기반 위치 기반의 경우에는 유지보수에 취약할 수 있기 때문에 이름 기반을 사용하도록 한다. 반환타입 List findListByUsername(String username); ..
순수 JPA를 사용했을 때에는 개발자가 직접 쿼리를 짜서 조건에 맞는 데이터를 가져와야 했다. 매번 간단한 쿼리도 모두 짜야해서 굉장히 번거롭다. public List findByUsernameAndAgeGreaterThan(String username, int age) { return em.createQuery("select m from Member m where m.username = :username and m.age > :age") .setParameter("username", username) .setParameter("age", age) .getResultList(); 반면 스프링 데이터 JPA는 메서드 이름을 분석하여 JPQL을 생성하고 실행한다. public interface MemberR..
순수한 JPA 기반 Repository를 구현했을 때와 Spring Data Jpa 기반으로 구현했을 때를 비교해 본다. 순수 JPA @Repository public class MemberJpaRepository { @PersistenceContext private EntityManager em; public Member save(Member member) { em.persist(member); return member; } public void delete(Member member) { em.remove(member); } public List findAll() { return em.createQuery("select m from Member m", Member.class) .getResultList..
이전에는 xToOne일 때의 조회 최적화를 해보았는데 이번에는 xToMany일 때 (컬렉션 조회) 최적화를 하는 방법에 대해서 정리하고자 한다. DB 입장에서 1대 N 조인을 하면 조회하는 순간 데이터 결과가 N개만큼 커지게 된다. xToOne일 때에는 이 부분을 고려하지 않아도 되지만, 이러한 경우에는 최적화할 때 좀 더 고민해야 할 포인트가 많아진다. @GetMapping("/api/v1/orders") public List ordersV1() { List all = orderRepository.findAllByString(new OrderSearch()); for (Order order : all) { order.getMember().getName(); order.getDelivery().getAd..
https://coding-s2-chaewon.tistory.com/253 [JPA] 지연 로딩과 조회 성능 최적화(2) https://coding-s2-chaewon.tistory.com/252 [JPA] 지연 로딩과 조회 성능 최적화(1) 등록이나 수정 등은 데이터 한 건을 다루는 것이기 때문에 거의 성능 문제가 발생하지 않는다. 주로 조회하는 데에 문제가 coding-s2-chaewon.tistory.com @GetMapping("/api/v4/simple-orders") public List ordersV4() { return orderSimpleQueryRepository.findOrderDtos(); } JPA에서 DTO로 바로 조회하는 방법이다. 이전의 fetch join을 사용한 것 처럼 ..
영속성 전이 특정 엔티티를 와 함께 연관된 엔티티도 영속 상태로 만들고 싶을 때 사용한다. @OneToMany(mappedBy = "order", cascade = ALL) private List orderItems = new ArrayList(); 영속성 전이는 연관관계를 매핑하는 것과 아무 관련이 없다. CASCADE 종류 ALL : 모두 적용 PERSIST : 영속 - 삭제하면 안 될 때, 저장할 때만 써야 할 때 REMOVE : 삭제 그 외... 주의할 점 하나의 부모 테이블이 자식 테이블을 관리할 때에만 쓴다. (자식 테이블을 여러 곳에서 관리를 할 때에는 쓰지 않는다.) 부모 테이블과 자식 테이블의 라이프 사이클이 유사할 때 사용한다. 고아 객체 부모 엔티티와 연관관계가 끊어진 자식 엔티티를 ..