일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- DeepLearning
- 논문리뷰
- 자바
- 자바ORM표준JPA프로그래밍
- 딥러닝
- Java
- 장애물인식
- Jetson
- 아두이노
- JPA
- 프로그래머스
- 자율주행
- 네트워크
- cartograhper
- Spring Batch
- 운영체제
- 이펙티브자바
- 파이썬
- Hibernate
- persistance context
- MySQL
- 논문
- 자료구조
- 디자인패턴
- 영속성컨텍스트
- Python
- 포인트클라우드
- 알고리즘
- Database
- 배달로봇
- Today
- Total
목록JPA (15)
제리 devlog
객체의 참조와 테이블의 외래 키를 매핑을 어떻게 할까? 방향 : 테이블과 달리 객체는 참조의 방향이 존재한다. 다중성 : 1:N, N:1, 1:1, N:M의 관계가 있다. 연관관계의 주인 : 객체를 양방향 연관 관계로 만드려면 연관관계의 주인을 정해야한다. 단방향 연관관계 위와 같이 객체의 연관관계를 테이블과 매핑하기 위해서는 아래와 같이 코드를 작성한다. @Entity public class Member { @Id @Column(name = "MEMBER_ID") private String id; private String username; @ManyToOne @JoinColumn(name = "TEAM_ID") private Team team; public void setTeam(Team team){..
객체와 테이블 매핑 : @Entity, @Table 기본 키 매핑 : @Id 필드와 컬럼 매핑 : @Column 연관 관계 매핑 : @ManyToOne, @JoinColumn @Entity 테이블과 매핑할 클래스에 붙인다. @Entity가 붙은 클래스는 JPA가 관리하며 엔티티라 부른다. @Entity(name = "")속성을 사용하여 엔티티의 이름을 지정할 수 있다. 기본 값은 클래스 이름이다. @Entity를 적용 시 주의사항은 아래와 같다. * 기본 생성자는 필수(파라미터가 없는 public, protected생성자) * final 클래스, enum, interface, inner클래스는 사용불가 * 저장할 필드에 final을 사용하면 안 된다. @Table 엔티티와 매핑할 테이블을 지정한다. 생략..
영속성 컨텍스트란? 엔티티를 영구 저장하는 환경이라는 뜻이다. 엔티티 매니저로 엔티티를 저장하거나 조회하면 엔티티 매니저는 영속성 컨텍스트에 엔티티를 보관하고 저장한다. em.persist(member); 이 코드는 단순히 회원 엔티티를 저장하는 것이 아니다. persist()는 엔티티 매니저를 사용해서 엔티티를 영속성 컨텍스트에 저장한다. 영속성의 생명주기에는 4가지가 있다. 1. 비영속 엔티티의 객체를 생성한 상태이며 아직 저장하지 않았다. 따라서 영속성 컨텍스트나 데이터베이스에 관련이 없는 비영속상태이다. Member member = new Member(); member.setId("member1"); member.setUsername("회원1"); 2. 영속 엔티티 매니저를 통해 엔티티를 영속성 ..
새로운 프로젝트를 생성한다. 의존성 관리는 maven을 사용한다. 프로젝트 구조는 아래와 같다. 먼저 의존성 관리를 위해 pom.xml을 보자 4.0.0 org.hibernate hibernate-entitymanager 5.4.10.Final com.h2database h2 1.4.199 org.example ch2-jpa 1.0-SNAPSHOT 여기서 두가지 라이브러리를 사용한다. hibernate는 JPA 표준과 하이버네이트를 포함하는 라이브러리이다. h2 데이터베이스는 h2 데이터 베이스를 사용하게해준다. 따로 mysql이나 오라클같은 데이터베이스 대신 가벼운 h2를 사용하여 간편하게 테스트한다. 이번에는 회원 클래스에 JPA가 제공하는 매핑 어노테이션을 추가해보자. @Entity @Table(n..
JPA는 자바 ORM(객체관계매핑) 기술에 대한 API 표준 명세다. 즉, 인터페이스를 모아둔 것이다. 따라서 JPA를 사용하려면 JPA를 구현한 ORM프레임워크를 사용해야한다. 이중 Hibernate가 가장 대중적이다. JPA라는 표준 덕분에 특정 구현 기술에 대한 의존도를 줄일 수 있고 다른 구현 기술로 손쉽게 이동할 수 있다. 다시말하면 Hibernate가 아닌 다른 ORM프레임워크로 변경해도 JPA인터페이스를 사용하고있기 때문에 코드상에서 변경해야할 부분이 크게 줄어든다. 왜 JPA를 사용해야 하는가? 1. 생상성 JPA를 사용하면 자바 컬렉션에 객체를 저장하듯이 JPA에 저장할 객체를 전달하면된다. SQL을 작성하고 JDBC API를 사용하는 반복적인 일을 JPA에서 대신해준다. 나아가서 JPA..
애플리케이션은 발전하면서 점점 복잡성이 커진다. 지속 가능한 애플리케이션을 개발하는 일은 끊임없이 증가하는 복잡성과 의 싸움이다. 복잡성을 제어하지 못하면 유지보수하기 어려운 애플리케이션이 된다. 객체지향 프로그래밍의 경우 추상화, 캡슐화, 정보은닉, 상속, 다형성 등 시스템의 복잡성을 제어할 수 있는 방법이 존재하기 때문에 많은 애플리케이션이 객체지향 언어로 개발한다. 비즈니스 요구사항을 정의한 도메인 모델을 객체로 모델링하면 객체가 지니는 장점을 활용할 수 있다. 하지만 문제는 어떻게 객체를 저장해야할지다. 예를 들어 유저에 대한 정보를 담는 인스턴스를 생성했다면 메모리가 아닌 영구적인 저장소에 저장해야한다. 단순히 객체의 속성을 모두꺼내와 데이터베이스에 저장할 수도있지만, 만약 객체가 상속을 받거나..
SQL을 직접 다룰 때 발생하는 문제를 확인하기위해 아래 예시를 참고해보자. 회원 테이블은 이미 만들어졋다고 가정하고 회원을 CRUD하는 기능을 개발해보겠다. 먼저 회원 객체를 만든다. public class Member { private String memberId; private String name; ... } 다음은 데이터베이스에 연결할 회원용 DAO를 만든다. public class MemberDAO { public Member find(String memberId) { ... } } 이제 MemberDAO의 find() 메소드를 만들어 회원을 조회하는 기능을 개발해보자. 일반적인 순서는 아래와 같다. 1. 회원 조회용 SQL작성 SELECT MEMBER_ID, NAME FROM MEMBER M..