ORM (Object Relational Mapping)
๊ฐ์ฒด์ ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ์ ๋งคํํ๋ค๋ ์๋ฏธ์ด๋ค.
- ๊ฐ์ฒด๋ ๊ฐ์ฒด๋๋ก, ๊ด๊ณํ DB๋ ๊ด๊ณํ DB๋๋ก ์ค๊ณ
- ORM ํ๋ ์์ํฌ๊ฐ ์ค๊ฐ์์ ๋งคํ(์ฐ๊ฒฐ)
- ๊ฐ์ฒด๋ฅผ ๊ด๊ณํ DB ํ ์ด๋ธ์ ์๋์ผ๋ก ์์ํ
JPA (Java Persistence API)
์๋ฐ ORM์ ๋ํ API ํ์ค ๋ช ์ธ๋ฅผ ์๋ฏธํ๋ค. JPA๋ ORM์ ์ฌ์ฉํ๊ธฐ ์ํ ์ธํฐํ์ด์ค์ ๋ชจ์์ผ๋ก JPA๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์ด๋ฅผ ๊ตฌํํ Hibernate, DataNucleus, EclipseLink ๋ฑ๊ณผ ๊ฐ์ ORM ํ๋ ์์ํฌ๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค.
JPA๋ ๋ด๋ถ์ ์ผ๋ก JDBC API๋ฅผ ์ฌ์ฉํ์ฌ SQL์ ์์ฑํ๊ณ ํธ์ถํ๋ค. ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ JDBC ์ฌ์ด์์ ๋์ํ์ฌ ๊ฐ๋ฐ์๊ฐ ์ง์ JDBC API๋ฅผ ์ฐ์ง ์๋๋ค.
โ JPA์์ ๊ฐ๋จํ CRUD ์ฌ์ฉํ๊ธฐ
์ ์ฅ: jpa.persist(user)
์กฐํ: User user = jpa.find(userId)
์์ : user.setName("๋ณ๊ฒฝ์ด")
์ญ์ : jpa.remove(user)
โ JPA๋ฅผ ์ฌ์ฉํ๋ฉด ๋ฌด์์ด ์ข์๊น
JPA๊ฐ ์ํฐํฐ์ ๋งคํ ์ ๋ณด๋ฅผ ๋ฐํ์ผ๋ก ์ ์ ํ SQL์ ์์ฑํ์ฌ DB์ ๋ณด๋ด๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋๋ค.
์ฟผ๋ฆฌ๋ฅผ JPA๊ฐ ๋ง๋ค์ด์ฃผ์ด Object์ RDB ๊ฐ์ ํจ๋ฌ๋ค์ ๋ถ์ผ์น๋ฅผ ํด๊ฒฐํ๋ค.
SQL ์ค์ฌ ๊ฐ๋ฐ์ด ์๋ ๊ฐ์ฒด ์ค์ฌ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋ค.
SQL์ ์ง์ ๋ค๋ฃจ์ง ์์ ๋ฐ๋ณต์ ์ธ ์ฝ๋์ ์์ฑ์ ์ค์ผ ์ ์๋ค.
์ฑ๋ฅ์ด ์ข๋ค. (๊ฐ์ ํธ๋ ์ญ์ ์์ ๊ฐ์ ์ํฐํฐ๋ฅผ ๋ฐํํด ํต์ ํ์๋ฅผ ์ค์ผ ์ ์๊ณ ๋ฉ๋ชจ๋ฆฌ์ ์๊ณ ํ ๋ฒ์ SQL์ ์ ์กํ๋ค.)
Hibernate
JPA๋ฅผ ๊ตฌํํ ๋ํ์ ์ธ ORM ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ ์ด๋ธ๊ณผ ์ํฐํฐ๋ฅผ ๋งคํํด์ฃผ๊ณ CRUD ๊ธฐ๋ฅ์ ๊ฐ์ฒด ์ค์ฌ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ์ ๊ณตํ๋ค.
โ Maven or Gradle
<!-- https://mvnrepository.com/artifact/org.hibernate/hibernate-core -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.14.Final</version>
</dependency>
compile("org.springframework.boot:spring-boot-starter-data-jpa")
โ ํ
์ด๋ธ๊ณผ ๋งคํ๋ Entity ํด๋์ค
javax.persistence ํ์์ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋ค.
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import lombok.Data;
import lombok.NoArgsConstructor;
@Entity
@Table(name = "user")
@Data
@NoArgsConstructor
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@Column
private String email;
}
์ฐธ๊ณ ์๋ฃ ๋ฐ ์ถ์ฒ ๐โ๏ธ
https://girawhale.tistory.com/119
[JPA] JPA๋? JPA๋ฅผ ์ฌ์ฉํ๋ ์ด์
์๋ฐ๋ JDBC API๋ฅผ ์ฌ์ฉํด SQL์ ๋ฐ์ดํฐ ๋ฒ ์ด์ค์ ์ ๋ฌํ๊ธฐ ๋๋ฌธ์ ์ค์ํ์ง๋ง SQL ์ค์ฌ์ ์ธ ๊ฐ๋ฐ์ ํ๊ฒ ๋๋ฉด ๋ง์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ๋ค. JPA Java persistence API๋ ์๋ฐ์ ORM ๊ธฐ์ ์ ํ์ค์ด๋ค ORMโ Object-Rela
girawhale.tistory.com
Hibernate : ์ค์ ํ๊ธฐ
0. Hibernate๋ Java JPA๋ฅผ ๊ตฌํํ ORM ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ค. 0-1 Object Relational Model์ 0-1-1 ๋ฐ์ดํฐ๋ฒ ์ด์ค์ Table๊ณผ Entity๋ฅผ ๋งคํํด ์ฃผ๊ณ 0-1-2 ์ฝ๊ธฐ, ์ฐ๊ธฐ, ์ ๋ฐ์ดํธ, ์ญ์ ๋ฑ์ ๊ธฐ๋ฅ์ ์ฝ๊ฒ ์ ๊ณตํ๋ค. 0-1-3..
kogle.tistory.com
'๊ฐ๋ฐ > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring Boot ํ๋ก์ ํธ git ์ฐ๋ (0) | 2022.03.09 |
---|---|
Spring Boot์ MySQL / Mybatis ์ฐ๊ฒฐํ๊ธฐ (0) | 2022.03.09 |
Spring Boot ํ๋ก์ ํธ ์์ฑํ๊ธฐ (0) | 2022.03.08 |
Spring Security (0) | 2022.03.07 |
WAS ๋์๊ณผ์ / ์๋ธ๋ฆฟ(Servlet) / Servlet ๊ตฌํ / ์๋ธ๋ฆฟ ์ปจํ ์ด๋ (0) | 2022.01.24 |
๋๊ธ