Java-Spring/자바 ORM 표준 JPA 프로그래밍

자바 / 스프링 / 스프링부트 스터디 정리
Java-Spring/자바 ORM 표준 JPA 프로그래밍

[자바 ORM 표준 JPA 프로그래밍] 스프링 데이터 JPA ①

데이터 접근 계층 개발의 문제 대부분의 데이터 접근 계층(DAO)은 CRUD라고 부르는 유사한 등록, 수정, 삭제 조회 코드를 반복해서 개발해야 하는데 JPA를 사용해서 데이터 접근 계층을 개발할 때도 이 같은 문제가 발생 이러한 반복 문제를 해결하려면 제네릭과 상속을 적절히 사용해서 공통 부분을 처리하는 부모 클래스인 GenericDAO를 만듦 하지만 이 방법은 공통 기능을 구현한 부모 클래스에 너무 종속되고 구현 클래스 상속이 가지는 단점이 노출됨 // JPA의 반복적인 CRUD public class MemberRepository { @PersistenceContext EntityManager em; public void save(Member member) {...} public Member fin..

Java-Spring/자바 ORM 표준 JPA 프로그래밍

[자바 ORM 표준 JPA 프로그래밍] 웹 애플리케이션 제작 ③ - 애플리케이션 구현

메인화면과 구현 기능 회원 기능 회원 등록 회원 조회 상품 기능 상품 등록 상품 수정 상품 조회 주문 기능 상품 주문 주문 내역 조회 주문 취소 구현하지 않을 기능 로그인과 권한 관리는 하지 않는다. 파라미터 검증과 예외 처리는 하지 않는다. 상품은 도서만 사용한다. 카테고리는 사용하지 않는다. 배송 정보는 사용하지 않는다. 개발 방법 계층형 구조를 사용하며 개발 순서는 비즈니스 로직을 수행하는 서비스와 리포지토리 계층을 먼저 개발하고 테스트 케이스를 작성해서 검증한 후, 검증을 완료하면 컨트롤러와 뷰를 개발하는 순서로 진행 Controller MVC의 컨트롤러가 모여 있는 곳으로, 컨트롤러는 서비스 계층을 호출하고 결과를 뷰(JSP)에 전달 Service 서비스 계층에는 비즈니스 로직이 있고 트랜잭션을..

Java-Spring/자바 ORM 표준 JPA 프로그래밍

[자바 ORM 표준 JPA 프로그래밍] 웹 애플리케이션 제작 ② - 도메인 모델과 테이블 설계

요구사항 분석 회원 기능 회원 등록 회원 조회 상품 기능 상품 등록 상품 수정 상품 조회 주문 기능 상품 주문 주문 내역 조회 주문 취소 기타 요구사항 상품의 종류는 도서, 음반, 영화가 있다. 상품을 카테고리로 구분할 수 있다. 상품 주문 시 배송 정보를 입력할 수 있다. 도메인 모델 설계 요구사항을 분석해서 설계한 도메인 모델 회원, 주문, 상품의 관계 회원은 여러 상품을 주문할 수 있음 한 번 주문할 때 여러 상품을 선택할 수 있으므로 주문과 상품은 다대다 관계 다대다 관계는 관계형 데이터베이스는 물론이고 엔티티에서도 거의 사용하지 않으므로 주문상품이라는 엔티티를 추가해서 다대다 관계를 일대다, 다대일 관계로 풀어냄 상품 분류 상품은 도서, 음반, 영화로 구분되는데 상품이라는 공통 속성을 사용하므로..

Java-Spring/자바 ORM 표준 JPA 프로그래밍

[자바 ORM 표준 JPA 프로그래밍] 웹 애플리케이션 제작 ① - 프로젝트 환경설정

진행 순서 웹 애플리케이션 만들기 진행 순서 1. 프로젝트 환경 설정 : 스프링 프레임워크와 JPA를 사용해서 웹 애플리케이션을 개발할 수 있도록 개발 환경 설정 2. 도메인 모델과 테이블 설계 : 요구사항을 분석해서 도메인 모델과 테이블을 설계 3. 애플리케이션 기능 구현 : 실제 애플리케이션 기능 구현 사용하는 기술 1. 뷰 : JSP, JSTL 2. 웹 계층 : 스프링 MVC 3. 데이터 저장 계층 : JPA, 하이버네이트 4. 기반 프레임워크 : 스프링 프레임워크 5. 빌드 : 메이븐 프로젝트 환경설정 프로젝트 환경설정 진행 순서 1. 프로젝트 구조 분석 : 프로젝트 폴더 구조를 분석 2. 메이븐과 라이브러리 설정 : 메이븐에 사용할 라이브러리 지정 3. 스프링 프레임워크 설정 : 스프링 프레임워..

Java-Spring/자바 ORM 표준 JPA 프로그래밍

[자바 ORM 표준 JPA 프로그래밍] 객체지향 쿼리 언어 ⑥ - 심화

객체지향 쿼리 심화 한 번에 여러 데이터를 수정할 수 있는 벌크 연산 JPQL과 영속성 컨텍스트 JPQL과 플러시 모드 벌크 연산 엔티티를 수정하려면 영속성 컨텍스트의 변경 감지 기능이나 병합을 사용하고, 삭제는 EntityManager.remove() 메소드 사용 하지만 이 방법으로는 수백 개 이상의 엔티티를 하나씩 처리하기에는 시간이 너무 오래 걸리므로 여러 건을 한 번에 수정하거나 삭제하는 벌크 연산을 사용 // UPDATE 벌크 연산 // 재고가 10개 미만인 모든 상품의 가격을 10% 상승시키기 String qlString = "update Product p " + "set p.price = p.price * 1.1 " + "where p.stockAmount < :stockAmount"; in..

Java-Spring/자바 ORM 표준 JPA 프로그래밍

[자바 ORM 표준 JPA 프로그래밍] 객체지향 쿼리 언어 ⑤ - 네이티브 SQL

네이티브 SQL JPQL은 표준 SQL이 지원하는 대부분의 문법과 SQL 함수들을 지원하지만 특정 데이터베이스에 종속적인 기능은 지원하지 않음 예) 특정 데이터베이스만 지원하는 함수, 문법, SQL 쿼리 힌트, 인라인 뷰, UNION, INTERSECT, 스토어드 프로시저 때로는 특정 데이터베이스에 종속적인 기능이 필요하며 JPA는 다양한 방법을 제공 특정 데이터베이스에만 사용하는 함수 이를 위해 JPQL에서 네이티브 SQL 함수를 호출, 하이버네이트는 정의된 종속적인 함수를 호출하거나 직접 정의 특정 데이터베이스만 지원하는 SQL 쿼리 힌트 하이버네이트를 포함한 몇몇 JPA 구현체들이 지원 인라인 뷰 (From 절에서 사용하는 서브 쿼리), UNION, INTERSECT 일부 JPA 구현체들이 지원 스..

Java-Spring/자바 ORM 표준 JPA 프로그래밍

[자바 ORM 표준 JPA 프로그래밍] 객체지향 쿼리 언어 ④ - QueryDSL

QueryDSL QueryDSL은 Criteria처럼 JPQL 빌더 역할을 하는데 복잡하고 어려운 JPA Criteria를 대체할 수 있음 QueryDSL은 오픈소스 프로젝트로 처음에는 HQL(하이버네이트 쿼리언언)을 코드로 작성할 수 있는 프로젝트로 시작해서 지금은 다양하게 지원 이름 그대로 쿼리 즉 데이터를 조회하는데 기능이 특화 QueryDSL 설정 필요 라이브러리 // pom.xml 추가 // 3.6.3 버전 com.mysema.querdsl querydsl-jpa // QueryDSL JPA 라이브러리 3.6.3 com.mysema.querdsl querydsl-apt // 쿼리 타입(Q)을 생성할 때 필요한 라이브러리 3.6.3 provided 환경 설정 QueryDSL을 사용하려면 Crite..

Java-Spring/자바 ORM 표준 JPA 프로그래밍

[자바 ORM 표준 JPA 프로그래밍] 객체지향 쿼리 언어 ③ - Criteria

Criteria JPQL을 자바 코드로 작성하도록 도와주는 빌더 클래스 API 문자가 아닌 코드로 JPQL을 작성하므로 문법 오류를 컴파일 단계에서 잡을 수 있고 문자 기반의 JPQL보다 동적 쿼리를 안전하게 생성할 수 있는 장점 반면 코드가 복잡하고 장황해서 직관적으로 이해가 힘듦 Criteria 기초 Criteria API는 javax.persistence.crieria 패키지에 존재 가장 단순한 Criteria 쿼리 // Criteria 쿼리 시작 // 모든 회원 엔티티를 조회하는 단순한 JPQL // JPQL : select m from Member m /* 1. Criteria 쿼리 빌더 Criteria 쿼리를 생성하려면 먼저 Criteria 빌더를 얻어야 함. Criteria 빌더는 Entit..