열심히 끝까지
디바이스 융합 자바(Java) day97 - JPA(Java Persistence API) 본문
디바이스 융합 자바(Java) day97 - JPA(Java Persistence API)
노유림 2022. 11. 1. 14:09[ JPA(Java Persistence API) ]
DAO가 변환되는 과정
1. JDBCUtil
- connection 확보하고 close하는 것 다 진행
2. Mybatis
결합도가 낮고 응집도가 높아야 유지보수 용이
자바 객체 <-> 테이블
: 자동 매핑
: 자바 객체의 정보를 멤버변수의 형태로 저장
- 정보를 Row 형태로 저장
>> Row 정보를 멤버변수로 자동 매핑하는 것
ORM(Object Relation Mapping)들의 집합, 구현체
: 객체 관계 매핑하는 실구현체
: sql문을 자동 생성
>> sql 만들 필요 없음
: Mybatis는 DBMS 변경 시 XML을 따로 만들어야하는데,
JPA는 DBMS에 맞게 SQL문을 자동 생성
자바객체 VO(DTO)를 엔티티, 영속성객체라고 부름
JPA Entity 구현
>> JPA 구현체 pom.xml 설정
<!-- JPA -->
<!-- JPA 구현체, JDBC -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.1.0.Final</version>
</dependency>
2.0에서 2.2로 바뀔 때 큰 변화가 있었다고 함
버전 2.2것이 옳음
>> 2.2 사용할 수 있도록 해야하겠다!!
>> JPA 파일 생성


>> JPA 파일을 생성하기 위해서는 JPA 등록이 필수

>> 2.1을 사용해볼 예정
만약 APPLY가 활성화되지 않는다면 Disable Library Configuration으로 교체할 것

@Entity
@Table(name="BOARD") // 엔티티 클래스명과 테이블명이 다르다면, 해당 @Table 설정해야함!
public class Board { // 엔티티 클래스 명 == 테이블명
private static final long serialVersionUID = 1L;
public Board() {
super();
}
}
JPA 설정파일 == persistence.xml
dialect 설정
SQL 표준 문법 -> DBMS 사투리(방언)
dialect DBMS를 사투리(방언)
>> 파일 위치

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.1" xmlns="http://xmlns.jcp.org/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd">
<persistence-unit name="test2">
<class>com.ryo.app.Board</class>
<properties>
<!-- 필수 항목 -->
<property name="javax.persistence,jdbc.driver" value=""/>
<property name="javax.persistence,jdbc.url" value=""/>
<property name="javax.persistence,jdbc.user" value=""/>
<property name="javax.persistence,jdbc.password" value=""/>
<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
<!-- 이후는 선택 옵션 -->
</properties>
</persistence-unit>
</persistence>
만약 hibernate.dialect의 값이 mysql을 사용 시 변경되어야 함
>> org.hibernate.dialect.MySQL5Dialect
오라클이면 sequence 속성(자동 증가 함수) 있어야 함
Board.java---------------
package com.ryo.app;
import java.io.Serializable;
import javax.persistence.*;
/**
* Entity implementation class for Entity: Board
*
*/
@Entity
@SequenceGenerator(
name="BID_SEQ",
sequenceName="BOARD_SEQ",
initialValue=3,
allocationSize=50
)
@Table(name="BOARD") // 엔티티 클래스명과 테이블명이 다르다면, 해당 @Table 설정해야함!
public class Board { // 엔티티 클래스 명 == 테이블명
@Id // pk를 알려주어야만함!! 필수 @이다!!!!!
@GeneratedValue(
strategy=GenerationType.SEQUENCE,
generator="BID_SEQ"
) // pk 자동 설정
private int bid;
private String writer;
private String title;
private String content;
public int getBid() {
return bid;
}
public void setBid(int bid) {
this.bid = bid;
}
public String getWriter() {
return writer;
}
public void setWriter(String writer) {
this.writer = writer;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
@Override
public String toString() {
return "Board [bid=" + bid + ", writer=" + writer + ", title=" + title + ", content=" + content + "]";
}
}
JPAClient.java----------
package com.ryo.app;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
public class JPAClient {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("test2"); // 영속성유닛명
EntityManager em = emf.createEntityManager();
EntityTransaction et = em.getTransaction();
try {
et.begin();
Board board = new Board();
board.setTitle("타이틀");
board.setWriter("티모");
board.setContent("글 내용");
em.persist(board); // INSERT
et.commit();
}catch(Exception e) {
et.rollback();
}
// 이 곳이 et.commit이 들어가기도 함
em.close();
emf.close();
}
}
'디바이스 융합 자바(Java)기반 풀스택 개발자 양성과정(수업내용)' 카테고리의 다른 글
디바이스 융합 자바(Java) day95 - Spring Boot[트랜잭션] (0) | 2022.10.28 |
---|---|
디바이스 융합 자바(Java) day94 - Spring Boot[JDBCTemplate] (0) | 2022.10.27 |
디바이스 융합 자바(Java) day93 - Spring Boot : Validator(유효성 검사) (0) | 2022.10.26 |
디바이스 융합 자바(Java) day92 - Spring Boot 설정[MVC 패턴] (0) | 2022.10.25 |
디바이스 융합 자바(Java) day91(2) - SpringBoot 의존 주입 (0) | 2022.10.24 |