๐ŸŒ WEB/JPA

1. ์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ฐ„๋‹จํ•œ ์‹ค์Šต

์• ์ •์“ฐ 2021. 5. 13. 10:01

์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ–ˆ์„ ๋•Œ ์ €์žฅ์ด ๋ ๊นŒ?

์—๋Ÿฌ๊ฐ€ ์ƒ๊ธด๋‹ค. ์™œ๋ƒํ•˜๋ฉด JPA๋Š” ํŠธ๋ Œ์ ์…˜์ด๋Š” ๋‹จ์œ„๊ฐ€ ๋งค์šฐ ์ค‘์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์— JPA์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์€ ํŠธ๋ Œ์ ์…˜ ์•ˆ์—์„œ ์ด๋ฃจ์–ด์ ธ์•ผ ํ•œ๋‹ค.

    EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
    EntityManager em = emf.createEntityManager();

    Member member = new Member();
    member.setId(1L);
    member.setName("AE");

    em.persist(member);

    em.close();
    emf.close();

ํŠธ๋ Œ์ ์…˜์„ ์ถ”๊ฐ€ํ•œ ์ฝ”๋“œ

EntityManagerFactory emf = Persistence.createEntityManagerFactory("hello");
    EntityManager em = emf.createEntityManager();

    EntityTransaction tx = em.getTransaction();
    tx.begin();
    try {

      Member member = new Member();
      member.setId(2L);
      member.setName("JE");
      em.persist(member);

      tx.commit();
    } catch (Exception e) {
      tx.rollback();
    } finally {
      em.close();
    }
    emf.close();
  }

 

์—…๋ฐ์ดํŠธํ•  ๊ฒฝ์šฐ์—๋„ ์ €์žฅ์„ ํ•ด์•ผํ• ๊นŒ?

 

์•„๋ž˜์™€ ๊ฐ™์ด persist๋Š” ํ•˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค ์™œ๋ƒํ•˜๋ฉด JPA๋ฅผ ํ†ตํ•ด์„œ Entity๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ค๋ฉด JPA๊ฐ€ ๊ด€๋ฆฌํ•˜๋ฉด์„œ ๋ณ€๊ฒฝ์ด ๋˜์—ˆ๋Š”์ง€ ํŠธ๋ Œ์ ์…˜์„ ์ปค๋ฐ‹ํ•˜๋Š” ์‹œ์ ์„ ๋‹ค ์ฒดํฌ ํ•˜์—ฌ ๋ณ€๊ฒฝ๋˜์—ˆ์„ ๋•Œ ์—…๋ฐ์ดํŠธ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

	Member member = em.find(Member.class, 1L);
	member.setName("HELLO");
	tx.commit();

 

EntityManager ์‚ฌ์šฉ ์ฃผ์˜!

์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ € ํŒฉํ† ๋ฆฌ๋Š” ํ•˜๋‚˜๋งŒ ์ƒ์„ฑํ•ด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ „์ฒด์—์„œ ๊ณต์œ ํ•œ๋‹ค.

์—”ํ‹ฐํ‹ฐ ๋งค๋‹ˆ์ €๋Š” ์“ฐ๋ ˆ๋“œ๊ฐ„์— ๊ณต์œ ํ•˜์ง€ ์•Š๋Š”๋‹ค -> close()๋กœ ๊ณ„์† ๋‹ซ์•„์ฃผ์–ด์•ผ ํ•œ๋‹ค. ( ์š”์ฒญ์ด ์˜ฌ๋•Œ๋งˆ๋‹ค ์“ฐ๊ณ  ๋ฒ„๋ฆฌ๊ณ ๋ฅผ ๋ฐ˜๋ณต )

JPA์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ๋ณ€๊ฒฝ์€ ํŠธ๋ Œ์ ์…˜ ์•ˆ์—์„œ ์‹คํ–‰ํ•ด์•ผ ํ•œ๋‹ค.

 

JPQL

JPA๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ์ค‘์‹ฌ์œผ๋กœ ๊ฐœ๋ฐœํ•œ๋‹ค.

๋ฌธ์ œ๋Š” ๊ฒ€์ƒ‰ ์ฟผ๋ฆฌ์ธ๋ฐ ๋ชจ๋“  DB ๋ฐ์ดํ„ฐ๋ฅผ ๊ฐ์ฒด๋กœ ๋ณ€ํ™˜ํ•ด์„œ ๊ฒ€์ƒ‰ํ•˜๋Š” ๊ฒƒ์€ ๋ถˆ๊ฐ€๋Šฅํ•˜๋‹ค.

์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋งŒ DB์—์„œ ๋ถˆ๋Ÿฌ์˜ค๋ ค๋ฉด ๊ฒฐ๊ตญ ๊ฒ€์ƒ‰ ์กฐ๊ฑด์ด ํฌํ•จ๋œ SQL์ด ํ•„์š”ํ•˜๋‹ค.

๊ทธ๋Ÿฌ๋ฏ€๋กœ JPQL์ด๋ผ๋Š” ๊ฐ์ฒด ์ฟผ๋ฆฌ ์–ธ์–ด๋ฅผ ์ œ๊ณตํ•œ๋‹ค. GROUP BY, HAVING, JOIN ๋“ฑ ์ง€์› ํ•˜๊ณ , ์—”ํ‹ฐํ‹ฐ ๊ฐ์ฒด๋ฅผ ๋Œ€์ƒ์œผ๋กœ ์ฟผ๋ฆฌํ•œ๋‹ค.

์•„๋ž˜์™€ ๊ฐ™์ด ์‚ฌ์šฉํ•˜๋Š”๊ฒƒ์ด JPQL์ธ๋ฐ DB๋ฐฉ์–ธ์„(MySql, Oracle ๋“ฑ) ๋ณ€๊ฒฝํ•˜๋ฉด ์ฟผ๋ฆฌ๋ฌธ๋ฒ•๋„ ์ž๋™์œผ๋กœ ๋ณ€๊ฒฝ๋˜์–ด ์‹คํ–‰๋œ๋‹ค.

List<Member> result = em.createQuery("select m from Member m", Member.class)
	.setFirstResult(5)
	.setMaxResults(8)
	.getResultList();

 

 

 

๋ฐ˜์‘ํ˜•