🌿 JPA(Java Persisrence API)
🌱 ORM(sql없이 DB를 자바 객체로 매핑) 기술 표준
___🌼 한마디로 sql문장 없이 간편하게 DAO를 생성하겠다는 뜻
🌱 Persistence(영속성) :
___🌼 프로그램이 종료되더라도 사라지지 않음. 즉, 데이터를 DB에 영구저장. -> 영속성 부여
🌱 고객의 field 변경 요청사항이 들어와도 sql문을 추가해줄 필요 없이 Entity Class만 수정해주면 됨
🌿DBMS: MySQL
🌱 Oracle과 비교예시(Database방언)
비교 | MySQL | Oracle |
---|
문자형 | VARCHAR | VARCHAR2 |
함수 | SUBSTRING() | SUBSTR() |
페이징 | LIMIT | ROWNUM |
🌿환경설정
🌱 JPA Project추가
🌱 Maven Project 추가
___🌼JPA & Hibernate & log4j lib 추가
🌱 Persistence.xml : JPA가 연동할 DB정보 보유
___🌼MySQL용 property들 추가
___🌼Hibernate property 추가
🌱 src/main/java에 log4j.properties 설정
🌿Hibernate
🌱 DBMS마다 Property 설정하여 방언을 연동시켜줌
========(버전마다 차이가 있을 수 있음)========
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL8Dialect " />
___🌼MySQL: org.hibernate.dialect.MySQL8Dialect
___🌼Oracle: org.hibernate.dialect.Oracle10gDialect
🌿JPA 사용방법(DTO)
🌱lombok 사용
___🌼@Entity : 테이블
___🌼@RequiredArgsConstructor : 부분생성자
- @NonNull설정으로 생성자에 포함할 컬럼 설정
___🌼제약조건
- @Id : 해당 컬럼에 pk조건
- @GeneratedValue(strategy = GenerationType.IDENTITY) : auto_increment. 시퀀스
- @Column(제약조건 = true/false) : 원하는 제약조건 추가
🌱Persistence.xml에 DTO 연결
___🌼Persistence.xml우클릭 - Synchronize Class List
___🌼 Persistence.xml에 <class>DTO클래스명</class>
추가
🌿JPA 사용방법(DAO)
🌱 EntityManagerFactory
___🌼 @Entity가 선언된 class table 생성
🌱 EntityManage
___🌼 emf에서 생성한 Entity 테이블 관리
🌱 같은 트랜잭션 내에서는 같은 Entity를 반환
🌱 EntityTransaction
___🌼 CRUD 역할을 하는 객체
___🌼 지연로딩. begin()으로 시작하고 commit()이 실행된 후 crud가 실행됨
🌱 CRUD
비교 | sql | JPA |
---|
| insert into 테이블명(컬럼1,컬럼2,...) values(값1,값2,...) | persist(객체 생성자) |
| select * from 테이블명 | DTO 변수 = em.find(DTO.calss, pk값) |
| update set 컬럼명=값 where 조건 | setXxx(값) |
| delete | remove() |