您的位置:首页 > 编程语言 > Java开发

spring-data-jpa学习(一)环境配置1.3

2016-07-20 16:06 393 查看
3.PersistenceConfig.class

package test.persistence;

@Configuration
@ComponentScan(basePackages = "test.persistence")
@EnableTransactionManagement
@EnableJpaRepositories("test.persistence.repository")
@PropertySource(value = { "classpath:/META-INF/db.properties" })
public class PersistenceConfig {

private DataSource preferentialDataSource;

private static final String PROPERTY_NAME_DATABASE_DRIVER = "connection.driver_class";
private static final String PROPERTY_NAME_DATABASE_URL = "connection.url";
private static final String PROPERTY_NAME_DATABASE_USERNAME = "connection.username";
private static final String PROPERTY_NAME_DATABASE_PASSWORD = "connection.password";
private static final String PROPERTY_NAME_DATABASE_DDL="hbm2ddl.auto";

private static final String ENTITY_PACKAGE = "test.persistence.model";

@Autowired
private Environment environment;

private EntityManager entityManager;

protected LocalContainerEntityManagerFactoryBean entityManagerFactory;

private PlatformTransactionManager annotationDrivenTransactionManager;

@Bean(name="entityManagerFactory")
public synchronized LocalContainerEntityManagerFactoryBean getEntityManager() {
if (this.entityManagerFactory == null) {
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
HibernateJpaVendorAdapter hibernateJpaVendorAdapter=new HibernateJpaVendorAdapter();
hibernateJpaVendorAdapter.setGenerateDdl(true);
hibernateJpaVendorAdapter.setShowSql(true);
factoryBean.setJpaVendorAdapter(hibernateJpaVendorAdapter);
factoryBean.setDataSource(this.getPreferentialDataSource());
final Properties jpaProperties = new Properties();
jpaProperties.put(PROPERTY_NAME_DATABASE_DDL, this.environment.getRequiredProperty(PROPERTY_NAME_DATABASE_DDL));
factoryBean.setJpaProperties(jpaProperties);
factoryBean.setPackagesToScan(ENTITY_PACKAGE);
this.entityManagerFactory = factoryBean;
}
return this.entityManagerFactory;
}

//事务管理
@Bean(name = "transactionManager")
public synchronized PlatformTransactionManager annotationDrivenTransactionManager() {
if (this.annotationDrivenTransactionManager == null) {
final JpaTransactionManager jpaTxManager = new JpaTransactionManager();
jpaTxManager.setEntityManagerFactory(this.entityManagerFactory
.getNativeEntityManagerFactory());
jpaTxManager.setJpaDialect(new EclipseLinkJpaDialect());
this.annotationDrivenTransactionManager = jpaTxManager;
}
return this.annotationDrivenTransactionManager;
}

@Bean(destroyMethod = "close")
public synchronized DataSource getPreferentialDataSource() {
if (this.preferentialDataSource == null) {
final HikariConfig dataSourceConfig = new HikariConfig();
dataSourceConfig.setDriverClassName(this.environment
.getRequiredProperty(PROPERTY_NAME_DATABASE_DRIVER));
dataSourceConfig.setJdbcUrl(this.environment
.getRequiredProperty(PROPERTY_NAME_DATABASE_URL));
dataSourceConfig.setUsername(this.environment
.getRequiredProperty(PROPERTY_NAME_DATABASE_USERNAME));
dataSourceConfig.setPassword(this.environment
.getRequiredProperty(PROPERTY_NAME_DATABASE_PASSWORD));
this.preferentialDataSource = new HikariDataSource(dataSourceConfig);
}
return this.preferentialDataSource;
}

@Bean
@Primary
public synchronized EntityManager entityManager() {
if (this.entityManager == null) {
this.entityManager = SharedEntityManagerCreator
.createSharedEntityManager(this.entityManagerFactory
.getNativeEntityManagerFactory());
}
return this.entityManager;
}

@Bean
public JdbcTemplate jdbcTemplate() throws SQLException {
return new JdbcTemplate(this.getPreferentialDataSource());
}

@Bean
public NamedParameterJdbcTemplate namedParameterJdbcTemplate()
throws SQLException {
return new NamedParameterJdbcTemplate(this.getPreferentialDataSource());
}

}


工程混合jdbc和jpa使用,这里既配置了jdbc,也配置了jpa,并且进行了事务管理。
DataSource的配置是公用的,jdbc和jpa都要用到它,jdbcTemplate和NamedParameterJdbcTemplate都是用于jdbc连接的,jdbc是一种比较古老的方式了,这里简单学习一下jpa配置的基础知识。

JPA定义了两种类型的实体管理器,分别是应用程序管理类型和容器管理类型。

[b]1.应用程序管理类型
[/b]

应用程序管理类型的管理器需要在persistence.xml中进行配置,并用LocalEntityManagerFactoryBean来注入,例如,

在persistence.xml中配置基础信息



在spring中注入LocalEntityManagerFactoryBean



2.容器管理类型

容器管理类型的JPA不需要配置persistence.xml了,而是使用LocalContainerEntityManagerFactoryBean来创建entitymanager。它的注入也很简单,只需指明datasource和jpavendoradapter即可。



创建好EntityManagerFactory之后就可以创建EntityManager啦。

事务管理也有很多方式实现,这里使用了JPA的事务管理器

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: