์ ํ ํ๊ฒฝ
- IntelliJ
- SpringBoot
- MySQL ver 8.0.33
- Gradle
build.gradle ํ์ผ์ dependencies{}์ ์๋์ ์ฝ๋๋ฅผ ์ถ๊ฐํ ํ ๊ทธ๋๋ค ์๋ก๊ณ ์นจ์ ํด์ค๋ค.
implementation 'mysql:mysql-connector-java:8.0.33'
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
๋ค๋ฅธ ๋ถ๋ค์ 'mysql:mysql-connector-j' ๋ 'mysql:mysql-connector-java'๋ก๋ ํ์๋๋ฐ ์ ๋ ์๋ฌ๊ฐ ๋ฐ์ํ๋๋ผ๊ตฌ์.. ๊ทธ๋์ ์ ๋ 'mysql:mysql-connector-java:8.0.33'์ผ๋ก ์ฌ์ฉ์ค์ธ MySQL ๋ฒ์ ๊น์ง ์ ๋ ฅํด์คฌ์ต๋๋ค.
MySQL ์ค์
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://[IP]:[ํฌํธ๋ฒํธ]/[DB์ด๋ฆ]?useSSL=false&useUnicode=true&serverTimezone=Asia/Seoul
spring.datasource.username=[๋ณธ์ธ๊ณ์ ์ด๋ฆ]
spring.datasource.password=[๋ณธ์ธ๊ณ์ ๋น๋ฐ๋ฒํธ]
#true ์ค์ ์ jpa ์ฟผ๋ฆฌ๋ฌธ ํ์ธ ๊ฐ๋ฅ
spring.jpa.show-sql=true
#DDL ์ ์์ DB์ ๊ณ ์ ๊ธฐ๋ฅ์ ์ฌ์ฉ ๊ฐ๋ฅ
spring.jpa.hibernate.ddl-auto=update
# JPA์ ๊ตฌํ์ฒด์ธ Hibernate๊ฐ ๋์ํ๋ฉด์ ๋ฐ์ํ SQL์ ๊ฐ๋
์ฑ์ ๋์ฌ์ค
spring.jpa.properties.hibernate.format_sql=true
ํ๋ก์ ํธ์ ์์ฑ๋์ด ์๋ ์ํฐํฐ์ ๋ง๊ฒ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ
์ด๋ธ์ ์์ฑ, ์์ ํด์ค๋ค. ๊ทธ๋ฆฌ๊ณ ์ฟผ๋ฆฌ๋ฌธ์ ๋ณผ ์ ์๋ ์ค์ ์ true๋ก ํด๋จ๊ธฐ ๋๋ฌธ์ ์ธํ
๋ฆฌ์ ์ด ์ฝ์์์ ์ฟผ๋ฆฌ๋ฌธ๋ ํ์ธํ ์ ์๋ค.
์ด๋ฐ์์ผ๋ก ๋ฐ๋ก ํ ์ด๋ธ์ ์์ฑํด์ฃผ์ง ์์๋๋ฐ๋ ์ํฐํฐ์ ๋ง๋ ํ ์ด๋ธ์ด ์์ฑ๋์๋ค!
2๋ฒ spring.jpa.hibernate.ddl-auto=[ย ] ์ ์ถ๊ฐํ ๋ด์ฉ
- createย :ย ๊ธฐ์กด ํ ์ด๋ธ์ ์ญ์ ํ๊ณ ์๋ก ์์ฑ [ DROP + CREATE ]
- create-dropย :ย CREATE ์์ฑ์ ์ถ๊ฐ๋ก ์ดํ๋ฆฌ์ผ์ด์ ์ ์ข ๋ฃํ ๋ ์์ฑํ DDL์ ์ ๊ฑฐย [ DROP + CREATE + DROP ]
- updateย ย :ย DB ํ ์ด๋ธ๊ณผ ์ํฐํฐ ๋งคํ ์ ๋ณด๋ฅผ ๋น๊ตํด์ ๋ณ๊ฒฝ ์ฌํญ๋ง ์์ [ ํ ์ด๋ธ์ด ์์ ๊ฒฝ์ฐ CREATE ]ย
- validateย ย :ย DB ํ ์ด๋ธ๊ณผ ์ํฐํฐ ๋งคํ์ ๋ณด๋ฅผ ๋น๊ตํด์ ์ฐจ์ด๊ฐ ์์ผ๋ฉด ๊ฒฝ๊ณ ๋ฅผ ๋จ๊ธฐ๊ณ ์ดํ๋ฆฌ์ผ์ด์ ์ ์คํํ์ง ์์
- noneย ย :ย ์๋ ์์ฑ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง ์์
์ถ์ฒ: https://dev-coco.tistory.com/85 [์ฌ๊ธฐ๋ก์ด ๊ฐ๋ฐ์ํ:ํฐ์คํ ๋ฆฌ]
์ ๋ฆฌ ๋๋ฌด ๊ฐ์ฌํฉ๋๋ค...!!!ใ ใ
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ToString
@Table(name="writing")
@Entity
- @Data : @Getter, @Setter, @RequiredArgsConstructor, @ToString, @EqualsAndHashCode์ ํ๊บผ๋ฒ์ ์ค์
๋ชจ๋ ํ๋๋ฅผ ๋์์ผ๋ก Getter Setter๊ฐ ์๋์ผ๋ก ์์ฑ๋๊ณ final์ด๋ @NonNull ํ๋ ๊ฐ์ ํ๋ผ๋ฏธํฐ๋ก ๋ฐ๋ ์์ฑ์๊ฐ ์์ฑ๋๊ณ , toString, equals, hasCode ๋ฉ์๋๊ฐ ์๋ ์์ฑ๋๋ค.
- @Getter : Getter ๋ฉ์๋๋ฅผ ์์ฑํ๊ณ @Builder๋ฅผ ํตํด ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๊ฒ ํ๋ค.
- @Builder : @Builder๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด @AllArgsConstructor์ @NoArgsConstructor๋ฅผ ๊ฐ์ด ์ฒ๋ฆฌํด์ผ ์ปดํ์ผ ์๋ฌ ๋ฐ์ํ์ง ์์.
- @Entity : ํ ์ด๋ธ์ ๋ปํจ (๋ฐ๋์ ํด์ค์ผ ํจ)
- @Table : ํ ์ด๋ธ ๋ช ์ (ํ ์ด๋ธ๋ช ์ด ํด๋์ค๋ช ๊ณผ ๊ฐ์ ๊ฒฝ์ฐ ์๋ต ๊ฐ๋ฅ)
- @ID : PK๋ฅผ ๋ปํจ
- @GeneratedValue : PK์ ์์ฑ ๋ฐฉ์ ์ ํ ๋ ์ฌ์ฉ
- GenerationType.IDENTITY : MySQL์ AUTO_INCREMENT ๋ฐฉ์ ์ฌ์ฉ(๋ฐ์ดํฐ๊ฐ ๋ค์ด์ฌ ๋ ๋ง๋ค ๊ฐ์ด ์ ์ ๋ก ์ฆ๊ฐ, ์ฆ๊ฐ๊ฐ๋ ์ค์ ํ ์ ์์(+1,+2...))
- GenerationType.AUTO(default) : JPA๊ฐ ์์ฑ ๋ฐฉ์์ ๊ฒฐ์
- GenerationType.SEQUENCE : SEQUENCE๋ฅผ ์ด์ฉํด์ ํค๋ฅผ ์์ฑ, @SequenceGenerator์ ๊ฐ์ด ์ฌ์ฉ
- GenerationType.TABLE : ํค ์ ์ฉ ํ ์ด๋ธ ์์ฑ, @TableGenerator์ ๊ฐ์ด ์ฌ์ฉ
- @Column : ์ปฌ๋ผ ๋ช ์