๋ฐ์ํ
JPA
Java Persistence API
- ๊ธฐ์กด์ ๋ฐ๋ณต ์ฝ๋๋ฟ ์๋๋ผ SQL ์ฟผ๋ฆฌ๊น์ง JPA๊ฐ ์ง์ ๋ง๋ค์ด ์คํํด์ค๋ค.
- SQL๊ณผ ๋ฐ์ดํฐ ์ค์ฌ์ ์ค๊ณ → ๊ฐ์ฒด ์ค์ฌ์ ์ค๊ณ๋ก ํจ๋ฌ๋ค์์ ์ ํ.
- ORM Object Relational Mappping. ๊ฐ์ฒด์ ๋งคํํ๋ ๊ธฐ์ ์ด๋ค.
- ๊น์ํ ๊ฐ์ฌ๋๊ป์ JPA ์ฑ
์ ๋ฐ๊ฐํ ์ดํ๋ก ์ฐ๋ฆฌ ๋๋ผ์๋ ๋ณด๊ธ์ด ๋ง์ด ๋ ์ถ์ธ๋ค.
ํ๊ฒฝ์ค์
- build.gradle
- implementation 'org.springframework.boot:spring-boot-starter-data-jpa' ์ถ๊ฐ.
- jdbc ์ญ์ .
- ์ถ๊ฐํ๋ฉด gradle์ jpa์ hibernate๊ฐ ์ถ๊ฐ๋ ๊ฒ ํ์ธ๋๋ค.
๐ jpa๋ ์ธํฐํ์ด์ค๊ณ hibernate๋ ๊ตฌํ ํด๋์ค ์ด๋ค.
- application.properties
- spring.jpa.show-sql=true
jpa๊ฐ ๋ง๋๋ sql์ ๋ณด์ฌ์ค๋ค. - spring.jpa.hibernate.ddl-auto=none
jpa๊ฐ ํ ์ด๋ธ์ ๋ง๋ค๊ธฐ๋ ํ๋๋ฐ none์ผ๋ก ํ๋ฉด ๋ง๋ค์ง ์๋๋ค.
create ์ jpa๊ฐ ํ ์ด๋ธ์ ๋ง๋ ๋ค.
- spring.jpa.show-sql=true
์ฌ์ฉ๋ฒ
- domain
- @Entity
→ JPA๊ฐ ๊ด๋ฆฌํ๋ ์ํฐํฐ๊ฐ ๋๋ค. - @Id
→ PK. ๊ธฐ๋ณธํค๋ก ์ค์ . - @GeneratedValue(strategy =GenerationType.IDENTITY)
→ DB๊ฐ ์์์ ์์ฑํด์ฃผ๋ ๋ฐ์ดํฐ๋ฅผ IDENTITY๋ผ๊ณ ํ๋ค. - @Column(name = "username")
→ ๋ง์ฝ์ DB์ ์ปฌ๋ผ๋ช ์ด username์ด๋ฉด ์ด๋ฐ ์์ผ๋ก ์ ์ด์ค๋ค.
(์ง๊ธ ์ค์ ๊ณต๋ถ์ค์ด ์ค์ DB๋ ์ด๋ฆ์ด ๊ฐ๊ธฐ ๋๋ฌธ์ ์ ์ ํ์๊ฐ ์๋ค.) - ์ ์ฒด์ฝ๋
๋๋ณด๊ธฐ
package hello.hellospring.domain; import jakarta.persistence.Column; import jakarta.persistence.Entity; import jakarta.persistence.GeneratedValue; import jakarta.persistence.GenerationType; import jakarta.persistence.Id; @Entity public class Member { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String name; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } }
- @Entity
- repository
- em.createQuery( : ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ญ๋๋ค.
- "select m from Member m"
Meber as m → Member m ์ด๋ผ ์ ์ ๊ฒ๋๋ค. ํ ์ด๋ธ์ ์กฐํํ๊ณ select m ํ ์ด๋ธ์ ์กฐํํฉ๋๋ค. - Member ์ํฐํฐ ๊ฐ์ฒด๋ฅผ ํฅํด ์ฟผ๋ฆฌ๋ฅผ ๋ณด๋ด๋ ๋ฐฉ์์ด๋ค.
- em.createQuery( : ์ฟผ๋ฆฌ๋ฅผ ๋ง๋ญ๋๋ค.
- EntityManager
- jpa๋ฅผ DI, ์์กด์ฑ ์ฃผ์
ํ๋ ์ฝ๋๋ค.
- jpa๋ EntityManager๋ก ๋ชจ๋ ๊ฒ ๋์ํ๋ค.
- ์คํ๋ง๋ถํธ์ jpa๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ถ๊ฐ๋๋ฉด ์๋์ผ๋ก EntityManager๋ฅผ ์์ฑํ๋ค.
- jpa ๋ด๋ถ์ ์ผ๋ก ๋ฐ์ดํฐ์์ค๋ฅผ ๋ชจ๋ ๊ฐ์ง๊ณ ์๋ค.
- jpa๋ฅผ DI, ์์กด์ฑ ์ฃผ์
ํ๋ ์ฝ๋๋ค.
- ์ ์ฅ & id๋ก ํ์ ์ฐพ๊ธฐ
- ์ ์ฅ : em.persist(member);
- ์กฐํ : em.find(Member.class, id);
- id๋ฅผ ์ด์ฉํด ์กฐํ/์ ์ฅํ๋ ๊ฒฝ์ฐ์๋ ์ด์ ๊ฐ์ด ๊ฐ๋จํฉ๋๋ค.
- ์ ์ฅ : em.persist(member);
- ๋ชจ๋ ํ์ ์ฐพ๊ธฐ
- ์ด๋ฆ์ผ๋ก ํ์ ์ฐพ๊ธฐ
- where m.name = :name
→ jdbc์ ?๋์ ์ ๋ ฅํ ๊ฐ์ ์ด๋ฆ์ ์ ์ด์ค๋ค. - setParameter
→ ์ ํ๋ผ๋ฏธํฐ์ ๊ฐ์ ๋ด์์ค๋ค.
- where m.name = :name
- ์ ์ฒด์ฝ๋
๋๋ณด๊ธฐ
package hello.hellospring.repository; import java.util.List; import java.util.Optional; import hello.hellospring.domain.Member; import jakarta.persistence.EntityManager; public class JpaMemberRepository implements MemberRepository { private final EntityManager em; public JpaMemberRepository(EntityManager em) { this.em = em; } @Override public Member save(Member member) { em.persist(member); return member; } @Override public Optional<Member> findById(Long id) { Member member = em.find(Member.class, id); return Optional.ofNullable(member); } @Override public Optional<Member> findByName(String name) { List<Member> result= em.createQuery("select m from Member m where m.name = :name" , Member.class) .setParameter("name", name) .getResultList(); return result.stream().findAny(); } @Override public List<Member> findAll() { return em.createQuery("select m from Member m", Member.class) .getResultList(); } }
- config
- EntityManager๋ฅผ DI ์์ฑ์ ์ฃผ์
ํ์์ผ๋ก ๋ถ๋ฌ์จ๋ค.
private EntityManager em; public SpringConfig(EntityManager em) { this.em = em; }
- return new JpaMemberRepository(em);
→ ๋ฆฌํฌ์งํ ๋ฆฌ ๋น ์ฐ๊ฒฐ์ jpa๋ฆฌํฌ์งํ ๋ฆฌ๋ก ๋ฐ๊ฟ์ค๋ค.
ํ ์คํธํด๋ณด๋ฉด CONSOLE์ JPA์ ๊ตฌํ์ฒด Hibernate๊ฐ ์ฟผ๋ฆฌ๋ฅผ ์คํํ ๊ฒฐ๊ณผ๊ฐ ๋ณด์ธ๋ค.
โป ์ค๋ฌด์์ JPA๋ฅผ ์ฌ์ฉํ ์ ์๋ ์๊ตฌ์ฌ์ด ๋ค ์๋ ์์ง๋ง, ํด์ธ์์๋ ์ํ์์๋ ์ฌ์ฉํ๋ค. ํ์ฌ๋ ํ๊ตญ์ ํฐ ๊ธฐ์ ๋ค๋ ์ฌ์ฉํ๋ ์ถ์ธ์ด๋ค.
โป ์ฐธ์กฐ : https://www.inflearn.com/roadmaps/373
๋ฐ์ํ
'๐ Spring > ๐ Spring Boot' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SpringBoot]AOP ์ ๋ฌธ-์ค๋ช ๊ณผ ์ฌ์ฉ๋ฒ (0) | 2025.01.10 |
---|---|
[SpringBoot][Gradle]์คํ๋ง ๋ฐ์ดํฐ JPA. ์ค์ ๋ถํฐ ์ฌ์ฉ๊น์ง ์ ๋ฌธํธ. (0) | 2025.01.10 |
[SpringBoot]DB์ ๊ทผ๊ธฐ์ -JdbcTemplate (0) | 2025.01.09 |
[SpringBoot]์คํ๋ง ํตํฉํ ์คํธ (0) | 2025.01.08 |
[SpringBoot][Gradle]DB์ ๊ทผ๊ธฐ์ -์์JDBC (0) | 2025.01.08 |