🌱 Spring

OSIV란? Open Session In View 영속성 컨텍스트를 뷰까지 열어두는 기능이다. 클라이언트 요청이 들어올 때 영속성 컨텍스트를 생성해서 요청이 끝날 때까지 같은 영속성 컨텍스를 유지한다. 하여 한 번 조회된 엔티티는 요청이 끝날 때까지 영속 상태를 유지한다. 뷰까지 영속성 컨텍스트가 살아있음에 따라 컨트롤러나 뷰에서도 지연 로딩을 사용할 수 있게 된다. Spring Boot JPA 의존성을 주입 받아 애플리케이션을 구성할 경우 기본적으로 OSIV가 적용된다. (default: true) OSIV ON spring.jpa.open-in-view: true 트랜잭션 시작 시점에 영속성 컨텍스트가 데이터베이스 커넥션을 가져오며, 트랜잭션 종료 시점이 아닌 API 응답이 끝날 때까지 영속성 컨텍스..
본 포스팅은 인프런 - 자바 ORM 표준 JPA 프로그래밍 (기본편) 을 강의를 바탕으로 공부하고 정리한 글입니다. 서브 쿼리 JPQL도 SQL처럼 서브 쿼리를 지원한다. 서브 쿼리는 쿼리 안에서 또 다른 쿼리를 말한다. 다음은 서브 쿼리를 사용한 예시이다. /* 나이가 평균보다 많은 회원을 조회 */ select m from Member m where m.age > (select avg(m2.age) from Memver m2) 예시를 보면 메인 쿼리와 서브 쿼리는 서로 전혀 관계가 없도록 한 것을 알 수 있다. 메인 쿼리에서는 m을 사용하지만, 서브 쿼리에서는 m2로 따로 정의해서 둘이 전혀 연관이 없도록 작성되어 있다. 이렇게 서브 쿼리를 짜야 성능이 잘 나온다. /* 한 건이라도 주문한 고객을 조..
본 포스팅은 인프런 - 자바 ORM 표준 JPA 프로그래밍 (기본편) 을 강의를 바탕으로 공부하고 정리한 글입니다. 조인 // 내부 조인 SELECT m FROM Member m [INNER] JOIN m.team t // 외부 조인 SELECT m FROM Member m LEFT [OUTER] JOIN m.team t // 세타 조인 SELECT count(m) FROM Member m, Team t WHERE m.username=t.name 내부 조인 : 조인 대상(team)이 없으면 데이터(member)를 출력하지 않는다. 외부 조인 : 조인 대상(team)이 없어도 데이터(member)를 출력한다. 세타 조인 : 막 쿼리 내부(이너) 조인 Member member = new Member(); m..
본 포스팅은 인프런 - 자바 ORM 표준 JPA 프로그래밍 (기본편) 을 강의를 바탕으로 공부하고 정리한 글입니다. 페이징 JPA는 다음 두 API를 사용해 페이징 처리를 할 수 있다. setFirstResult(int startPosition) 조회 시작 위치 setMaxResults(int maxResult) 조회 할 데이터의 수 거두절미하고 바로 코드로 알아보자. List result = em.createQuery("select m from Member m order by m.age desc", Member.class) .setFirstResult(1) // 1번째 부터 .setMaxResults(10) // 10개를 가져오겠다 .getResultList(); System.out.println("r..
본 포스팅은 인프런 - 자바 ORM 표준 JPA 프로그래밍 (기본편) 을 강의를 바탕으로 공부하고 정리한 글입니다. JPQL이란? 객체지향 쿼리 언어 테이블을 대상으로 쿼리하는 것이 아닌 엔티티 객체를 대상으로 쿼리한다. JPQL은 SQL을 추상화해서 특정 데이터베이스 SQL에 의존하지 않는다는 장점이 있다. JPQL도 결국 SQL로 변환되어 실행된다. JPQL 기본 문법 select, update, delete select m from Member as m where m.age > 18 SQL 문법과 동일하다. 엔티티, 속성은 대소문자를 구분한다. (Member, age) JPQL 키워드는 대소문자를 구분하지 않는다. (SELECT, FROM, WHERE) 테이블 이름이 아닌 엔티티 이름을 사용한다. ..
본 포스팅은 인프런 - 자바 ORM 표준 JPA 프로그래밍 (기본편) 을 강의를 바탕으로 공부하고 정리한 글입니다. JPA는 매우 다양한 쿼리 방법을 지원한다. JPQL JPA Criteria QueryDsl 네이티브 SQL JDBC API 직접 사용, MyBatis, SpringJdbcTemplate 함께 사용 하나씩 알아보자. JPQL JPA를 사용하면 엔티티 객체를 중심으로 개발해야 한다. 문제는 검색 쿼리인데, 테이블이 아닌 엔티티 객체를 대상으로 검색하기 때문에 모든 DB 데이터를 객체로 변환해 검색하는 것은 불가능하다. 따라서 검색 조건이 포함된 SQL을 통해 필요한 최소한의 데이터만 DB에서 불러와야 한다. JPA는 이러한 문제를 위해 JPQL을 제공한다. SQL을 추상화한 객체 지향 쿼리 ..
본 포스팅은 인프런 - 자바 ORM 표준 JPA 프로그래밍 (기본편) 을 강의를 바탕으로 공부하고 정리한 글입니다. JPA의 데이터 타입 종류 💡 엔티티 타입 @Entity로 정의하는 객체 데이터가 변해도 식별자로 추적 가능 ex) 회원 엔티티의 키나 나이 값을 변경해도 식별자로 인식 가능 💡 값 타입 int, Integer, String처럼 단순히 값으로 사용하는 자바 기본 타입이나 객체 식별자가 없고 값만 있어 변경 시 추적 불가능 ex) 숫자 10을 20으로 변경하면 완전히 다른 값으로 대체 값 타입의 종류 기본값 타입 임베디드 타입 컬렉션 값 타입 값 타입 기본값 타입 ex) String name, int age 생명주기를 엔티티에 의존한다. 회원 삭제 시 이름, 나이 필드도 함께 삭제 값 타입은..
본 포스팅은 인프런 - 자바 ORM 표준 JPA 프로그래밍 (기본편) 을 강의를 바탕으로 공부하고 정리한 글입니다. 영속성 전이 (CASECADE) 특정 엔티티를 영속 상태로 만들 때 그와 연관된 엔티티도 함께 영속 상태로 만드는 기능이다. 예) 부모 엔티티 저장시 자식 엔티티도 함께 저장 영속성 전이는 연관관계를 매핑하는 것과 아무 관련 없다. 부모 엔티티를 영속화(persist)할 때, 자식 엔티티도 함께 영속화하는 편리함을 제공해주는 기능일 뿐이다. 부모 엔티티와 자식 엔티티를 저장하는 간단한 예제를 통해 확인해 보자. 👉🏻 영속성 전이 적용 전 @Entity public class Parent { ... @OneToMany(mappedBy = "parent") private List childLi..
an2z
'🌱 Spring' 카테고리의 글 목록 (2 Page)