Contents
접기
* Spring Tool Suite 4 = STS
STS 에서 FILE - NEW - SPRING STARTER PROJECT 클릭
위 창에서 조건과 맞는 옵션인지 확인
검색을 통해 위에 3가지를 선택하여 프로젝트를 생성한다.
생성을 하게 되면 pakage Explorer 에서 아래와 같이 [boot] 라는 표시가 되어있는 프로젝트가 생성된다.
자동적으로 생겨나는 파일들 중 META-INF (이름 다르면 안된다. ) 안에 persistence.xml 넣고
바깥에 히스토리를 위한 logback.xml 도 같이 넣어놓는다.
lombok.jar 에 정상적으로 되어있다면 아래와 같이 필요한 것을 @ (애노테이션) 을 통해 적어두고 import 하기
package com.kdigital.jpa02.entity;
import java.time.LocalDateTime;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;
import lombok.ToString;
@NoArgsConstructor
@AllArgsConstructor
@Setter
@Getter
@ToString
@Entity
@Table(name="myuser")
public class User {
@Id
private String email;
private String username;
@Column(name = "join_date")
private LocalDateTime joinDate;
// LocalDate 도 가능
}
종류 | 의미 |
@NoArgsConstructor | 기본 생성자 |
@AllArgsConstructor | 오버로딩 생성자 (모든 아규먼트) |
@Setter , @Getter, @ToString | |
@Entity | 테이블과 매핑할 클래스는 붙여야 한다. |
@Table(name="myuser") | SQLdeveloper 와 테이블 이름이 다를때 설정 |
@Id |
PK 표시 |
@Column(name = "join_date") |
SQLdeveloper 와 컬럼 이름이 다를때 설 |
만약 롬복이 잘 되어있지 않다면 직접 아래 코드를 생성 시켜주어야 한다.
protected User() { }
public User(String email, String name, LocalDateTime createDate) {
this.email = email;
this.name = name;
this.createDate = createDate;
}
public String getEmail() {
return email;
}
public String getName() {
return name;
}
public LocalDateTime getCreateDate() {
return createDate;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User[email="+ email
package com.kdigital.jpa02;
import java.time.LocalDateTime;
import com.kdigital.jpa02.entity.User;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.EntityTransaction;
import jakarta.persistence.Persistence;
public class MainJPA {
public static void main(String[] args) {
// 설정값을 읽어옴
EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpastudy");
EntityManager manager = factory.createEntityManager();
EntityTransaction tx = manager.getTransaction();
try {
tx.begin(); // 트랜잭션 시작
User user = new User("aaa@aaa.com", "홍길동", LocalDateTime.now());
manager.persist(user); // insert 시켜주는 메소드
tx.commit(); // 커밋이 되면종료 된다.
System.out.println("저장 완료");
} catch(Exception e) {
tx.rollback();
} finally {
manager.close();
}
// 리소스 정리
factory.close();
}
}
코드 | 의미 |
EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpabegin"); | persistence.xml의 <persistence-unit name="persistence unit명 " > 값을 읽어 EntityManagerFactory생성 (DB 연동을 위한 설정값을 읽어옴) |
EntityManager entityManager = factory.createEntityManager(); | EntityManagerFactory 객체를 통해 EntityManager 생성 (DB연동 처리) |
EntityTransaction tx = entityManager.getTransaction(); | EntityManager 객체를 통해 EntityTransaction 객체 생성 |
try { transaction.begin(); User user = new User("user1@user.com", "user", LocalDateTime.now()); entityManager.persist(user); transaction.commit(); } |
begin = transaction 시작 * 데이터 매핑 및 transaction 종료 - entityManager.persist(user); persist()메소드를 이용하여 DB에 객체 저장 - transaction.commit(); 실제 insert는 commit() 시 실행 (식별자를 직접 설정하는 경우) |
factory.close(); | 리소스 정리 (자원 반납) |
만든 sql문에서 SELECT 문을 사용하여 데이터베이스에 잘 연동 되었는지 확인 가능하다.
-- JPA-02 와 연동하는 테이블의 생성
DROP TABLE myuser;
CREATE TABLE myuser(
email varchar2(50) primary key
, username varchar2(50) not null
, join_date date default sysdate
);
select * from myuser;
예제 2
-- JPA-03 rhk 연동하는 테이블의 생성
DROP TABLE friend;
CREATE TABLE friend(
email varchar2(50) primary key
, username varchar2(50) not null
, birthday date
, age number(3)
);
select * from friend;
lombok.jar 사용 대신 직접 생성하여 연다.
package com.kdigital.jpa03.entity;
import java.time.LocalDate;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
@Entity
public class Friend {
@Id
private String email;
private String username;
private LocalDate birthday;
private int age;
public Friend() {
super();
}
public Friend(String email, String username, LocalDate birthday, int age) {
super();
this.email = email;
this.username = username;
this.birthday = birthday;
this.age = age;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public LocalDate getBirthday() {
return birthday;
}
public void setBirthday(LocalDate birthday) {
this.birthday = birthday;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
삽입
package com.kdigital.jpa03;
import java.time.LocalDate;
import com.kdigital.jpa03.entity.Friend;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.EntityTransaction;
import jakarta.persistence.Persistence;
public class FriendInsert {
public static void main(String[] args) {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpastudy");
EntityManager manager = factory.createEntityManager();
EntityTransaction tx = manager.getTransaction();
try {
tx.begin();
for (int i =1; i<=10; ++i) {
Friend friend = new Friend("f" +i + "@naver.com","이름_"+i,LocalDate.of(1999, 01, 20), 26);
manager.persist(friend);
}
// Member member = new Member("f1@naver.com","손오공",LocalDate.of(1999, 01, 20), 26);
//manager.persist(member);
tx.commit();
System.out.println("저장 완료");
}catch(Exception e) {
tx.rollback();
e.printStackTrace();
}finally {
manager.close();
}
factory.close();
}
}
삭제
package com.kdigital.jpa03;
import java.time.LocalDate;
import com.kdigital.jpa03.entity.Friend;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.EntityTransaction;
import jakarta.persistence.Persistence;
public class FriendDelete {
public static void main(String[] args) {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpastudy");
EntityManager manager = factory.createEntityManager();
EntityTransaction tx = manager.getTransaction();
try {
tx.begin();
// 삭제하려고 하는 정보가 있는지 확인 후 삭제
Friend friend = manager.find(Friend.class,"f10@naver.com");
// pk를 넣어서 전달되는 값
if(friend == null) {
System.out.println("친구 정보 없음");
} else {
manager.remove(friend);
}
tx.commit();
System.out.println("삭제 완료");
}catch(Exception e) {
tx.rollback();
e.printStackTrace();
}finally {
manager.close();
}
factory.close();
}
}
수정
package com.kdigital.jpa03;
import java.time.LocalDate;
import com.kdigital.jpa03.entity.Friend;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.EntityTransaction;
import jakarta.persistence.Persistence;
public class FriendUpdate {
public static void main(String[] args) {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpastudy");
EntityManager manager = factory.createEntityManager();
EntityTransaction tx = manager.getTransaction();
try {
tx.begin();
// 삭제하려고 하는 정보가 있는지 확인 후
Friend friend = manager.find(Friend.class,"f1@naver.com");
// pk를 넣어서 전달되는 값
if(friend == null) {
System.out.println("친구 정보 없음");
} else {
friend.setUsername("전우치");
friend.setBirthday(LocalDate.of(1990, 12, 23));
System.out.println("변경 완료");
}
tx.commit();
}catch(Exception e) {
tx.rollback();
e.printStackTrace();
}finally {
manager.close();
}
factory.close();
}
}
조회
- 여러개를 조회하는 것은 JPA로 되지 않는다.
package com.kdigital.jpa03;
import java.time.LocalDate;
import com.kdigital.jpa03.entity.Friend;
import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.EntityTransaction;
import jakarta.persistence.Persistence;
public class FriendSelect {
public static void main(String[] args) {
EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpastudy");
EntityManager manager = factory.createEntityManager();
EntityTransaction tx = manager.getTransaction();
try {
tx.begin();
// 삭제하려고 하는 정보가 있는지 확인 후 삭제
Friend friend = manager.find(Friend.class,"f9@naver.com");
// pk를 넣어서 전달되는 값
if(friend == null) {
System.out.println("친구 정보 없음");
} else {
System.out.println(friend);
}
tx.commit();
}catch(Exception e) {
tx.rollback();
e.printStackTrace();
}finally {
manager.close();
}
factory.close();
}
}
'국비 교육 > SQL(Oracle)' 카테고리의 다른 글
[자바 - 오라클] JPQL (Java Persitence Query Language) (0) | 2024.02.14 |
---|---|
[자바 - 오라클] JPA 연결 - 2 (0) | 2024.02.13 |
(이론) 데이터베이스 모델링(개념적 - 논리적 - 물리적) (0) | 2024.02.09 |
(이론) DBMS 와 데이터베이스 모델링 (0) | 2024.02.09 |