Spring Data:JPA基础配置

一般的JPA项目,要求在META-INF目录下对JPA的基础配置信息做配置。主要在persistence.xml文件中进行配置,主要配置有dataSource ,jpa提供的厂商类HibernatePersistenceProvider,以及一些Hibernate的参数,如showsql,ddl自动生成等。
参考如下博客中的配置方式。
https://blog.csdn.net/blueboz/article/details/79424657

而我们主要讲Spring中的配置方法,同样的,Spring提供了

org.springframework.orm.jpa.LocalEntityManagerFactoryBean
org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean

两个类,这两个类本质都一样,根据JPA配置,生成一个EntityManager,也就是我们Hibernate里面的SessionFactory啦。
那么有什么区别呢?
我们知道,一般的JPA项目都会有那个万恶的persistence-unit,持久化单元。

<persistence-unit name="bozPU" transaction-type="RESOURCE_LOCAL">

这个持久化单元都会有一个名称.name,如上面的bozPU。
我们获取这个PU,通过如下的方式

EntityManagerFactory factory = Persistence.createEntityManagerFactory("jpa");

而第一个FactoryBean恰恰跟这个一样

<bean id=”entityManagerFactory” class=”org.springframework.orm.jpa.LocalEntityManagerFactoryBean”>
<property name="persistenceUnitName" value="bozPU"/>
</bean>

采用第二种则有点不同,第二种不需要persisitence.xml文件
完全是在配置中进行配置

<!-- 实体管理器 -->
<bean id="entityManagerFactory"
	class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
	<property name="dataSource" ref="dataSource" />
	<property name="packagesToScan" value="cn.boz.jpa" />
	<!-- 指定持久化实现产商类,不同厂商不一样,hibernate是PersistenceProvider,如果classpath只有一个是不需要进行配置的 -->
	<property name="persistenceProvider">
		<bean class="org.hibernate.jpa.HibernatePersistenceProvider" />
	</property>
	<!--基础的配置信息,包含showsql,ddl,更新策略-->
	<property name="jpaVendorAdapter">
		<bean
			class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
			<property name="generateDdl" value="true" />
			<property name="database" value="MYSQL" />
			<property name="databasePlatform"
				value="org.hibernate.dialect.MySQL5InnoDBDialect" />
			<property name="showSql" value="true" />
		</bean>
	</property>
	<property name="jpaDialect">
		<bean
			class="org.springframework.orm.jpa.vendor.HibernateJpaDialect" />
	</property>
	<property name="jpaPropertyMap">
		<map>
			<entry key="hibernate.query.substitutions"
				value="true 1, false 0" />
			<entry key="hibernate.default_batch_fetch_size" value="16" />
			<entry key="hibernate.max_fetch_depth" value="2" />
			<entry key="hibernate.generate_statistics" value="false" />
			<entry key="hibernate.bytecode.use_reflection_optimizer"
				value="true" />
			<entry key="hibernate.cache.use_second_level_cache"
				value="false" />
			<entry key="hibernate.cache.use_query_cache" value="false" />
		</map>
	</property>
	
</bean>

配置完了EntityManagerFactory,需要配置如下信息

<!-- 事务管理器 -->
<bean id="transactionManager"
	class="org.springframework.orm.jpa.JpaTransactionManager">
	<property name="entityManagerFactory"
		ref="entityManagerFactory" />
</bean>

<!--数据源信息-->
<bean id="dataSource" class="com.zaxxer.hikari.HikariDataSource">
	<property name="jdbcUrl"
		value="jdbc:mysql:///cas?useUnicode=true&amp;characterEncoding=utf-8&amp;serverTimezone=UTC"></property>
	<property name="driverClassName"
		value="com.mysql.jdbc.Driver"></property>
	<property name="username" value="root"></property>
	<property name="password" value=""></property>
</bean>
<!--声明式事务-->
<tx:annotation-driven
	transaction-manager="transactionManager" proxy-target-class="true" />
<!-- service包 -->
<context:component-scan
	base-package="cn.boz.jpa" />
<!-- 使用cglib进行动态代理 -->
<aop:aspectj-autoproxy proxy-target-class="true" />

下面这一块是关于SpringDataDao 的配置,主要是扫描的包所在目录

<jpa:repositories base-package="cn.boz.jpa.dao"
	repository-impl-postfix="Impl"
	entity-manager-factory-ref="entityManagerFactory"
	transaction-manager-ref="transactionManager" />

其中repository-impl-postfix这个属性,因为SpringData中,所有Dao是实现JpaRepository这个接口的,参考如下文章。
https://www.cnblogs.com/dreamroute/p/5173896.html

发布了73 篇原创文章 · 获赞 55 · 访问量 20万+

猜你喜欢

转载自blog.csdn.net/blueboz/article/details/82685398