JPA 配置文件最详细总结,没有之一!

JPA 配置文件最详细总结,没有之一!PropertyPlaceholderConfigure载入属性文件:例如:class=”org.springframework.beans.factory.config.PropertyPlaceholderConfigurer”><propertyname=”location”value=”classpath:test.properties”/></bean>test.properties属性文件内容如下:dbc.driverC.

在这里插入图片描述
又来了一个懵懂少年,看我怎么骗你的。

来我们开始学习吧。
在这里插入图片描述

  1. PropertyPlaceholderConfigure
载入属性文件:
例如:
    class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
 
    <propertyname="location"value="classpath:test.properties"/>
 
</bean>

test.properties属性文件内容如下:

dbc.driverClassName=net.sourceforge.jtds.jdbc.Driver
jdbc.url=jdbc\:jtds\:sqlserver\://localhost\:1433/test
jdbc.username=sa
jdbc.password=123456

载入之后,我们就可以通过${key} 完毕属性值得到填充,比如:

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"destroy-method="close">
       <property name="driverClassName" value="${jdbc.driverClassName}" />
       <property name="url" value="${jdbc.url}"/>
       <property name="username" value="${jdbc.username}"/>
       <property name="password" value="${jdbc.password}"/>
</bean>

2.定时文件的写法:

	<bean id="reissClientSer"  //bean 的命名
		class="cn.wiztek.reiss.reiss.service.ReissClient" />//所指向的java类
	<bean id="reissClient"
		class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">意思就是根据方法名称去执行任务的一个工厂bean。
		<property name="targetObject" ref="reissClientSer" />// 要和上个bean的id保持一致 ref 应该就是reference 关联的意思
		<property name="targetMethod" value="reissClient" />//实现方法
	</bean>
	<bean  id="qzsClientSer" class="cn.wiztek.reiss.updateQzs.service.UpdateQzsClient"/>
	<bean id="updateQzsClient"
	class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean">
		<property name="targetObject" ref="qzsClientSer" />
		<property name="targetMethod" value="updateQzsClient" />
		<property name="concurrent" value="false" />
	</bean>
	
	<bean id="qzsClientTrigger"
		class="org.springframework.scheduling.quartz.CronTriggerBean">
		<property name="jobDetail" ref="updateQzsClient" />
		<property name="cronExpression" value="0 0/1 * * * ?" />
		

	</bean>
<property name="cronExpression" value="0 0 20 11/1 1,12 ? *" /> 
是定时的设置,具体按多久执行一次,去百度Corn自己去设置就好了)

corn界面:
在这里插入图片描述

3.DriverManagerDataSource
DriverManagerDataSource只是作为一个成熟的连接池的简单替代,只不过实现相同的标准接口,不支持连接池,每次连接数据库都是创建新的连接对象

<bean id = "driverManagerDateSource "  class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName" value="com.mysql.jdbc.Driver" />
        <property name="url" value="jdbc:mysql:///springtest" />
        <property name="username" value="root" />
        <property name="password" value="abc"></property>
    </bean>
    <bean id="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
        <property name="dataSource" ref="driverManagerDateSource"></property>
    </bean>
</beans>

JpaTemplate类:

Spring提供JpaTemplate模板类用于简化事务管理及常见操作,类似于JdbcTemplate模板类。

4.LocalContainerEntityManagerFactoryBean
JPA定义了两种,


LocalEntityManagerFactoryBean:

程序管理型:实体管理器是在程序直接向实体管理器工厂请求一个实体管理器时创建的。在这种情况下,程序负责打开或关闭实体管理器,并且在事务中控制管理器。这种类型最适合不运行于Java EE容器的独立程序。

 

LocalContainerEntityManagerFactoryBean:

容器管理型:实体管理器由Java EE容器创建和管理。这种情况下,程序根本不与实体管理器工厂进行交互,实体管理器是通过注入或利用JNDI直接获得的,容器负责配置实体管理器工厂。这种类型最适合希望不考虑persistence.xml中的特殊性而在JPA配置之上维持某种控制的Java EE容器。

示例:

<bean id="entityManagerFactory"class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">

<property name="dataSource" ref="ds" />

<property name="persistenceUnitName" value="shanwz_persistence" />

<property name="packagesToScan" value="com.shanwz.**.entity" />

</bean>

关于LocalContainerEntityManagerFactoryBean的属性详细如下:

persistenceUnitManager:用于获取JPA持久化单元,默认实现DefaultPersistenceUnitManager用于解决多配置文件情况。

dataSource:用于指定Spring定义的数据源。

persistenceXmlLocation:用于指定JPA配置文件,对于多JPA配置文件情况请选择设置persistenceUnitManager属性来解决。

persistenceUnitName:用于指定持久化单元名称。

persistenceProvider:用于指定持久化实现厂商类,如hibernate为:org.hibernate.ejb.HibernateProvider 类。

jpaVendorAdapter:用于设置JPA实现厂商的特定属性,如设置hibernate的是否自动生成DDL的属性generateDdl,这些属性是厂商特定的,因此最好在这里设置。目前spring提供HibernateJpaVendorAdapter,OpenJpaVendorAdapter,EclipseJpaVendorAdapter,TopLinkJpaVenderAdapter四个实现。其中最主要的属性是“database”,用来指定使用的数据库类型。从而根据数据库类型决定如何将数据库特定异常转换为Spring一致性异常。目前支持以下数据库:DB2,DERBY,H2,HSQL,INFORMIX,MySQL,Oracle,POSTGRESQL,SQL_SERVER,SYBASE

jpaDialect:用于指定一些高级特性,如事务管理等。目前Spring提供HibernateJpaDialect,OpenJpaDialect,EclipseJpaDialect,TopLinkJpaDialect和DefaultJpaDialect实现。注意DefaultJpaDialect不提供任何功能,因此在使用特定实现厂商的JPA实现时需要指定jpaDialect实现,如使用hibernate就使用HibernateJpaDialect。当指定jpaVendorAdapter属性时可以不指定jpaDialect,会自动设置相应的JpaDialect实现;

jpaProperties和jpaPropertyMap:指定JPA属性;如Hibernate中指定是否显示SQL的“hibernate.show_sql”属性,对于jpaProperties设置的属性自动会放进jpaPropertyMap中;

loadTimeWeaver:用于指定LoadTimeWeaver实现,从而允许JPA 加载时修改相应的类文件。具体使用得参考相应的JPA规范实现厂商文档,如Hibernate就不需要指定loadTimeWeaver。

5.JpaTransactionManager 事务管理

<bean id="zgjtransactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"
		scope="singleton">
		<property name="entityManagerFactory" ref="zgjentityManagerFactory" />
	</bean>

6.PersistenceExceptionTranslationAutoConfiguration

自动配置类PersistenceExceptionTranslationAutoConfiguration的主要目的是启动Spring框架提供的持久化层异常向Spring标准异常的转换机制。

对该机制的启动PersistenceExceptionTranslationAutoConfiguration是通过向容器注册一个PersistenceExceptionTranslationPostProcessor来完成的。PersistenceExceptionTranslationAutoConfiguration向容器注册该组件的条件是:

此组件bean尚未注册;
配置选项spring.dao.exceptiontranslation.enabled未被明确设置为false;
而PersistenceExceptionTranslationPostProcessor是一个BeanPostProcessor。它将每个Repository组件bean包装成一个代理对象并为该代理对象添加一个PersistenceExceptionTranslationAdvisor。该PersistenceExceptionTranslationAdvisor会拦截Repository组件bean的方法调用产生的异常并将其转换成Spring框架标准异常。

7.PersistenceAnnotationBeanPostProcessor

https://blog.csdn.net/andy_zhang2007/article/details/86593188

8.transactionManager

<tx:advice id="zgjtxtAdvice" transaction-manager="zgjtransactionManager">
		<tx:attributes>
			<tx:method name="get*" propagation="NEVER" />
			<tx:method name="query*" propagation="SUPPORTS" />
			<tx:method name="add*" rollback-for="Exception" />
			<tx:method name="addNewBusiness" propagation="SUPPORTS" />
			<tx:method name="update*" rollback-for="Exception" />
			<tx:method name="delete*" rollback-for="Exception" />
			<tx:method name="save*" rollback-for="Exception" />
			<tx:method name="init*" rollback-for="Exception" />
			<tx:method name="gen*" rollback-for="Exception" />
			<tx:method name="cancel*" rollback-for="Exception" />
			<tx:method name="execute*" rollback-for="Exception,Throwable" />
		</tx:attributes>
	</tx:advice>

https://blog.csdn.net/qq_35626763/article/details/80507921

9.aop:config
举个栗子:

<aop:config>
        <aop:pointcut id="loggerCutpoint"
            expression=
            "execution(* com.how2java.service.ProductService.*(..)) "/>
             
        <aop:aspect id="logAspect" ref="loggerAspect">
            <aop:after pointcut-ref="loggerCutpoint" method="log"/>
        </aop:aspect>
  </aop:config>

这个配置过程是什么含义呢?

<aop:pointcut id="loggerCutpoint" 
expression="execution(* com.how2java.service.ProductService.*(..)) "/>

(pointcut :切点)
这一句是声明切入点,切入点的 id 叫 loggerCutPoint ,用来标记这个切入点,

这个expression表示:满足expression中的方法调用之后,就会去进行切面操作,类似于触发了切面:

第一个 * 代表返回任意类型
com.how2java.service.ProductService.* 表示包名以 com.how2java.service.ProductService 开头的类的任意方法(第二个*表示任意方法,通配符肯定知道吧)
(…) 表示方法的参数是任意数量和类型

简单说就是,只要com.how2java.service这个包中的ProductService类的任意一个函数被调用,不管你的返回值是什么,都会触发开关,我就会去执行切面,也就是辅助功能,但是辅助功能是什么呢,就是下面两句:

<aop:aspect id="logAspect" ref="loggerAspect">

  <aop:after pointcut-ref="loggerCutpoint" method="log"/>

</aop:aspect>

这两句是定义了一个切面,上面说只要触发开关,就会去执行切面,就是指的这里的切面,所谓切面,就是一个类中的方法而已,搞的这个高大上。。。

id代表这个切面的名字,ref就是指的方法所在的类,method代表的就是方法的名字,

pointcut-ref=“loggerCutpoint” 这个就是表示我这个切面是和上面的切点关联起来的(一个切点是可以关联多个切面的,一个切面只能关联一个方法),只要上面的切点被触发,我就会到这里来执行一些辅助功能,搞得和单片机的中断一样,

after表示在切入点触发之后来执行我这个中断,当然也有before,一共有五个before,after,After-returning ,After-throwing,Around。

在 method 参数后面,还可以加上参数列表。

10.BaseDao
贴个例子自己看吧。
没有描述
class 就是你配置的baseDao的类。
代码简单的写一点:

@Repository("baseDao")
@Transactional
public class BaseDao implements IBaseDao { 
   

	@PersistenceContext
	private EntityManager entityManager;

	@Override
	public void save(Object entity) { 
   
		getEntityManager().persist(entity);
	}

	@Override
	public <T> void delete(Class<T> entityClass, Object entityId) { 
   
		Object obj = find(entityClass, entityId);
		if (obj != null) { 
   
			getEntityManager().remove(obj);
		}
	}
}

关于其他的bean配置方法,比如这种,

	<bean id="updateQzslClientImpl" class="cn.wiztek.reiss.updateQzs.service.impl.UpdateQzsServiceImpl">
		<property name="baseDao">
			<ref bean="baseDao" />
		</property>
	</bean>

就不再赘述。

以上就是全部JPA配置文件的总结,如有错误之处,请及时告知。
在这里插入图片描述告辞!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/34855.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注