on
JPA, H2 database 설정
JPA, H2 database 설정
H2 다운로드
안정화 버전(Last Stable)을 설치합니다
H2 실행
다운로드한 H2 압축을 해제한 후
1) h2/bin 파일에 h2.sh 파일 실행 권한을 chmod 755로 변경합니다
2) 그리고 h2 스크립트 파일을 실행시킵니다
H2 데이터베이스 연결
실행이 되었다면 아래 JDBC URL 주소를 사용하여 데이터베이스에 1회 연결합니다
데이터베이스 접속된 것을 확인합니다
데이터베이스 경로에 mv.db 파일이 생성된 것을 확인하실 수 있습니다
데이터베이스 연결을 끊고
애플리케이션에서도 문제 없이 접근할 수 있도록
tcp 방식으로 JDBC URL을 변경하여 다시 연결합니다
여기까지 완료되었다면 어플리케이션에 H2 데이터베이스만 설정하여
실행시키면 H2 데이터베이스를 이용할 수 있습니다
application.yml 설정
spring: datasource: url: jdbc:h2:tcp://localhost/~/Install/h2/localdb/querydsl username: sa password: driver-class-name: org.h2.Driver jpa: hibernate: ddl-auto: create-drop properties: hibernate: show_sql: true format_sql: true logging.level: org.hibernate.SQL: debug
어플리케이션을 실행시킵니다
2021-12-11 18:49:39.022 INFO 50120 --- [ main] o.s.b.w.embedded.tomcat.TomcatWebServer : Tomcat started on port(s): 8080 (http) with context path '' 2021-12-11 18:49:39.031 INFO 50120 --- [ main] c.t.querydsl.QuerydslApplication : Started QuerydslApplication in 2.351 seconds (JVM running for 2.862)
ddl-auto 설정을 create-drop로 설정했기 때문에
어플리케이션 작성한 Entity 클래스가 테이블로 생성된 것을 확인하실 수 있습니다
테이블에 insert 되는지 테스트 코드를 통해 확인하실 수 있습니다
@SpringBootTest @Transactional @Commit class QuerydslApplicationTests { @Autowired EntityManager entityManager; @Test public void 프로젝트_QUERY_DSL_설정_성공_테스트() { Customer customer = new Customer(); entityManager.persist(customer); JPAQueryFactory queryFactory = new JPAQueryFactory(entityManager); QCustomer qCustomer = new QCustomer("hello"); Customer selectedCustomer = queryFactory .selectFrom(qCustomer) .fetchOne(); Assertions.assertThat(selectedCustomer).isEqualTo(customer); } }
참고 1)
Test 환경에서는 생성된 테이블이 drop 되지 않도록 ddl-auto 옵션값을 create로 변경합니다
ddl-auto: create
참고 2)
실행된 쿼리에 '?' 값을 확인할 수 있도록 설정할 수 있습니다
1) org.hibernate.type: trace를 추가합니다
logging.level: org.hibernate.SQL: debug org.hibernate.type: trace
여기서 조금 더 편리하게 볼 수 있도록
p6spy-spring-boot-starter 라이브러리를 추가합니다
2) p6spy-spring-boot-starter 라이브러리 추가 (선택사항)
(운영 환경에 추가되기 전에는 성능테스트 필요)
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.7.1'
추가해주신 다음 실행해보면 아래와 같이 '?' 표시가 대신
실제 입력되어진 값들이 표시되는 것을 확인하실 수 있습니다.
2021-12-11 19:31:34.312 INFO 56228 --- [ main] p6spy : #1639218694312 | took 0ms | statement | connection 4| url jdbc:h2:tcp://localhost/~/Install/h2/localdb/querydsl insert into customer (id, email, gender, name, nickname, password, phone_number) values (null, ?, ?, ?, ?, ?, ?) insert into customer (id, email, gender, name, nickname, password, phone_number) values (null, '[email protected]', 'M', 'Jun', 'j', '1234', '01099990000');
from http://wjjeong.tistory.com/60 by ccl(A) rewrite - 2021-12-12 08:02:03