ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JPA 활용 (1) - 프로젝트 환경설정
    Web/JPA 2024. 1. 4. 14:24

     

    1. spring boot (build.gradle)

     

    > java 17버전

    > dependencies: spring-data-jpa, thymeleaf, validation,spring-web, h2

    > gradle은 의존관계 추가하면, 그 의존관계에 필요한 모든 의존관계 자동으로 끌어온다.

    > ./gradlew dependencies -configuration complieClasspath를 보면 의존관계 라이브러리 살펴볼 수 있음 

     

    * dependencies 추가하면서, version이 없는 것은 , plugins에 작성된 것은 

     

    2. H2 데이터 베이스 설치 

     

    > jdbc:h2:~/jspshop (최소한번) -> 한번 들어가줘야함 파일 모드로 들어가기 

    > ~/jpashop.mv.db -> 파일 생성 한번 확인

    > 이후로는 jdbc:h2:tcp://localhost/~/jpashop으로 접속

     

    spring:
     datasource:
     url: jdbc:h2:tcp://localhost/~/jpashop
     username: sa
     password:
     driver-class-name: org.h2.Driver
     jpa:
     hibernate:
     ddl-auto: create
     properties:
     hibernate:
    # show_sql: true
     format_sql: true
    logging.level:
     org.hibernate.SQL: debug
    # org.hibernate.type: trace #스프링 부트 2.x, hibernate5
    # org.hibernate.orm.jdbc.bind: trace #스프링 부트 3.x, hibernate6

     

    > 데이터소스 url에 MVCC=true 모드 설정해주면 쫌 빠르다함 

    > ddl-auto: 어플리케이션 실행 시점에 테이블 생성 -> 엔티티 정보 보고 다 지운 다음에 다시 생성하는 옵션?

    >properties: 하이버네이트 설정 -> 관련 설정 더 살펴보려면, 스프링부트 프로젝트 들어가서 레퍼런스 도큐먼트 보고 배우자 

    > logging.level : org.hiberate.SQL : debug : 하이버네이트 실행 SQL을 남김 -> 로그로 남김 

     

    2.1 

    예제 확인 

    @Entity
    @Getter @Setter
    public class Member{
    	
        @Id @Generatedalue
        private Long id;
        private String username;
    
    }
    
    @Repository
    public class MemberReopsitory{ //DAO와 같은 역할 JPA사용하려면 엔티티 매니저 필요
    
    	@PersistenceContext // 엔티티 매니저 주입해줌 @Autowired역할
        EntityManager em;
        
        public Long save(Member member){
        	em.persist(member);
            return member.getId();
        }
        
        public Member find(Long id){
        return em.find(Member.class,id); 
        }
    }

     

    >

    3.테스트 

    @RunWith(SpringRunner.class) //스프링 관련된 거 테스트할 때 필요한 어노테이션 
    @SpringBootTest
    
    public class MemberRepositoryTest{
    
    	@Autowired MemberRepository memberRepository;
        
        @Test
        @Transactional //엔티티 매니저를 통한 모든 데이터 변경현상은 반드시 트랜잭션 안에서 일어나야함
        @Rollback(false)//test에 Teanscational이 달려있으면 테스트 후 DB 날림
        public void testMember)_{
        	//..
            assertThat(findMember).isEqualsTo(member) //JPA 엔티티 동일성 보장 
            //저장된 것과 테이블에 저장된 것과 생성된 것 동일 
            //같은 영속성 컨텍스트 안에서 id 값이 같은면 같은 엔티티로 인식 (한 트렌잭션 안에서?)
            //1차 캐시에서 영속성 컨텍스트에 엔티티가 관리됨, 똑같은게 있기 때문에 인서트 안하고 그냥 나온대..?
        }
    
    }

     

    4. 쿼리 파라미터 로그 남기기 

     

    > 외부라이브러리 추가하면 쿼리 로그 볼 수 있다.

    implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.5.6'
    implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.9.0' // 스프링 부트 3.0

     

Designed by Tistory.