ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [JPA] JPA 사용하기
    JAVA/Spring(Springboot) 2021. 7. 11. 16:45
    728x90
    728x90

    JPA를 사용하면 DB쿼리를 작성하지 않아도 DB작업이 가능하다

    JPA를 사용하기 위한 작업을 알아보자

     

     

    1. build.gradle의 dependencies에 아래 코드를 추가한다

    dependencies {
    	implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    }

     

     

    2. application.properties에 아래 코드를 추가한다

    // jpa로 작성된 sql을 보여준다
    spring.jpa.show-sql=true
    
    // DB에 table이 이미 생성되어 있기 때문에 ddl-auto는 꺼준다
    spring.jpa.hibernate.ddl-auto=none

     

     

    3. Repository에서 사용하면 된다

    package hello.hellospring.repository;
    
    import hello.hellospring.domain.Member;
    
    import javax.persistence.EntityManager;
    import java.util.List;
    import java.util.Optional;
    
    public class JpaMemberRepository implements MemberRepository{
    
        // 스프링부트가 EntityManager를 생성해준다
        private final EntityManager em;
    
        public JpaMemberRepository(EntityManager em) {
            this.em = em;
        }
    
        @Override
        public Member save(Member member) {
            em.persist(member);
            return member;
        }
    
        @Override
        public Optional<Member> findById(Long id) {
            // pk인 경우는 바로 find가 가능하다
            Member member = em.find(Member.class, id);
            return Optional.ofNullable(member);
        }
    
        @Override
        public Optional<Member> findByName(String name) {
            // pk가 아닌 경우는 createQuery 과정이 필요하다
            List<Member> result = em.createQuery("select m from Member m where m.name = :name", Member.class)
                    .setParameter("name", name).getResultList();
            return result.stream().findAny();
        }
    
        @Override
        public List<Member> findAll() {
            return em.createQuery("select m from Member m", Member.class)
                    .getResultList();
        }
    }

     

     

    4. StringConfig에서 EntityManager를 생성하고 Service에 적용한다

    package hello.hellospring;
    
    import hello.hellospring.repository.*;
    import hello.hellospring.service.MemberService;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    
    import javax.persistence.EntityManager;
    
    @Configuration
    public class StringConfig {
    
        private EntityManager em;
    
        @Autowired
        public StringConfig(EntityManager em) {
            this.em = em;
        }
    
        @Bean
        public MemberService memberService() {
            return new MemberService(memberRepository());
        }
    
        @Bean
        public MemberRepository memberRepository() {
            return new JpaMemberRepository(em);
        }
    }
    728x90
    728x90
Designed by Tistory.