IT공부/JPA (8) 썸네일형 리스트형 JPA 8강 - Spring Data JPA와 QueryDSL 이해 JPA 8강 - Spring Data JPA와 QueryDSL 이해 JPA 기반 프로젝트 Spring Data JPA QueryDSL JPA와 스프링과 어떻게 얼개가 맞춰지는지를 알아보자. 보통 인터넷에 떠도는 예제를 통해 JPA를 배우면 영속성 컨텍스트, 매핑이론들에 대해서 못 배운다. 그런데 소스는 짧다. 그러면 드는 생각이 Spring JPA를 쓰면 다되나보다 생각을 한다. 그러고 현업에 들어가면 망한다. 매핑이 안된다던지, null값이 들어온다던지 하는 문제가 생길 것이다. Spring Data JPA 반복되는 CRUD public class MemberRepository { public void save (Member member) { ... } public Member findOne(Long .. JPA 7강 - JPA 객체지향쿼리 JPA 7강 - JPA 객체지향쿼리 JPA는 다양한 쿼리 방법을 지원 JPQL JPA Criteria QueryDSL 네이티브 SQL JDBC API 직접 사용, MyBatis, StringJdbcTemplate 함께 사용 지금까지는 조회시 식별자를 이용해 하나만 조회했다. 예를 들어 15살 이상인 회원을 조회해야 한다면 식별자(ID)로 어떻게 하나하나 조회를 할 수 있을까? 결국 쿼리라는 개념이 필요하다. 그래서 JPA에서 쿼리를 지원하는게 JPQL이다. JPQL 소개 가장 단순한 조회 방법 EntityManager.find() 객체 그래프 탐색(a.getB().getC()) 나이가 18살 이상인 회원을 모두 검색하고 싶다면? SQL과 똑같다. 단, 객체를 대상으로 조회한다는 차이점이 있다. JPQL .. JPA 6강 - JPA 내부구조 JPA 6강 - JPA 내부구조 - 영속성 컨텍스트 - 프록시와 즉시로딩, 지연로딩 JPA에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑하기(Object Relation Mapping) 영속성 컨텍스트 영속성 컨텍스트를 알고 있으면 트러블슈팅을 제대로 할 수 있다. 엔티티 매니저 팩토리와 엔티티 매니저 JPA는 EntityManagerFactory에서 유저의 요청이 올 때마다 EntityManager를 별도로 생성한다. EntityManager는 내부적으로 데이터베이스 커넥션 풀에서 커넥션을 가져와 DB에 액세스 작업을 한다. 영속성 컨텍스트 JPA를 이해하는데 가장 중요한 용어 "엔티티를 영구 저장하는 환경"이라는 뜻 EntityManager.pesist(entity); 엔티티 매니저? 영속성.. JPA 5강 - 양방향 매핑 JPA 5강 - 양방향 매핑 연관관계의 주인과 mappedBy mappedBy = JPA의 멘붕 클래스1 mappedBy는 처음에는 이해하기 어렵다. 객체와 테이블간에 연관관계를 맺는 차이를 이해해야 한다. 객체와 테이블 간에 연관관계를 맺는 차이를 이해하면 mappedBy를 이해할 수 있다. 현재 1. Member 클래스와 2. Team 클래스로 방향관계가 2가지가 있다. 객체와 테이블이 관계를 맺는 차이 객체 연관관계 회원 -> 팀 연관관계 1개(단방향) 팀 -> 회원 연관관계 1개(단방향) 테이블 연관관계 회원 팀의 연관관계 1개 (양방향) 객체의 양방향 관계 객체의 양방향 관계는 사실 양방향 관계가 아니라 서로 다른 단방향 관계 2개다. 객체를 양방향으로 참조하려면 단방향 연관관계를 2개 만들어야.. JPA 4강 - 연관관계 매핑 JPA 4강 - 연관관계 매핑 '객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다.' - 조영호(객체지향의 사실과 오해) 객체를 테이블에 맞추어 설계(연관관계가 없는 객체) 객체에서는 값만 그대로 세팅해놨기 때문에 Team과의 연관관계가 없다. 객체를 테이블에 맞추어 모델링(참조(Team객체참조) 대신에 외래 키를 그대로 사용) @Entity public class Member { @Id @GeneratedValue private Long id; @Column(name = "USERNAME") private String name; private int age; @Column(name = "TEAM_ID") private Long teamId; ... } @Entity public cl.. JPA 3강 - 필드와 컬럼 매핑 JPA 3강 - 필드와 컬럼 매핑 데이터베이스 스키마 자동 생성하기 DDL(Data Definition Language: CREATE, ALTER, DROP, RENAME 등등)을 애플리케이션 실행 시점에 자동 생성 테이블 중심 -> 객체중심 데이터베이스 방언을 활용해서 데이터베이스에 맞는 적절한 DDL 생성 이렇게 생성된 DDL은 개발 장비에서만 사용 생성된 DDL은 운영서버에서는 사용하지 않거나, 적절히 다듬은 후 사용 hibernate.hbm2ddl.auto(persistence.xml 옵션) create : 기존 테이블 삭제 후 다시 생성(DROP + CREATE) create-drop : create와 같으나 종료시점에 테이블 DROP(테스트 코드에서 사용하기 좋다.) 즉 DROP + CREAT.. JPA 2강 - JPA기초와 매핑 JPA 2강 - JPA기초와 매핑 JPA에서 중요한 게 2가지가 있다. 1. 객체와 RDB를 중간에서 매핑하는 과정(설계) 2. JPA 동작 원리(영속성 컨텍스트) Hello JPA H2 데이터베이스 http://www.h2database.com/ 최고의 실습용 DB (테스트용으로 쓰기 좋다.) 가볍다. (1.5M) 웹용 쿼리툴 제공 MySQL, Oracle 데이터베이스 시뮬레이션 기능 시퀀스, AUTO INCREMENT 기능 지원 메이븐 설정 https://maven.apache.org/ 자바 라이브러리, 빌드 관리 라이브러리 자동 다운로드 및 의존성 관리 객체 매핑하기 @Entity : JPA가 관리할 객체(엔티티라고 한다.) @Entity public class Member { @Id private.. JPA 1강 JPA 1강 JPA 실습준비 STS IDE 설치(https://spring.io/tools) File > New -> Spring Starter Project Type : Maven 선택 후 Next H2, JPA 선택 후 Finish ( 라이브러리를 미리 받아두는 것이다. 라이브러리받는데 시간이 오래 걸리므로) H2 데이터베이스 설치(http://www.h2database.com) h2폴더/bin/h2.sh (윈도우 h2.bat) 실행 아래 H2 데이터베이스 설치 과정 참고 STS IDE 설치(https://spring.io/tools) 과정 H2 데이터베이스 설치(http://www.h2database.com) 과정 아래 경로에서 shift 버튼을 누른 상태에서 마우스 우클릭을 한 뒤 "여기에 Pow.. 이전 1 다음