목록JPA (8)
JAN's History

지루하게 반복, 중복되는 CRUD 문제를 세련된 방법으로 해결 개발자는 인터페이스만 작성 스프링 데이터 JPA가 구현 객체를 동적으로 생성해서 주입 적용 전 public class MemberRepository { public void save(Member member) {...} public Member findById(Long id) {...} public List findAll() {...} public Member findByUsername() {...} } 적용 후 public interface MemberRepsoitory extends JpaRepository { List findByUsername(String username) } 적용 후 다이어그램 구현 클래스 생성 공통 인터페이스 기능 ..

JPQL소개 (JPA + SQL) 가장 단순한 조회 방법 EntityManager.find() 객체 그래프 탐색을 할 수 있어 엔티티 객체를 중심으로 개발 가능 문제는 검색 쿼리인데, 테이블이 아닌 엔티티 객체를 대상으로 검색 그러나 모든 DB 데이터를 객체로 변환해서 검색하는 것은 불가능 애플리케이션이 필요한 데이터만 DB에서 불러오려면 결국 검색 조건이 포함된 SQL이 필요 JPA는 SQL을 추상화한 JPQL이라는 객체 지향 쿼리 언어 제공 SQL과 문법 유사 SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN 지원 JPQL은 엔티티 객체를 대상으로 쿼리 vs SQL은 데이터베이스 테이블을 대상으로 쿼리 SQL을 추상화해서 특정 데이터베이스 SQL에 의존 X JPQL을 한마..

1.JPA에서 가장 중요한 2가지 객체와 관계형 데이터베이스 매핑하기 ➡️영속성 컨텍스트(PersistenceContext) JPA에서는 엔티티매니저 팩토리에서 유저의 요청이 올 때마다 엔티티 매니저를 별도로 생성해야한다. 이 구조로 DB와 연결된다. 2.영속성 컨텍스트란? JPA를 이해하는데 가장 중요한 용어 엔티티를 영구 저장하는 환경이라는 뜻 EntityManager.persist(entity); 영속성 컨텍스트는 논리적인 개념(눈에 보이지 않습니다.) 엔티티 매니저를 통해서 영속성 컨텍스트에 접근하는 것! J2SE 환경에서는 엔티티 매니저와 영속성 컨텍스트가 1:1 J2EE, 스프링 프레임워크 같은 컨테이너 환경에서는 엔티티 매니저와 영속성 컨텍스트가 N:1 같은 트랜잭션이면 같은 영속성 컨텍스트..

1.양방향 매핑 (반대 방향으로 객체 그래프 탐색하고 싶을 때) @Entity // 조회 Team findTeam = em.find(Team.class, team.getId()); // 역방향 조회 int memberSize = findTeam.getMembers().size(); 2.연관관계 주인과 mappedBy mappedBy는 처음에는 “왜 필요한가?” 처럼 이해하기 어렵습니다. 객체와 테이블간에 연관관계를 맺는 차이를 이해해야 합니다. 3.객체와 테이블이 관계를 맺는 차이 객체 연관관계 회원 -> 팀 연관관계 1개 (단방향) 팀 -> 회원 연관관계 1개 (단방향) 객체의 양방향 관계는 사실 양방향 관계가 아니라 서로 다른 단방향 관계 2개 입니다. 객체를 양방향으로 참조하려면 단방향 연관관계를 ..

JPA 연관관계 매핑 1.객체를 테이블에 맞추어 모델링한다면? 👎🏼👎🏼👎🏼👎🏼 @Entity public class Member { @Id @GeneratedValue private Long id; @Column private String name; private int age; @Column(name = "TEAM_ID") private Long teamID; ... } @Entity public class Team { @Id @GeneratedValue private Long id; private String name; ... } // 팀 저장 Team team = new Team(); team.setName("TeamA"); em.persist(team); // 회원 저장 Member member ..

데이터베이스 스키마 자동으로 생성하기 DDL을 애플리케이션 실행 시 자동으로 생성 테이블 중심 -> 객체 중심 이렇게 생성된 DDL은 개발 장비에서만 사용 (운영에서 **절대!!**하면 안됨) 개발과정에서는 ORM프레임워크를 사용해 개발자가 DDL을 직접 작성하지 않아도 자동으로 스키마를 생성해 테스트를 하는 것은 괜찮지만, 운영과정에서는 실제로 프로그램을 배포하고 실행하여 사용자가 서비스를 이용하는 것이기 때문에 자동으로 생성된 DDL을 사용하면 데이터베이스의 스키마가 변경되어 데이터 손실등 예기치 않은 문제가 발생할 수도 있기 때문. ❓DDL : Data Definition Language의 약자로, DB 스키마를 정의, 수정하는데 사용되는 SQL ex) CREATE, ALTER, DROP, COMM..

객체 매핑하기 @Entity : JPA가 관리할 객체 @Id : DB PK와 매핑할 필드 @Entity public class Member{ @Id private Long id; private String name; ... } CREATE TABLE member ( id bigint not null, name varchar(255), ... primary key (id) ); persistence.xml JPA 설정 파일 경로 : /META-INF/persistence.xml javax.persistence로 시작: JPA 표준 속성 hibernate로 시작 : Hibernate 전용 속성 dialect? 데이터베이스 방언! JPA는 특정 DB에 종속적이지 않은 기술! 하지만 DB 사정은 다르다! 벤더마..

JPA란 "Java Persistence API"의 약자로, 자바 애플리케이션에서 관계형 데이터베이스와 상호작용하기 위한 자바 표준 API 개발자가 SQL쿼리를 직접 작성하지 않고도 객체 지향적 데이터를 다룰 수 있도록 한다. ex)엔티티 매핑 영속성 컨텍스트로 객체를 관리하여, DB와 트랜잭션 처리 및 연산을 추상화해 데이터 관리에 용이하다. JPA의 필요성 객체답게 모델링 할수록 매핑작업만 늘어난다. (SQL 의존적인 개발을 피하기 어려움) 객체를 SQL로 변경하면서 많은 리소스를 낭비한다! 개발자 ≒ SQL 매퍼 수준! 패러다임의 불일치 객체지향과 관계형 데이터베이스는 나온 사상이 다름 관계형 데이터베이스 - 객체를 어떻게 정규화해서 저장을 할까! 객체지향 - 어떻게 추상화하고 관리를 잘 할까? 객..