myBatis를 주로 사용했지만, JPA(Java Persistent API)를구현한 ORM(Object Relcational Mapping)을 사용하여 객체와 DB테이블을 매핑하려고 한다.
ORM의 종류는 크게 세가지가 있는데,
- Hibernate
- EclipseLink
- DataNucleus
가장 많이쓰이고 정보도 많은게 Hibernate이기때문에,, 해당 기술을 사용해보려고 한다.
1.build.gradle에 dependencies를 추가한다.
2.application.properties에 jpa및 jdbc관련 설정을 추가해준다.
3.서버를 재부팅한다.
이렇게되면 JPA와 JDBC를 통한 MariaDB연동이 끝났다. 지금부터는 Entity클래스를 만들어 새로운 테이블을 만들어보자
1.Entity클래스 생성
package com.project.domain.user;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.NoArgsConstructor;
@Entity
@Getter
@NoArgsConstructor
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long userId; //사용자 아이디
@Column(nullable = false)
private String loginId; //로그인아이디
@Column(nullable = false)
private String password; //비밀번호
@Column(nullable = false)
private String email;
private String phone;
@Column(nullable = false)
private String address;
@Column(nullable = false)
private String sex;
}
설명
- @Entity
- DB 테이블과 연결될 클래스임을 나타낸다.
- 카멜케이스로 테이블 이름을 매핑한다. ex)TotalDataBasic -> totalDataBasic
- @NoArgsConstructor(access = AccessLevel.PROTECTED)를 설정함으로 아무런 값도 갖니않는 의미없는 객체의 생성을 막는다.
- @AllArgsConstructor는 사용하지 않는다. 클래스에 존재하는 모든 필드에 대한 생성자를 자동으로 생성하는데, 인스턴스 멤버의 선언순서에 영향을 받기 때문에 변수의 순서를 바꾸면 생성자의 입력 값 순서도 바뀌게 되어 검출되지않는 치명적인 오류를 발생시킬 수 있다. -> 생성자에 @Builder를 사용함으로 방지한다.
- @GeneratedValue
- PK 생성규칙을 나타낸다.
- 기본키 생성을 데이터베이스에 위임하는 방식으로, id값을 따로 할당하지 않아도 DB가 auto_increment해준다.
- @Id
- 해당 테이블의 PK임을 나타낸다.
- @Column
- 테이블의 컬럼임을 나타낸다.
- 굳이 선언하지 않아도 기본값이지만 column정보를 변경하기 위해 사용한다 ex)length, nullable
- name = 필드와 매핑할 테이블의 컬럼 이름 지정
- insertable = true / 엔티티 저장시 필드값 저장, false / 필드값이 저장되지 않음
- updatable = true / 엔티티 수정시 필드값 수정, false / 필드값이 수정되지 않음
- table = 하나의 엔티티를 두개 이상의 테이블에 매필할 때 사용
- nullable = false / not null
- unique = 컬럼에 unique제약조건 부여
- columneDefinition = 컬럼정보를 직접 부여 ex ) columnDefinition = "VARCHAR(15) NOT NULL"
- length = 필드 길이
- @Enumerated
- 자바 Enum타입을 매핑할때 사용
- value = EnumType.ORDINAL : enum순서를 DB에 저장
- value = EnumType.STRING : enum텍스를 DB에 저장
- @Temporal
- value = TemporalType.DATE 날짜, DB date타입과 매핑 ex) 2023-04-20
- value = TemporalType.TIME 시간, DB time타입과 매핑 ex) 19:41:35
- value = TemporalType.TIMESTAMP 시간, DB timestamp타입과 매핑 ex) 2023-04-20 19:41:35
- @Lob
- CLOB, BLOB데이터를 매핑하기위해 사용한다
- @Transient
- DB에 저장하지도 조회하지도 않는 컬럼. 객체에 임시로 값을 보관하고 싶을 때 사용한다.
2.서버를 재기동하여 user테이블이 만들어졌는지 확인한다.
↓
기본적인 Entity 및 테이블 생성은 끝났다. 간단한 CRUD 테스트를 위해 내일은 JpaRepository<T, Id>인터페이스를 상속받은 UserRepository를 만들어 봐야겠다..
'프로젝트[종료]' 카테고리의 다른 글
11.회원가입 기능 만들기(1) (0) | 2023.04.26 |
---|---|
10. JpaRepository<T, Id>인터페이스 상속받기 (0) | 2023.04.26 |
8. ThymeLeaf의 fragment기능 이용하기 (0) | 2023.04.18 |
7. Spring Boot 메시지/국제화 기능 이용하기 (0) | 2023.04.17 |
6. DB 설계하기(MariaDB) (0) | 2023.04.17 |