Java Persistence API์ ์ฝ์๋ก, ์๋ฐ ์ง์์ ORM ๊ธฐ์ ํ์ค
JPA๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์๋ ์๋์ ๊ฐ์ ์ค์ ์ด ํ์ํ๋ค.
์คํ๋ง ๋ถํธ์์๋ ์๋์ ๋น๋ค์ด ์๋์ ์ผ๋ก ์ค์ ๋์ด ์๊ธฐ ๋๋ฌธ์ ๋ณ๋์ ์ง์ ์ค์ ํ ํ์๋ ์๋ค.
@Configuration
public class JpaConfig {
// ์ด๋ค ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ ๊ฒ์ธ์ง ์ค์
@Bean
public DataSource dataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
dataSource.setUrl("jdbc:mysql://localhost:3306/jpa_basic?serverTimezone=UTC");
dataSource.setUsername("root");
dataSource.setPassword("password");
return dataSource;
}
// JPA ๊ตฌํ์ฒด ์ค์
@Bean
public JpaVendorAdapter jpaVendorAdapter(JpaProperties jpaProperties) {
HibernateJpaVendorAdapter jpaVendorAdapter = new HibernateJpaVendorAdapter();
jpaVendorAdapter.setShowSql(jpaProperties.isShowSql());
jpaVendorAdapter.setGenerateDdl(jpaProperties.isGenerateDdl());
jpaVendorAdapter.setDatabasePlatform(jpaProperties.getDatabasePlatform());
return jpaVendorAdapter;
}
// Entity ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ๊ด๋ฆฌํด์ฃผ๋ EntityManagerFactory ์ค์
@Bean
public LocalContainerEntityManagerFactoryBean entityManagerFactory(DataSource dataSource, JpaVendorAdapter jpaVendorAdapter, JpaProperties jpaProperties) {
LocalContainerEntityManagerFactoryBean entityManagerFactoryBean = new LocalContainerEntityManagerFactoryBean();
entityManagerFactoryBean.setDataSource(dataSource);
entityManagerFactoryBean.setPackagesToScan("com.example.jpa_basic.domain");
entityManagerFactoryBean.setJpaVendorAdapter(jpaVendorAdapter);
Properties jpaProperties = new Properties();
jpaProperties.putAll(jpaProperties.getProperties());
entityManagerFactoryBean.setJpaProperties(jpaProperties);
return entityManagerFactoryBean;
}
// Transaction์ ๊ด๋ฆฌํด์ฃผ๋ TransactionManager ์ค์
@Bean
public PlatformTransactionManager transactionManager(LocalContainerEntityManagerFactoryBean entityManagerFactory) {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactory.getObject());
return transactionManager;
}
}