본문 바로가기
Spring

Spring 기초 5 (Entity)

by sehunbang 2024. 1. 20.

1. Entity 이해하기

 

JPA에서 관리되는 클래스(객).

Entity 클래스는 DB의 테이블과 매핑되어 JPA에 의해 관리됩니다.

 

1. 일반 JAVA 프로젝트로 JPA 연습하기

build.gradle 에

// JPA 구현체인 hibernate
implementation 'org.hibernate:hibernate-core:6.1.7.Final'
// MySQL
implementation 'mysql:mysql-connector-java:8.0.28'
//

 

추가 + gradle => build 해주세요.

resource 폴더에 -> persistance.xml 파일은 만들고,

{ 아이디 }! 랑 {비번}! 지워 주신다음 본인 sql 아이디 랑 비번 적어주세요.

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
             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_2.xsd">
    <persistence-unit name="memo">
        <class>com.sparta.entity.Memo</class>
        <properties>
            <property name="jakarta.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
            <property name="jakarta.persistence.jdbc.user" value="{아이디}!}"/>
            <property name="jakarta.persistence.jdbc.password" value="{비번}!"/>
            <property name="jakarta.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/memo"/>

            <property name="hibernate.hbm2ddl.auto" value="create" />

            <property name="hibernate.show_sql" value="true"/>
            <property name="hibernate.format_sql" value="true"/>
            <property name="hibernate.use_sql_comments" value="true"/>
        </properties>
    </persistence-unit>
</persistence>

 

Test 폴더에 entitytest.java 만들기

import jakarta.persistence.EntityManager;
import jakarta.persistence.EntityManagerFactory;
import jakarta.persistence.Persistence;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

public class EntityTest {

    EntityManagerFactory emf;
    EntityManager em;

    @BeforeEach
    void setUp() {
        emf = Persistence.createEntityManagerFactory("memo");
        em = emf.createEntityManager();
    }
    @Test
    void test1() {

    }
}

 

SRC 에 Memo.java

package com.sparta.entity;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Id;
import jakarta.persistence.Table;

@Entity // JPA가 관리할 수 있는 Entity 클래스 지정
@Table(name = "memo") // 매핑할 테이블의 이름을 지정
public class Memo {
    @Id
    private Long id;

    // nullable: null 허용 여부
    // unique: 중복 허용 여부 (false 일때 중복 허용)
    @Column(name = "username", nullable = false, unique = true)
    private String username;

    // length: 컬럼 길이 지정
    @Column(name = "contents", nullable = false, length = 500)
    private String contents;
}

 

에노테이션 설명 @

@Entity 랑 @Table 는 

@Entity (name = "memo")

 

처럼 클래스 이름을 넣어서 지정 할수 있음. (default 는 기존 클래스 이름).

@Entity 는 기본 생성자 를 사용 합니다.

@Table 은 데이터 베이스 에서 매핑할 테이블 이름 을 지정할수 있다  (얘도 default 는 기존 클래스 이름).

 

 

@Id 는 primary key ( 데이터 베이스 ) 를 지정해줍니다.

식별차 역할을 하빈다.

@Id
private Long id;

 

 

@Column 은 데이터 베이스 에서 컬럼(Column) 을 매핑 할수 있다.

@Column(name = "username", nullable = false, unique = true)
private String username;

String username(Memo 객체) 하고 username (Column DB) 을 매핑. 

(nullable 은 null(값없음) 이 되는지 설정 , unique 는 중복이 있어도 되는지 설정 True/False).

 

persistence.xml 설명

1. 엔티티로 관리할 클래스의 경로

<persistence-unit name="memo">
    <class>com.sparta.entity.Memo</class>

 

2. 데이터 베이스 드라이버. (Spring 프로젝트에서는 자동이라 안적어도 될겁니다).

<properties>
    <property name="jakarta.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver"/>
    <property name="jakarta.persistence.jdbc.user" value="root"/>
    <property name="jakarta.persistence.jdbc.password" value="Aa1213811!"/>
    <property name="jakarta.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/memo"/>

 

3. hypernate 에서 @entity 정보를 잃고 table 을 만들어 줍니다.

+ 자동으로 sql 을 만들어 줍니다.

<property name="hibernate.hbm2ddl.auto" value="create" />

<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.use_sql_comments" value="true"/>

 

 

@Id 에 Auto Increment (자동 설정 넣기) 설명

@GeneratedValue() 넣지

@GeneratedValue(strategy = GenerationType.IDENTITY)

 

다른 옵션들은 구글링... (알면 도움이 될듯).