JAVA/JPA
[JPAκ°μ] 1-2) JPA μκ°
λ°°κ³ νμ
2022. 8. 16. 20:07
728x90
π JPA ?
- Java Persistence API
- μλ° μ§μμ ORM κΈ°μ νμ€
- ORM?
- Object-relational mapping(κ°μ²΄ κ΄κ³ λ§€ν)
- κ°μ²΄λ κ°μ²΄λλ‘ μ€κ³
- κ΄κ³ν λ°μ΄ν°λ² μ΄μ€λ κ΄κ³ν λ°μ΄ν°λ² μ΄μ€λλ‘ μ€κ³
- ORM νλ μμν¬κ° μ€κ°μμ λ§€ν
- λμ€μ μΈ μΈμ΄μλ λλΆλΆ ORM κΈ°μ μ΄ μ‘΄μ¬ν¨.
- ORM?
- JPA λ νμ€λͺ μΈ
- JPA λ μΈν°νμ΄μ€μ λͺ¨μ.
- JPAλ μ ν리μΌμ΄μ κ³Ό JDBC μ¬μ΄μμ λμν¨.
- JPAμ μμ¬?
- "EJB (μν°ν° λΉ (μλ°νμ€))" μμ μμ --> λκ΅°κ°κ° λΆνΈν΄μ λ§λ κ²μ΄ "νμ΄λ²λ€μ΄νΈ" (μ΄κ±΄ μ€νμμ€.) --> μ΄ νμ΄λ²λ€μ΄νΈλ₯Ό λ³΄λ€ λ€λ¬μ΄μ λ§λ κ²μ΄ νμ¬μ "JPA"
π JPAλ₯Ό μ μ¬μ©ν΄μΌ νλ μ§ ?
- 1. SQL μ€μ¬μ μΈ κ°λ° -> κ°μ²΄ μ€μ¬μΌλ‘ κ°λ°
- 2. μμ°μ± _ JPAμ CRUD
- μ μ₯ : jpa.persist(member);
- μ‘°ν : Member member = jpa.find(memberId);
- μμ : member.setName("λ³κ²½ν μ΄λ¦");
- μμ : jpa.remove(member);
- JPAκ° μλ° μ»¬λ μ μ μ΄μ©νλ κ² κ°μ΄. κ·Έ κ³Όμ μ λ€ ν΄μ£Όκ³ , DBμ μ μ₯ν΄μ£Όλ μΌμ ν¨.
- 3. μ μ§λ³΄μ
- λ§μ½ 컬λΌμ΄ μΆκ° λλ€λ©΄,
- κΈ°μ‘΄ JDBCμ κ²½μ°,
public Class Member{
String id;
String name;
String email;
}
Insert문
INSERT INTO MEMBER (ID, NAME, EMAIL)
VALUES('gloria', 'κΈλ‘리μ', 'gloria94682015@tistory.com');
SELECT문
SELECT ID, NAME, EMAIL
FROM MEMBER;
μ€ν μ§μ μ TELμ λ£μ΄λ¬λΌκ³ νλ©΄?
public Class Member{
String id;
String name;
String email;
// μ€ν μ§μ μ tel μ μΆκ° ν΄λ¬λΌκ³ νλ©΄?
String tel;
}
Insert문
INSERT INTO MEMBER (ID, NAME, EMAIL, TEL)
VALUES('gloria', 'κΈλ‘리μ', 'gloria94682015@tistory.com', '010123456789');
SELECT문
SELECT ID, NAME, EMAIL, TEL
FROM MEMBER;
-
- μ€ν μ§μ μ TELμ΄ λ€μ΄κ°μΌνλ λͺ¨λ 쿼리λ₯Ό μ λΆ λ€ μμ ν΄μ€μΌν¨.
- JPA μ κ²½μ°
public Class Member{
private String id;
private String email;
// μ€ν μ§μ μ tel μ μΆκ° ν΄λ¬λΌκ³ νλ©΄?
private String tel; // κ·Έλ₯ νλλ§ μΆκ°ν΄μ£Όλ©΄ λ¨.,
}
-
- μ΄λ κ² νλλ§ μΆκ°νλ©΄ λ¨, SQL μ JPA κ° μμμ μ²λ¦¬ν΄μ€λ€.
- 4. ν¨λ¬λ€μμ λΆμΌμΉ ν΄κ²°
- JPAμ μμ
-
- https://gloria94682015.tistory.com/74 미리 곡λΆν λ΄μ©,
- JPA κ° μμμ INSERT INTO ELECS μ INSERT INTO CELLPHONE μΌλ‘ λλ μ 쿼리λ₯Ό λλ¦Ό.
-
- JPAμ μ°κ΄κ΄κ³
//JPAμ μ°κ΄κ΄κ³
member.setTeam(team);
jpa.persist(member);
-
- JPAμ κ°μ²΄ κ·Έλν νμ
//JPAμ κ°μ²΄ κ·Έλν νμ
Member member = jpa.find(Member.class, memberId);
Team team = member.getTeam();
-
- μν°ν°λ₯Ό μ λ’°ν μ μλ€.
- μ΄μ : JPA λ "μ§μ°λ‘λ©" μ΄λΌλ κΈ°λ₯μ΄ μμ.
- member.getTeam() μ΄λ member.getOrder().getDelivery() λ₯Ό ν΄μ
- μ€μ λ‘ μ΄ κ°μ²΄λ₯Ό μ‘°νν΄μ μ¬μ©νλ μμ μ μΏΌλ¦¬κ° λμμ κ°μ²΄μ μ±μμ§.
- μν°ν°λ₯Ό μ λ’°ν μ μλ€.
// JPA λ₯Ό μ¬μ©νλ©΄, μν°ν°λ₯Ό μ λ’°ν μ μμ.
class MemberService {
public void process(){
Member member = memberDAO.find(memberId);
member.getTeam(); // μμ λ‘κ² κ°μ²΄ κ·Έλνλ₯Ό νμν μ μμ.
member.getOrder().getDelivery();
}
}
-
- JPAμ λΉκ΅νκΈ°
- λμΌν νΈλμμ μμ μ‘°νν μν°ν°λ κ°μμ 보μ₯ν΄μ€.
- JPAμ λΉκ΅νκΈ°
- 6. μ±λ₯ μ΅μ ν κΈ°λ₯
- 1) 1μ°¨ μΊμμ λμΌμ± 보μ₯
- 1οΈβ£ κ°μ νΈλμμ μμμλ κ°μ μν°ν°λ₯Ό λ°νν¨. --> ( μ½κ°μ μ‘°ν μ±λ₯ ν₯μ )
- 2οΈβ£ DB Isolation Level μ΄ Read Commit μ΄μ΄λ μ ν리μΌμ΄μ
μμ Repeatable Read 보μ₯.
- λκ° λκ² μ΄ν΄νκΈ° μ΄λ €μμ,,, μΌλ¨, 건λλ. γ γ ;;...
- 1) 1μ°¨ μΊμμ λμΌμ± 보μ₯
String memberId = "100";
Member m1 = jpa.find(Member.class, memberId); // SQL
Member m2 = jpa.find(Member.class, memberId); // μΊμ
// m1 == m2
// SQL μ 1λ²λ§ μ€νν¨.
- μ΄ λμ μΊμλ, κΈ°μ‘΄μ μκ³ μλ μΊμμλ μ’ λ€λ¦.
- ν νΈλμ μ μ μμ ~ λ μ¬μ΄μμ λμΌμ±μ 보μ₯νλ κ²μΌλ‘, μμ£Ό μ§§μ μΊμ μ²λ¦¬.
- 2) νΈλμμ
μ μ§μνλ μ°κΈ° μ§μ° - INSERT
- 1οΈβ£ νΈλμμ μ 컀λ°ν λκΉμ§ INSERT SQL μ λͺ¨μ.
- 2οΈβ£ JDBC BATCH SQL κΈ°λ₯μ μ¬μ©ν΄μ νλ²μ SQL μ μ‘.
- μ΅μ νλλ§ μΌμ£Όκ² λλ©΄, νΈνκ² κ°λ₯.
transaction.begin(); // νΈλμ μ
μμ.
em.persist(memberA);
em.persist(memberB);
em.persist(memberC);
//persistλ‘ μ μ₯μ νλ€κ³ ν΄λ, λ°λ‘ INSERT SQL μ DBμ 보λ΄μ§ μμ.
// 컀λ°μ νλ μκ°, μμλμλ INSERT SQLμ DBμ λͺ¨μμ 보λ.
transaction.commit(); // νΈλμ μ
컀λ°.
-
- 2) νΈλμμ
μ μ§μνλ μ°κΈ° μ§μ° - UPDATE
- 1οΈβ£ UPDATE, DELETE λ‘ μΈν λ‘μ°(ROW)λ½ μκ° μ΅μν
- 2οΈβ£ νΈλμ μ μ»€λ° μ UPDATE, DELETE SQL μ€ννκ³ , λ°λ‘ 컀λ°.
- LOCK ?
- λ°μ΄ν°μ μΌκ΄μ±μ 보μ₯νκΈ° μν λ°©λ².
- ROW LOCK ?
- ν μμ€μ λ½μ 1κ°μ νμ κΈ°μ€μΌλ‘ λ½ μ€μ μ ν¨.
- DMLμ λν λ½μΌλ‘ κ°μ₯ μΌλ°μ μΌλ‘ μ¬μ©νλ λ½μ΄λΌκ³ ν¨.
- 2) νΈλμμ
μ μ§μνλ μ°κΈ° μ§μ° - UPDATE
transaction.begin(); // νΈλμ μ
μμ.
changeMember(memberA);
deleteMember(memberB);
λΉμ¦λμ€ λ‘μ§ μν(); // λΉμ¦λμ€ λ‘μ§ μν λμ DB λ‘μ° λ½μ΄ κ±Έλ¦¬μ§ μμ.
//persistλ‘ μ μ₯μ νλ€κ³ ν΄λ, λ°λ‘ INSERT SQL μ DBμ 보λ΄μ§ μμ.
// 컀λ°μ νλ μκ°, μμλμλ UPDATE, DELETE SQLμ DBμ λͺ¨μμ 보λ.
transaction.commit(); // νΈλμ μ
컀λ°.
-
- 3) μ§μ°λ‘λ©
- μ§μ° λ‘λ© : κ°μ²΄κ° μ€μ μ¬μ©λ λ λ‘λ©.
- μ¦μ λ‘λ© : JOIN SQL λ‘ νλ²μ μ°κ΄λ κ°μ²΄κΉμ§ 미리 μ‘°ν.
- JPA μ μ΅μ μ΄ μμ. λ©€λ²λ₯Ό κ°μ Έμ¬ λ, λλΆλΆ νμ κ°μ Έμ¨λ€κ³ νλ©΄ μ¦μ λ‘λ©μ΄ μ 리νλκΉ,
- μ΅μ μ μ£Όλ©΄ λ¨.
- 3) μ§μ°λ‘λ©
// μ§μ°λ‘λ©
Member member = memberDAO.find(memberId); // select * from member
Team team = member.getTeam();
String teamName = team.getName(); // select * from team
// μ¦μ λ‘λ©
Member member = memberDAO.find(memberId); // select m.*, t.* from member join team on m.teamId = t.id
Team team = member.getTeam();
String teamName = team.getName();
- 7. λ°μ΄ν° μ κ·Ό μΆμνμ λ²€λ λ 립μ±
- 8. νμ€
π ?
- γ γ
κ°λ° 곡λΆλ₯Ό μν λΈλ‘κ·Έ μ λλ€.
μ€λ₯κ° μλ€λ©΄ λκΈλ‘ μλ €μ£ΌμΈμ!
κ°μ¬ν©λλ€.

728x90