본문 바로가기
  • 실행력이 모든걸 결정한다
반응형

분류 전체보기580

[JPA] 네이티브 SQL 1. 네이티브 SQL의 소개와 필요성 - 다양한 이유로 JPQL을 사용할 수 없는 상황에서 특정 DB에 종속적인 SQL을 직접 사용할 수 있도록 하는 기능이다. - JPQL이 아닌 SQL을 이용해도 영속성 컨텍스트에 접근할 수 있는 방법을 제공한다.★ - 특정 DB에 종속적인 기능을 JPA가 해결하는 예로는 다음과 같은 것들이 있다. 특정 DB에서만 사용하는 함수 : 네이티브 SQL 함수를 사용하는 방법, Hibernate가 방언에 정의해둔 함수를 사용하는 방법, 함수를 직접 정의하는 방법이 있다. 특정 DB에서만 지원하는 SQL 쿼리 힌트 : Hibernate를 포함한 몇몇 JPA 구현체들이 지원한다. 특정 DB에서만 지원하는 문법 : 너무 종속적인 SQL 문법은 지원하지 않으므로 네이티브 SQL를 사.. 2022. 8. 11.
[JPA] QueryDSL 1. QueryDSL 소개 - SQL, JPQL을 코드로 작성할 수 있도록 도와주는 오픈소스 빌더 API - 컴파일 시점에 문법 오류를 발견할 수 있음 - IDE의 도움을 받아 코드 자동완성 기능을 이용할 수 있음 - 엔티티를 기반으로 생성한 쿼리 타입이라는 쿼리용 클래스를 사용한다. 2. 환경 설정 - pom.xml에 querydsl-jpa, querydsl-apt 라이브러리를 추가하자. querydsl-apt 라이브러리는 쿼리 타입을 생성할 때 필요하다. com.mysema.querydsl querydsl-jpa 3.6.3 com.mysema.querydsl querydsl-apt 3.6.3 provided - pom.xml에 쿼리 타입 생성용 플러그인도 추가하자. com.mysema.maven ap.. 2022. 8. 10.
[팀 프로젝트] SQL 교육 사이트 - 20220806 작업 사항 1. Programmers SELECT 문제 풀이 1) 수행 내용 - SELECT 문제 7문제 풀고 인증샷을 남기면 됩니다. https://school.programmers.co.kr/learn/challenges?tab=sql_practice_kit 프로그래머스 코드 중심의 개발자 채용. 스택 기반의 포지션 매칭. 프로그래머스의 개발자 맞춤형 프로필을 등록하고, 나와 기술 궁합이 잘 맞는 기업들을 매칭 받으세요. programmers.co.kr - SQL 문제가 총 35문제인데 1주 7문제씩 9월 3일까지 모두 푸는걸로 할 예정입니다. 2) 수행 기간 - 8월 7일 일요일까지 3) 참고 사항 - 헷갈리는 내용은 아래에서 공부해서 풀면 좋을 것 같습니다. http://www.tcpschool.com/my.. 2022. 8. 6.
[JPA] JPQL의 작성 1. JPQL 소개 - JPQL(Java Persistence Query Language)은 객체지향 SQL이다. - SQL이 DB 테이블을 대상으로 하는 데이터 중심의 쿼리라면, JPQL은 엔티티 객체를 대상으로 하는 객체지향 쿼리다. JPA는 JPQL을 분석해서 적절한 SQL을 만들어서 DB를 조회하고, 그 결과로 엔티티 객체를 반환한다. - JPQL은 SQL을 추상화해서 특정 DB에 의존하지 않는다. 심지어, SQL 함수도 표준화되어 있다. - JPQL은 엔티티 직접 조회, 묵시적 조인, 다형성을 지원하기 때문에 SQL보다 간결하다. - JPA가 JPQL을 분석해서 SQL을 생성할 때는 즉시 로딩과 지연 로딩을 구분하지 않고 JPQL 자체에만 충실하다. - Criteria, QueryDSL은 JPQ.. 2022. 8. 4.
[JPA] 값 타입 컬렉션 엔티티가 아닌 값 타입에 대한 컬렉션을 데이터베이스에 저장하는 방법을 알아볼 것이다. 1. 값 타입 컬렉션 매핑 - 값 타입 컬렉션 필드에 @ElementCollection, @CollectionTable 어노테이션을 추가해서 사용하면 된다. - DB 테이블은 컬럼 값으로 컬렉션을 가질 수 없기 때문에 별도의 테이블을 만들어야 한다. 예시 - Member.class의 일부 필드다. @ElementCollection @CollectionTable(name="FAVORITE_ANIMALS", joinColumns=@Joincolumn(name="MEMBER_ID")) @Column(name="ANIMAL_NAME") // 동물 정보 필드의 이름을 결정 private Set favoriteAnimals = n.. 2022. 8. 3.
[JPA] 복합 값 타입과 불변 객체 1. 복합 값(임베디드) 타입 아래 포스팅의 [3-3)@EmbeddedId 방식]과 사용 방법이 비슷하다. 아래 포스팅에서는 복합 키(@EmbeddedId)를 다룬 것이고, 이번 포스팅에서는 키가 아닌 복합 값(@Embedded)을 다룰 것이다. https://kimcoder.tistory.com/486 [JPA] 고급 매핑 기술 1. 객체의 상속 관계 매핑 - 객체의 상속 구조와 DB의 슈퍼타입-서브타입 관계를 매핑하는 것이다. 1) 조인 전략 (1) 특징 - 엔티티들을 모두 테이블로 만들고 자식 테이블이 부모 테이블의 기본 키 kimcoder.tistory.com 임베디드 타입은 엔티티와 달리 식별자라는 개념이 없다.★ 예를 들어, Member 엔티티에 다음과 같은 정보들이 들어있다고 하자. Memb.. 2022. 8. 3.
[JPA] CASCADE 기능 JPA에서 엔티티를 저장할 때 모든 연관 엔티티는 영속 상태로 지정되어 있어야 한다. JPA에서는 이런 번거로움을 위해 부모만 영속 상태로 만들면 연관 엔티티까지 한 번에 영속 상태로 만드는 CASCADE 기능을 제공한다. 1. 영속성 전이 1) 영속성 전이란? - 부모의 영속 상태를 연관(자식) 엔티티까지 한 번에 적용하는 기능 2) 설정법 - 다음과 같이 엔티티에서 매핑 어노테이션의 cascade 속성을 이용하면 된다. @OneToMany(..., cascade=CascadeType.PERSIST) // cascade={...}와 같이 중괄호를 활용하여 여러 속성을 같이 사용할 수도 있다. private List children = new ArrayList(); - CASCADE의 종류는 다음과 같다.. 2022. 8. 3.
[팀 프로젝트] SQL 교육 사이트 - 20220801 강의 정리 1. 발생 이슈 - H2 DB가 동일 서버에서 이미 돌아가고 있으면 H2 내장 DB를 사용하는 스프링 애플리케이션을 실행할 수 없다. - Intellij가 인식하는 파일 확장자 변경 : https://handr95.tistory.com/2 포스팅 참고할 것 2. 오늘 알려준 내용 정리 1) AOP - Aspect Oriented Programming의 약자 - 공통 기능을 모듈화하는 기술 - Pointcut : AOP를 적용할 메소드를 선정하는 역할 - Advisor : 공통 기능 로직 - Advisor 메소드에 @Around, @After, @Before 등의 어노테이션을 적용해서 타겟 메소드를 기준으로한 공통 기능의 실행 시점을 결정할 수 있음. @Around는 타켓 메소드를 직접 가져와서 공통 기능.. 2022. 8. 2.
[JPA] 즉시 로딩과 지연 로딩 1. 즉시 로딩 1) 즉시 로딩 기법이란? - JOIN으로 한 번에 연관된 객체까지 미리 조회하는 방법 - @ManyToOne(fetch=FetchType.EAGER) 으로 설정한다. 2) JOIN 방식 - 즉시 로딩에서는 기본적으로 LEFT OUTER JOIN을 이용하여 조인한다. 그 이유는 외래 키가 NULL일 위험성 때문인데, 외래 키가 NULL이면 현재 엔티티도 조회되지 않는다. - 엔티티의 외래 키에 다음과 같이 NOT NULL을 설정하면 JPA는 외부 조인 대신에 내부 조인을 사용한다. @ManyToOne(fetch=FetchType.EAGER) @JoinColumn(... , nullable=false) private Team team; 또는 optional 옵션으로 지정할 수도 있다. @M.. 2022. 8. 1.