JPA


JPA 라이브러리 POM 추가

<pom.xml>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-jpa</artifactId>
    </dependency>
</dependencies>

데이터베이스 연결

1. DataBaseConfig.java

기존 Hikari Pool에 myBatis 설정을 추가하면서 여러가지 설정과 트랜잭션 매니저와 같은 것들도 설정이 되었기 때문에
해당 부분은 공통으로 사용하여 생략하고 JPA 관련 설정만 추가한다.

<공통>

  • DataSource : DB와 관련된 Connection 정보를 담고있으며 커넥션을 관리한다.
  • PlatformTransactionManager : 트랜잭션 경계를 지정하여 트랜잭션의 시작점, 종료 지점, 정상 종료, 비정상 종료들을 정의한다.

<myBatis>

  • SqlSessionFactory : SQL 세션을 생성하기 위해 사용한다.
  • SqlSessionTemplate
    : 세션을 생성, 설정 및 제거 해주는 것을 자동화 시키기 위해 사용하는 것으로 이해.
    트랜잭션 설정에 따라 자동으로 커밋과 롤백도 수행

<JPA>

  • EntityManagerFactory
    : 엔티티를 관리하는 역할을 수행하는 EntityManager 클래스를 만들어준다.
    싱글 코어에서 멀티 쓰레드를 구현하기 위해 쓰인다고 한다. 병렬 작업을 위한.

<DataBaseConfig.java>

@Configuration
@EnableConfigurationProperties
@MapperScan(basePackages = "${패키지명}")
@EnableTransactionManagement(proxyTargetClass = true)
@EnableJpaRepositories(
        basePackages = "${패키지명}.*.jpa",
        entityManagerFactoryRef = "entityManagerFactory"
)
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class})
public class DataBaseConfig {
    
    // ... 기존 소스 생략
    
    @Primary
    @Bean
    public EntityManagerFactory entityManagerFactory(@Qualifier("dataSource") DataSource dataSource) {
        final LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();
        em.setDataSource(dataSource);
        em.setPackagesToScan("${패키지명}.*.jpa");
        final HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
        em.setJpaVendorAdapter(vendorAdapter);
        final HashMap<String, Object> properties = new HashMap<>();
        properties.put("hibernate.physical_naming_strategy", SpringPhysicalNamingStrategy.class.getName()); // 물리적 명칭 전략
        properties.put("hibernate.implicit_naming_strategy", SpringImplicitNamingStrategy.class.getName()); // 암시적 명칭 전략
        em.setJpaPropertyMap(properties);
        em.afterPropertiesSet();

        return em.getObject();
    }
}

출처/참고

2.jdbc.properties

기존 코드 그대로, DB 정보만 변경하여 사용
spring.datasource.type과 같은 Prefix는 DataBaseConfig.java에서 지정하는 Prefix에 따라 달라진다.

spring.datasource.type={데이터베이스타입}
# oracle
spring.datasource.driver-class-name={데이터베이스 드라이버}
# oracle.jdbc.Driver
spring.datasource.url={JDBC 주소}
# jdbc:{db타입}:thin:@{HOST 주소}:{포트번호}/{SID}
spring.datasource.username={데이터베이스 이름}
# smartdoodle
spring.datasource.password={비밀번호}
spring.datasource.hikari.connection-init-sql={테스트 쿼리}
# oracle = select 1 from dual
# mysql = select 1

# 풀 최대 사이즈
spring.datasource.hikari.maximum-pool-size=10
spring.datasource.hikari.minimum-idle=5
# 유효성 시간 제한
spring.datasource.hikari.validation-timeout=5000
# 최대 생명주기 시간
spring.datasource.hikari.max-lifetime=250000
spring.datasource.hikari.idle-timeout=230000
# 커넥션 시간 초과
spring.datasource.hikari.connection-timeout=60000
# 초기 시작 실패 시간 제한
spring.datasource.hikari.initialization-fail-timeout=5000

쿼리로그 설정

1. application.properties

# ... 데이터베이스 연결과 무관한 소스 생략
#JPA 설정
# 쿼리 로그 레벨 설정
logging.level.org.hibernate.SQL=TRACE
# 바인딩 변수 값 출력
logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE
# 출력 값 변수별 출력
# logging.level.org.hibernate.type.descriptor.sql.BasicExtractor=TRACE
# 쿼리 로그 출력 설정
spring.jpa.properties.hibernate.show_sql=true
# 쿼리 로그 포맷 설정
spring.jpa.properties.hibernate.format_sql=true
# 쿼리 로그 주석 표시
# spring.jpa.properties.hibernate.use_Sql_comments=true

출처/참고

profile
아무것도 몰라요우

0개의 댓글