Closed kwonslog closed 1 month ago
build.gradle 파일에 의존성 추가
implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
db.yml 파일에 DB 정보 추가
custom: db: inte.driver_class_name: org.mariadb.jdbc.Driver inte.jdbc.url: jdbc:mariadb://127.0.0.1:3306/db?characterEncoding=UTF-8 inte.username: root inte.password: 1234 inte.maximum_pool_size: 10 inte.minimum_idle: 5
JPA 설정 클래스 작성
import java.util.HashMap; import java.util.Map;
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.transaction.PlatformTransactionManager;
import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource;
@Configuration @EnableJpaRepositories( basePackages = "com.domain.jpa.admin.repository", entityManagerFactoryRef = "entityManagerFactory", transactionManagerRef = "transactionManager") public class JpaConfig {
@Value("${custom.db.inte.driver_class_name}") private String driverClassName; @Value("${custom.db.inte.jdbc.url}") private String jdbcUrl; @Value("${custom.db.inte.username}") private String userName; @Value("${custom.db.inte.password}") private String password; @Value("${custom.db.inte.maximum_pool_size}") private int maximumPoolSize; @Value("${custom.db.inte.minimum_idle}") private int minimumIdle; @Bean(name = "entityManagerFactory") @Primary public LocalContainerEntityManagerFactoryBean entityManagerFactory(EntityManagerFactoryBuilder builder) { Map<String, String> properties = new HashMap<>(); properties.put("hibernate.physical_naming_strategy", "org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl"); properties.put("hibernate.implicit_naming_strategy", "org.hibernate.boot.model.naming.ImplicitNamingStrategyLegacyJpaImpl"); LocalContainerEntityManagerFactoryBean factory = builder .dataSource(dataSource()) .packages("com.domain.jpa.admin.entity") .properties(properties) .build(); return factory; } @Primary @Bean(name = "transactionManager") public PlatformTransactionManager transactionManager(EntityManagerFactoryBuilder builder) { return new JpaTransactionManager(entityManagerFactory(builder).getObject()); } @Bean(name = "dataSource") @Primary public DataSource dataSource() { HikariConfig config = new HikariConfig(); config.setDriverClassName(driverClassName); config.setJdbcUrl(jdbcUrl); config.setUsername(userName); config.setPassword(password); config.setMaximumPoolSize(maximumPoolSize); config.setMinimumIdle(minimumIdle);
return new HikariDataSource(config); } }
- Entity 클래스 작성
package com.domain.jpa.admin.entity;
import java.time.LocalDateTime;
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table;
import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter;
@Getter @Setter @NoArgsConstructor @Entity @Table(name="APP_MENU_INFO") public class AppMenuInfo {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "ID") private long id; @Column(name = "CONTENTS") private String contents; @Column(name = "CREATE_AT") private LocalDateTime createAt; @Column(name = "UPDATE_AT") private LocalDateTime updateAt; @Builder public AppMenuInfo(long id, String contents, LocalDateTime createAt, LocalDateTime updateAt) { super(); this.id = id; this.contents = contents; this.createAt = createAt; this.updateAt = updateAt; }
}
- Repository 클래스 작성
package com.domain.jpa.admin.repository;
import org.springframework.data.repository.CrudRepository; import org.springframework.transaction.annotation.Transactional;
public interface AppMenuInfo extends CrudRepository<AppMenuInfo, Long> { }
환경
시작
build.gradle 파일에 의존성 추가
db.yml 파일에 DB 정보 추가
JPA 설정 클래스 작성
import javax.sql.DataSource;
import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.orm.jpa.EntityManagerFactoryBuilder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Primary; import org.springframework.data.jpa.repository.config.EnableJpaRepositories; import org.springframework.orm.jpa.JpaTransactionManager; import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean; import org.springframework.transaction.PlatformTransactionManager;
import com.zaxxer.hikari.HikariConfig; import com.zaxxer.hikari.HikariDataSource;
@Configuration @EnableJpaRepositories( basePackages = "com.domain.jpa.admin.repository", entityManagerFactoryRef = "entityManagerFactory", transactionManagerRef = "transactionManager") public class JpaConfig {
return new HikariDataSource(config); } }
package com.domain.jpa.admin.entity;
import java.time.LocalDateTime;
import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.Table;
import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter;
@Getter @Setter @NoArgsConstructor @Entity @Table(name="APP_MENU_INFO") public class AppMenuInfo {
}
package com.domain.jpa.admin.repository;
import org.springframework.data.repository.CrudRepository; import org.springframework.transaction.annotation.Transactional;
public interface AppMenuInfo extends CrudRepository<AppMenuInfo, Long> { }