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

来源:互联网 发布:淘宝答题答案 编辑:程序博客网 时间:2024/05/09 09:54

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";@Autowiredprivate 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@Primarypublic synchronized EntityManager entityManager() {if (this.entityManager == null) {this.entityManager = SharedEntityManagerCreator.createSharedEntityManager(this.entityManagerFactory.getNativeEntityManagerFactory());}return this.entityManager;}@Beanpublic JdbcTemplate jdbcTemplate() throws SQLException {return new JdbcTemplate(this.getPreferentialDataSource());}@Beanpublic NamedParameterJdbcTemplate namedParameterJdbcTemplate()throws SQLException {return new NamedParameterJdbcTemplate(this.getPreferentialDataSource());}}

工程混合jdbc和jpa使用,这里既配置了jdbc,也配置了jpa,并且进行了事务管理。

DataSource的配置是公用的,jdbc和jpa都要用到它,jdbcTemplate和NamedParameterJdbcTemplate都是用于jdbc连接的,jdbc是一种比较古老的方式了,这里简单学习一下jpa配置的基础知识。

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

1.应用程序管理类型

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

在persistence.xml中配置基础信息


在spring中注入LocalEntityManagerFactoryBean



2.容器管理类型

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


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


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


0 0
原创粉丝点击