HyeLog

[๊น€์˜ํ•œ_์ž๋ฐ” ORM ํ‘œ์ค€ JPA ํ”„๋กœ๊ทธ๋ž˜๋ฐ - ๊ธฐ๋ณธํŽธ] 1. JPA ์‹œ์ž‘ํ•˜๊ธฐ(2) ๋ณธ๋ฌธ

์›น ๊ฐœ๋ฐœ/Spring Boot

[๊น€์˜ํ•œ_์ž๋ฐ” 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();