๊ด€๋ฆฌ ๋ฉ”๋‰ด

C-log

6week ๋ณธ๋ฌธ

๐Ÿ“•JAVA/Spring

6week

4:Bee 2024. 4. 21. 19:48
728x90

DAO(Data Access Object)

Config

Spring JDBC๋ฅผ JPA/Hibernate๋กœ ๋Œ€์ฒดํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช… ํ•  ๊ฒƒ์ด๋‹ค. pom.xml์—์„œ ์•„๋ž˜์™€ ๊ฐ™์ด Maven์„ ์ถ”๊ฐ€ํ•˜๋ฉด ๋œ๋‹ค.

<dependency>
     <groupId>org.springframework</groupId>
     <artifactId>spring-orm</artifactId>
     <version>${org.springframework-version}</version>
</dependency>

<dependency>
     <groupId>javax.persistence</groupId>
     <artifactId>javax.persistence-api</artifactId>
     <version>2.2</version>
</dependency>

<dependency>
     <groupId>org.hibernate</groupId>
     <artifactId>hibernate-core</artifactId>
     <version>5.6.15.Final</version>
</dependency>

JPA์— ๋งž๊ฒŒ dao-context.xml ์ถ”๊ฐ€ ๋ฐ ๋ณ€๊ฒฝํžˆ๊ธฐ

์•„๋ž˜ ์ฝ”๋“œ๋Š” Spring์—์„œ JPA(Java Persistence API)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ํŠธ๋žœ์žญ์…˜ ๊ด€๋ฆฌ๋ฅผ ์„ค์ •ํ•œ๋‹ค. dao-context.xml์„ ์ˆ˜์ •ํ•ด๋ณด๋ฉด ์•„๋ž˜์™€ ๊ฐ™๋‹ค. ์ฐธ๊ณ ๋กœ dao-context.xml์€ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๋ ˆ์ด์–ด์˜ ์„ค์ •์„ ์ •์˜ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค.

 <bean id="transactionManager"
          class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
  </bean>

  <tx:annotation-driven />

<tx:annotation-driven>์€ @Transactional ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์„œ๋“œ๋‚˜ ํด๋ž˜์Šค์— ํŠธ๋žœ์žญ์…˜(ํŠธ๋žœ์žญ์…˜์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ์ˆ˜ํ–‰๋˜๋Š” ์ž‘์—…์˜ ๋‹จ์œ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.)์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ๊ฐœ๋ฐœ์ž๋Š” ํŠธ๋žœ์žญ์…˜์˜ ๋ฒ”์œ„์™€ ๊ด€๋ฆฌ ๋ฐฉ๋ฒ•์„ ๋”์šฑ ๋ช…ํ™•ํ•˜๊ฒŒ ํ‘œํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์ผ๋ฐ˜์ ์œผ๋กœ ์„œ๋น„์Šค ๊ณ„์ธต์ด๋‚˜ ๋ฐ์ดํ„ฐ ์•ก์„ธ์Šค ๊ณ„์ธต์—์„œ ์‚ฌ์šฉ๋˜๋ฉฐ ํŠน์ • ๋ฉ”์„œ๋“œ๊ฐ€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์ž‘์—…์„ ์›์ž์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๋„๋ก ๋ณด์žฅํ•œ๋‹ค.

Entity Class ๋งŒ๋“ค๊ธฐ

DB์— ์—ฐ๊ฒฐ๋˜์–ด ์žˆ๋Š” Entity table๊ณผ ์—ฐ๊ฒฐ์„ ํ•˜๋Š” ์—ญํ• ์„ ํ•˜๋Š” class ๋งŒ๋“ค์–ด ๋ณผ ๊ฒƒ์ด๋‹ค. ํ•ด๋‹น Entity class๋Š” Offer.java์— ์ถ”๊ฐ€๋ฅผ ํ•  ๊ฒƒ์ด๋‹ค. 

@Entity
@Table(name = "offers")

๋”ฐ๋ผ์„œ ํ˜„์žฌ offersํ…Œ์ด๋ธ”๊ณผ ์—ฐ๊ฒฐ์„ ํ•œ ๊ฒƒ์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฐ๊ฒฐ๋œ ํ…Œ์ด๋ธ”๋กœ ๋ถ€ํ„ฐ id๋ฅผ ๊ฐ€์ง€๊ณ  ์˜ฌ ๊ฒƒ์ด๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)

์ด๋ ‡๊ฒŒ id๋ฅผ ์ง€์ •ํ–ˆ์ง€๋งŒ ํ…Œ์ด๋ธ”์˜ column๋„ ์ง€์ •ํ•  ์ˆ˜ ์žˆ๋‹ค. @Column(name="id")์™€ ๊ฐ™์ด ์ž‘์„ฑํ•˜๋ฉด ๋˜์ง€๋งŒ ์ˆ˜์—…์—์„œ๋Š” ์ง์ ‘์ ์œผ๋กœ ์ž‘์„ฑํ•ด์„œ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋‹ˆ ํฌ๊ฒŒ ์œ ์˜ํ•  ํ•„์š”๋Š” ์—†์–ด ๋ณด์ธ๋‹ค.

DAO ๋งŒ๋“ค๊ธฐ

์šฐ๋ฆฌ๊ฐ€ JPA์— ๋งž๊ฒŒ ์ˆ˜์ • ํ–ˆ๋˜ ์ฝ”๋“œ์—์„œ <tx:annotation-driven>๋Š” @Transactional ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•˜์—ฌ ๋ฉ”์„œ๋“œ๋‚˜ ํด๋ž˜์Šค์— ํŠธ๋žœ์žญ์…˜์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›ํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค. ๋‹ค์‹œ ๋งํ•ด์„œ @Transactional ์–ด๋…ธํ…Œ์ด์…˜์ด ์žˆ๋Š” ์™ธ๋ถ€ ํด๋ž˜์Šค๋‚˜ ๋ฉ”์„œ๋“œ๋ฅผ ์ฐธ์กฐํ•œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค. ์•„๋ž˜ ์ฝ”๋“œ๋Š” @Transactional ์–ด๋…ธํ…Œ์ด์…˜์„ ์‚ฌ์šฉํ•ด์„œ dao-context.xml์˜ ์„ค์ •๋“ค์„ ์ฐธ์กฐํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

@Repository
@Transactional
public class OfferDao {

    @PersistenceContext
    private EntityManager entityManager;

    public Offer getOffer(String name) {
        return entityManager.createQuery("SELECT o FROM Offer o WHERE o.name = :name", Offer.class)
                .setParameter("name", name)
                .getSingleResult();
    }

    public Offer getOffer(int id) {
        return entityManager.find(Offer.class, id);
    }

    public List<Offer> getOffers() {
        return entityManager.createQuery("SELECT o FROM Offer o", Offer.class)
                .getResultList();
    }

๊ธฐ์กด์— ์žˆ๋˜ dao๋Š” JDBC๋ฅผ ๊ธฐ์ค€์œผ๋กœ ์ž‘์„ฑ๋˜์—ˆ์ง€๋งŒ ์œ„์˜ ์ฝ”๋“œ๋Š” JPA์— ๋งž๊ฒŒ ๋ณ€๊ฒฝ๋œ ์ฝ”๋“œ์ด๋‹ค.

์ดํ›„ ๋ฐ์ดํ„ฐ๋ฅผ CUD ์ฒ˜๋ฆฌ๋ฅผ ํ•  ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋Š” ์•„๋ž˜์™€ ๊ฐ™๋‹ค.

public void insert(Offer offer) {
        entityManager.persist(offer);
    }

    public void update(Offer offer) {
        entityManager.merge(offer);
    }

    public void delete(int id) {
        Offer offer = entityManager.find(Offer.class, id);
        entityManager.remove(offer);
    }

ManyToMany Unidirectional

ManyToMany Unidirectional์€ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์—์„œ ๋‹ค๋Œ€๋‹ค ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค. ์ด๋Š” ํ•œ ํ…Œ์ด๋ธ”์˜ ๊ฐ ํ–‰์ด ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ์—ฌ๋Ÿฌ ํ–‰๊ณผ ๊ด€๋ จ๋  ์ˆ˜ ์žˆ๊ณ  ๋ฐ˜๋Œ€๋กœ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ๊ฐ ํ–‰๋„ ์ฒซ ๋ฒˆ์งธ ํ…Œ์ด๋ธ”์˜ ์—ฌ๋Ÿฌ ํ–‰๊ณผ ๊ด€๋ จ๋  ์ˆ˜ ์žˆ๋Š” ๊ด€๊ณ„๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค. ManyToMany Unidirectional ๊ด€๊ณ„์—์„œ๋Š” ์ฃผ๋กœ ์—ฐ๊ฒฐ ํ…Œ์ด๋ธ”์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‘ ์—”ํ‹ฐํ‹ฐ ๊ฐ„์˜ ๊ด€๊ณ„๋ฅผ ์œ ์ง€ํ•œ๋‹ค. ๊ฐ ์—”ํ‹ฐํ‹ฐ๋Š” ์—ฐ๊ฒฐ ํ…Œ์ด๋ธ”์„ ํ†ตํ•ด ๋‹ค๋ฅธ ์—”ํ‹ฐํ‹ฐ์˜ ์—ฌ๋Ÿฌ ํ–‰์— ๋Œ€ํ•œ ์ฐธ์กฐ๋ฅผ ๊ฐ€์ง€๊ฒŒ ๋œ๋‹ค.

๋‹ค๋งŒ Unidirectional ๊ด€๊ณ„์—์„œ๋Š” ํ•œ ์—”ํ‹ฐํ‹ฐ๊ฐ€ ๋‹ค๋ฅธ ์—”ํ‹ฐํ‹ฐ๋ฅผ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ ์—ญ์€ ์„ฑ๋ฆฝํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ ํ•œ์ชฝ ๋ฐฉํ–ฅ์œผ๋กœ๋งŒ ๊ด€๊ณ„๊ฐ€ ์„ค์ •๋œ๋‹ค. ๋”ฐ๋ผ์„œ ํ•œ ์—”ํ‹ฐํ‹ฐ๋ฅผ ํ†ตํ•ด ๋‹ค๋ฅธ ์—”ํ‹ฐํ‹ฐ์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ๊ทธ ์—ญ์€ ๊ฐ€๋Šฅํ•˜์ง€ ์•Š๋‹ค.

728x90

'๐Ÿ“•JAVA > Spring' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

5week  (0) 2024.04.20
4week  (0) 2024.04.04
3week - MVC  (0) 2024.03.20
2week  (0) 2024.03.12
OT - 1week  (0) 2024.03.05
Comments