Spring 입문주차/2주차

7. Entity 이해하기

note994 2024. 8. 26. 17:13

Entity란?

JPA에서 관리되는 클래스 즉, 객체를 의미한다.

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


실습

JPA는 Spring 환경에서 하는것과 Java환경에서 하는것은 좀 다르다 무엇이 다른지는 나중에 알려준댄다. 일단 지금은 Java 환경에서의 JPA이다.

 

 

resoureces 우클릭 - Directory - META-INF

 

그리고 META-INF 우클릭 - New - File -> persistence.xml 라고 이름지어서 만들기

 

persistencs.xml에 아래의 코드 넣기

<?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="root"/>
            <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>

스프링 환경이 아닌 자바환경에서 JPA를 사용하려면 xml 파일을 만들어야 한다. 그리고 <class>com.sparta.entity.Memo</class>를 보니 여기에 entity 클래스를 등록하는듯 하다.

 

 

 

build.gradle - dependencies에 아래의 코드 추가하기

 

 

데이터베이스를 연동할건데 예전에 쓰던 memo 데이터베이스를 사용할것이다.

 

memo의 테이블 내용을 모두 제거한다.

test 폴더의 java 폴더를 우클릭 - EntityTest 클래스 파일을 만든다.

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() {

    }
}

아래의 사진처럼 entity 패키지 만들기 - Memo 클래스 생성

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 애노테이션은 JPA가 관리할 수 있는 Entity 클래스를 지정하는 것이다.

 

@ID는 기본키이며 반드시 달아야 한다 안그러면 오류

 

@GeneratedValue(strategy = GenerationType.IDENTITY) 이걸 넣으면 데이터베이스에 데이터가 추가될때마다 자동으로 1씩 올라가는 숫자필드로 만든다. 여기서는 id필드에 붙여주는게 맞다.


@Table(name = "memo")는 매핑할 테이블의 이름을 지정한다 없다면 테이블을 생성한다.

@Column(name = "username") 클래스의 필드와 매핑을 할 데이터베이스의 컬럼

이미 만들어진 테이블과 엔티티 클래스와 매핑하는 경우 테이블의 컬럼 이름은 name인데 엔티티 클래스의 필드명이 username인 경우 @Colume(name="name") 이라고 해줘야 한다.

nullable은 null값 허용 여부 디폴트값은 true이다.

unique는 데이터의 중복값 허용 여부이고 디폴트값은 false이다. true는 중복값을 허용하지 않는다.

length는 글자수 제한