๐ 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. ์คํ
๋ฐ์ํ