Languages/Java

[Java] JPA๋ž€?

MOONCO 2022. 12. 24. 19:39

๐Ÿ‘‰ JPA๋ž€?

Java Persistence API

Java๋ฅผ ์‚ฌ์šฉํ•œ ORM์ค‘์˜ ํ•˜๋‚˜๋กœ
SQL์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๊ณ , ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์„ค์น˜ ( with. Spring )

https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-starter-data-jpa

 

๐Ÿ‘‰ ์‚ฌ์šฉ๋ฒ•

1. pom.xml ์— ์ข…์†์„ฑ ( dependency ) ์ถ”๊ฐ€

2. application.properties์— JPA์„ค์ • ์ถ”๊ฐ€

# PORT
server.port=8080

# DB
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://localhost:3306/์Šคํ‚ค๋งˆ์ด๋ฆ„?useSSL=false&serverTimezone=Asia/Seoul
spring.datasource.username=์Šคํ‚ค๋งˆ์‚ฌ์šฉ์ž
spring.datasource.password=์‚ฌ์šฉ์ž์•”ํ˜ธ

# JPA
# spring.jpa.hibernate.ddl-auto=create : JPA๊ฐ€ ํ”„๋กœ์ ํŠธ ๋‚ด๋ถ€ ์–ด๋…ธํ…Œ์ด์…˜์„ ๊ฒ€์‚ฌํ•ด, ํ…Œ์ด๋ธ” ์ž๋™ ์ƒ์„ฑ
spring.jpa.hibernate.ddl-auto=create
# validate : DB์— ํ…Œ์ด๋ธ”์ด ์—†์œผ๋ฉด ์ƒ์„ฑ
# create : DB์— ํ…Œ์ด๋ธ”์ด ์—†์œผ๋ฉด ์ƒ์„ฑ, ์žˆ์œผ๋ฉด ์‚ญ์ œ ํ›„ ์ƒ์„ฑ
# create-drop : DB์— ํ…Œ์ด๋ธ”์ด ์—†์œผ๋ฉด ์ƒ์„ฑ, ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ข…๋ฃŒ์‹œ ํ…Œ์ด๋ธ” ์‚ญ์ œ
# update : DB์— ํ…Œ์ด๋ธ”์ด ์—†์œผ๋ฉด ์ƒ์„ฑ, ์žˆ์œผ๋ฉด ๋ณ€๊ฒฝ๋œ ๋ถ€๋ถ„๋งŒ ์ˆ˜์ •
spring.jpa.generate-ddl=true
# spring.jpa.database=MYSQL : MySQL์„ ์‚ฌ์šฉํ•˜๊ฒ ๋‹ค๋Š” ์˜๋ฏธ
spring.jpa.database=mysql
# dialect : ์‚ฌ์šฉํ•˜๋Š” DB์— ๋งž๋Š” ๋ฐฉ์–ธ์„ ์„ค์ • ( JPA๊ฐ€ DB์— ๋งž๋Š” ์ฟผ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•˜๊ธฐ ์œ„ํ•ด ํ•„์š” )
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
# JPA๊ฐ€ ์‚ฌ์šฉํ•˜๋Š” SQL๋ฌธ ๋กœ๊ทธ๋กœ ํ™•์ธํ•˜๊ธฐ
spring.jpa.sql-show=true
# SQL๋ฌธ์„ ๋ณด๊ธฐํŽธํ•˜๊ฒŒ ํฌ๋งทํ•ด์คŒ
spring.jpa.hibernate.format-sql=true

 

3. JPA ๊ฐ€ ๊ด€๋ฆฌํ•˜๋Š” ํด๋ž˜์Šค ์ƒ์„ฑ

package com.demo.user.entity;
import com.demo.user.constant.Role;

import javax.persistence.*; // JPA ๋ถˆ๋Ÿฌ์˜ค๊ธฐ
import java.util.Date;

@Entity
@Table(name = "user")
public class User {
    @Id // ๊ธฐ๋ณธ ํ‚ค
    @GeneratedValue(strategy = GenerationType.IDENTITY) // ๊ธฐ๋ณธ ํ‚ค ์ƒ์„ฑ ์ „๋žต ( IDENTITY : DB์— ์œ„์ž„ )
    private Long id;
    
    @Column(nullable=false) // ์ปฌ๋Ÿผ ์„ค์ • ( NOT NULL )
    private String name;
    private String email;
    private String password;
    private String phone;
    private String address;
    
    @Enumerated(EnumType.STRING) // Enum ํƒ€์ž…์„ ์–ด๋–ค ํ˜•ํƒœ๋กœ ์ €์žฅํ• ์ง€ ๊ฒฐ์ • ( ๊ธฐ๋ณธ๊ฐ’์€ int )
    private Role role;
    private String status;

    @Temporal(TemporalType.TIMESTAMP) // ๋‚ ์งœ ํƒ€์ž…์„ ์–ด๋–ค ํ˜•ํƒœ๋กœ ์ €์žฅํ• ์ง€ ๊ฒฐ์ • ( ๊ธฐ๋ณธ๊ฐ’์€ Date )
    private Date created_at;

    @Lob // BLOB, CLOB ํƒ€์ž…์„ ์‚ฌ์šฉํ•  ๋•Œ ์‚ฌ์šฉ
    private String description;

    @Access(AccessType.PROPERTY) // JPA๊ฐ€ ์ ‘๊ทผํ•˜๋Š” ๋ฐฉ์‹์„ ์„ค์ • ( ๊ธฐ๋ณธ๊ฐ’์€ FIELD, PROPERTY : getter, setter๋ฅผ ํ†ตํ•ด ์ ‘๊ทผ )
    private String accessTypeProperty;
}

 

4. ์‹คํ–‰

 

 

๋ฐ˜์‘ํ˜•