본문 바로가기

Dev

(61)
연관관계 매핑 기초 이번 글에서는 연관관계에 대해서 적어보고자 한다. "객체지향 설계의 목표는 자율적인 객체들의 협력 공동체를 만드는 것이다." - 조영호(객체지향의 사실과 오해) 나중에 경험치가 쌓였을 때 이책을 한번 봐봐야 겠다. 연관관계가 필요한 이유 예제 시나리오 회원과 팀이 있다. 회원은 하나의 팀에만 소속될 수 있다. 회원과 팀은 다대일 관계이다. 테이블 관계에서는 TEAM이 1이고 MEMBER가 N으로 1:N 관계이다. 이를 객체 연관관계로 표현하면 외래키(FK)인 TEAM_ID를 teamId로 그대로 표현해서 사용 코드로 표현하자면 아래와 같다.. try{ Team team = new Team(); team.setName("TeamA"); em.persist(team); Member member = new M..
엔티티 매핑 이번 글에서는 실제 JPA를 사용해서 테이블과 매핑하는 방법에 대해서 적어볼게요.. 엔티티 매핑 종류 객체와 테이블 매핑 : @Entity, @Table 필드와 컬럼 매핑 : @Column 기본 키 매핑 : @Id 연관관계 매핑 : @ManyToOne, @JoinColumn @Entity - @Entity가 붙은 클래스는 JPA가 관리, 엔티티라 한다. - JPA를 사용해서 테이블과 매핑할 클래스는 @Entity 필수 + 속성 : name JPA에서 사용할 엔티티 이름을 지정 기본값 : 클래스 이름을 그대로 사용(예 : Member) 같은 클래스 이름이 없으면 가급적 기본값을 사용한다. @Table - @Table은 엔티티와 매핑할 테이블 지정 + 속성 : name - 매핑할 테이블 이름 + 속성 : c..
JPA내부 구조(영속성 관리) 이번 글에서는 JPA내부 구조와 영속성 관리에 대해서 끄적여보고자 한다. JPA에서 가장 중요한 2가지 - 객체와 관계형 데이터베이스 매핑하기(어떻게 매핑 할 것인가?) - 영속성 컨텍스트 먼저 위 두가지 경우를 이해하기 위해서는 엔티티 매니저 팩토리와 엔티티 매니저에 대해서 이해가 필요하다. 이 두개에 대해서는 이전 글에서도 언급을 해놨으니 참고하길 바란다. -> 2020/07/01 - [Dev/JPA] - JPA의 사용 1. 영속성 컨텍스트 JPA를 이해하는데 가장 중요한 용어 "엔티티를 영구 저장하는 환경"이라는 뜻 EntityManager.persist(entity); - DB에 저장한다는 것이 아니고 엔티티를 영속성 컨텍스트라는 곳에다가 저장한다는 뜻 - EntityManager 를 통해 영속성..
JPA의 등장 객체를 마치 자바 컬렉션에 저장하고 불러오듯이 관계형 데이터베이스에 저장하고 불러올 수 있는 방법이 없을까? 고민 끝에 등장한 것이 JPA 이다. - JPA(Java Persistence API) - 자바 진영의 ORM 기술 표준 ORM(Object-relational mapping) - 객체 관계 매핑 객체는 객체대로 설계 관계형 데이터베이스는 관계형 데이터베이스대로 설계 ORM 프레임워크가 중간에서 매핑하는 역할 즉, 객체지향 개발자는 객체지향스럽게 개발하고 관계형 데이터베이스는 관계형 데이터베이스 답게 처리 진행 나머지는 ORM 프레임 워크한테 맡긴다! JPA는 자바 애플리케이션과 JDBC 사이에서 동작한다. 개발자는 JDBC API를 직접 사용하는 것이 아닌 JPA에게 명령한다. JPA는 개발자의..
SQL중심개발의 문제점 SQL중심 개발의 문제점이 무엇인지 내 나름대로 이해하기 쉽게 풀어보고자 한다. JAVA를 공부하면서 한번쯤은 JDBC 프로그래밍을 해봤을 거라고 생각한다. Connection 객체를 만들고 getConnection 해준다음에 Preparestatement 생성하고 연결해줄 SQL 문 선언해주고.. 결과값을 ResultSet을 통해 연결 받고.. close를 해주기까지.. 그렇다.. 번거롭다.. DB에 접근해서 조금더 편하게 사용하기 위해서 Spring MVC에서 ibatis/mybatis라는 개념이 등장한다. Connection과 Preparestatement 등의 역할을 이녀석들이 대신해주는 것으로 개발자 입장에서는 더 편해졌다. 위 두가지 방식에는 큰 공통점이 있다. 바로... SQL SQL SQL..