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)
다른 옵션들은 구글링... (알면 도움이 될듯).
'Spring' 카테고리의 다른 글
| Spring 기초 7 (Entitiy 상태) (Entitiy 영속/비영속 기능) (0) | 2024.01.20 |
|---|---|
| Spring 기초 6 (영속성) (EntityManager) ( Persistence 기능) (변경 감지(Dirty Checking)) (0) | 2024.01.20 |
| Spring 기초 4 (MVC) (JPA) (BEAN) (@Componet @Autowired) (Hibernate) (0) | 2024.01.20 |
| Spring 기초3 (데이터 받는 method) (Json 변환 String&Object) (@RequestParam @RequestBody) (HTTP 를 객체로) (0) | 2024.01.19 |
| Spring 기초2 (HTTP) (Lombok)(mvc)(정적 동적) (1) | 2024.01.18 |