HyeLog
[๊น์ํ_์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ] 1. JPA ์์ํ๊ธฐ(2) ๋ณธ๋ฌธ
[๊น์ํ_์๋ฐ ORM ํ์ค JPA ํ๋ก๊ทธ๋๋ฐ - ๊ธฐ๋ณธํธ] 1. JPA ์์ํ๊ธฐ(2)
shj718 2022. 6. 7. 18:44๐ฟ Member ํ ์ด๋ธ ์์ฑ
๐ฟ Member ํด๋์ค ์์ฑ
Member ํ ์ด๋ธ๊ณผ ์์ํ๋ ํด๋์ค๋ฅผ ์์ฑํ๋ค. @Id ์ด๋ ธํ ์ด์ ์ PK๊ฐ์ ๋ํ๋ธ๋ค.
getter์ setter๋ ๋ง๋ค์ด์ฃผ์.
package hellojpa;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Member {
@Id
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;
}
}
๐ฟ ํ์ ๋ฑ๋ก
JPA์ ๋ชจ๋ ๋ฐ์ดํฐ ๋ณ๊ฒฝ์ ํธ๋์ญ์ ์์์ ์คํ๋์ด์ผ ํ๋ค.
์๋ ์ฝ๋์์ EntityTransaction ์์ด persist ํจ์๋ฅผ ์ฌ์ฉํ๋ ๊ฑด ๋ถ๊ฐ๋ฅํ๋ค.
package hellojpa;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Persistence;
public class JpaMain {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello"); // ์ ํ๋ฆฌ์ผ์ด์
๋ก๋ฉ ์์ ์ ๋ฑ 1๊ฐ
EntityManager entityManager = emf.createEntityManager(); // ์ผ๋ จ์ DB ์์
์ ํ ๋๋ง๋ค ์์ฑ (Ex. ์ฅ๋ฐ๊ตฌ๋์ ๋ฌผ๊ฑด ์ถ๊ฐ)
// ํธ๋์ญ์
ํ์
EntityTransaction transaction = entityManager.getTransaction();
transaction.begin();
// DB ์์
(๋ฐ์ดํฐ ์ ์ฅ ๋ฑ)
try {
Member member = new Member();
member.setId(1L);
member.setName("HelloA");
entityManager.persist(member); // ๋ฐ์ดํฐ ์ ์ฅ
// ์ปค๋ฐ
transaction.commit();
} catch (Exception e) {
transaction.rollback();
} finally {
entityManager.close(); // ํญ์ ์ ๋ซ์์ฃผ๊ธฐ (DB ์ปค๋ฅ์
์ ๋ฌผ๊ณ ์์)
}
emf.close();
}
}
๊ฒฐ๊ณผ)
H2 ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ ์ฅ๋์๋ค!
๐ฟ ํ์ 1๋ช ์กฐํ
find([ํด๋์ค๋ช ], [PK๊ฐ])
Member findMember = entityManager.find(Member.class, 1L);
๐ฟ ํ์ ์ญ์
Member findMember = entityManager.find(Member.class, 1L);
entityManager.remove(findMember);
๐ฟ ํ์ ์์
๋ฐ๋ก ์ ์ฅํ๋ ์ฝ๋๊ฐ ์์ด๋ ๊ฐ์ฒด์ setํ๋ฉด ์๋์ผ๋ก UPDATE ์ฟผ๋ฆฌ๊ฐ ์คํ๋๋ค.
Member findMember = entityManager.find(Member.class, 1L);
findMember.setName("HelloJPA");
๊ฒฐ๊ณผ)
๐ฟ ํน์ ์กฐ๊ฑด์ ๋ง์กฑํ๋ ํ์(๋ค) ์กฐํ
์ฟผ๋ฆฌ๋ฌธ์ผ๋ก ์กฐ๊ฑด์ ๋ง๋ค๊ณ ์ถ์ผ๋ฉด, JPQL์ ์ฌ์ฉํ๋ค. JPQL์ SQL๊ณผ ๋ฌธ๋ฒ์ด ์ ์ฌํด์ SELECT, FROM, WHERE, GROUP BY, HAVING, JOIN ์ ์ง์ํ๋ค.
์ฐ์ ์ ์กฐ๊ฑด ์์ด ํ ์ด๋ธ์ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์กฐํํด๋ณด์.
List<Member> members = entityManager.createQuery("select m from Member as m", Member.class)
.getResultList();
JPQL์ SQL๊ณผ ๋น์ทํด๋ณด์ด์ง๋ง ๋ค๋ฅด๋ค. ๊ฐ์ฒด ๊ด์ ์์ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฆฐ๋ค.
print๋ฌธ์ผ๋ก ํ์ธํด๋ณด๋ฉด, ๋ชจ๋ row๊ฐ select๋์๋ค.
List<Member> members = entityManager.createQuery("select m from Member as m", Member.class)
.getResultList();
for(Member member : members) { // ํ๋ฆฐํธ
System.out.println("member.name = " + member.getName());
}
์กฐ๊ฑด์ ์ถ๊ฐํ๋ ค๋ฉด MySQL๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก where์ ์ ์ฌ์ฉํ๋ฉด ๋๋ค.
List<Member> members = entityManager.createQuery("select m from Member as m where m.id < 3L", Member.class)
.getResultList();
JPQL์ ๋ฐ์ดํฐ๋ฒ ์ด์ค SQL์ ์์กดํ์ง ์๋๋ค. MySQL / Oracle ๋ฑ ์ค์ ํ๋๋๋ก ์์์ ํด๋น ๋ฌธ๋ฒ์ ์ฟผ๋ฆฌ๋ฌธ์ ์์ฑํ๋ค.
๐ฟ ์กฐํ์ ํ์ด์ง ์ฒ๋ฆฌ
setFirstResult: OFFSET๊ฐ (์์์์น → 0๋ถํฐ ์์)
setMaxResults: ๊ฐ์ ธ์ฌ ๋ฐ์ดํฐ ๊ฐ์ (MySQL์ LIMIT์ฒ๋ผ ๋ฐ์ดํฐ ๊ฐ์๊ฐ ๊ทธ๊ฒ๋ณด๋ค ์ ์ผ๋ฉด ์ ๋ถ ๊ฐ์ ธ์จ๋ค.)
List<Member> members = entityManager.createQuery("select m from Member as m", Member.class)
.setFirstResult(2)
.setMaxResults(5)
.getResultList();