zoukankan      html  css  js  c++  java
  • JAP和Spring整合的三种方式

     

    JPA是Java EE5规范之一,是一个orm规范,由厂商来实现该规范。目前有hibernate,OpenJPA,TopLink和EclipseJPA等实现

        Spring提供三种方法集成JPA:

    1、LocalEntityManagerFactoryBean:适用于那些仅使用JPA进行数据访问的项目。该FactoryBean根据 JPA PersistenceProvider自动检测配置文件进行工作,一般从“META-INF/persistence.xml”读取配置信息。这种方式最简单,但是不能设置Spring中定义的DataSource,且不支持Spring管理的全局事务。不建议使用此方式。这种方法实际上只适用于独立的应用程序和测试环境(这正是JPA规范设计它的原因)。

        在Spring中的配置:

        <bean id=”entityManagerFactory” class=”org.springframework.orm.jpa.LocalEntityManagerFactoryBean”>

           <property name=”persistenceUnitName” value=”persistenceUnit”/>

        </bean>

    获取EntityManagerFactory的方法是使用springframe的LocalContainerEntityManagerFactoryBean。

    将前面获取EntityManagerFactory的class引用改一下:

            <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
                <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"/>
            </bean>

    我们只需要配置persistenceXmlLocation这个属性,指定到classpath里面的META-INF/persistence.xml。

    这种方式是配置JPA的强大的方法。因为它允许在应用程序中灵活进行本地配置。它支持连接现有JDBC数据源,支持本地事务(RESOURCE_LOCAL)和全局事务(JTA)。

    另外,还可以与dataSource一起使用,我们的persistence.xml里面不用写连接的属性了,直接就写名字和对应的实体就可以了,例如:

    <?xml version="1.0" encoding="UTF-8"?>
    <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistencehttp://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
    <persistence-unit name="MyPU" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>

    <class>myentiry.UserInfo</class>

    </persistence-unit>

    </persistence>

    spring的applicationContext配置文件:

         <bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" >
                <property name="driverClassName" value="com.microsoft.sqlserver.jdbc.SQLServerDriver" />
                <property name="url" value="jdbc:sqlserver://192.168.2.44:1433;databaseName=test" />
                <property name="username" value="sa" />
                <property name="password" value="sa" />   
                <property name="initialSize" value="5" />
                <property name="minIdle" value="5" />      
                <property name="maxIdle" value="30" />              
                <property name="maxActive" value="100" /> 
                <property name="maxWait" value="1000" /> 
            </bean>

       <bean id="entityManagerFactory" 
            class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
                <property name="dataSource" ref="dataSource" />

         <property name="persistenceXmlLocation" value="classpath:META-INF/persistence.xml"/>
                <property name="persistenceUnitName" value="MyPU" />
                <property name="jpaVendorAdapter">
                    <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
                        <property name="showSql" value="true" />
                        <property name="generateDdl" value="false" />
                    </bean>
                </property>
            </bean>

    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。

          也可以将JPA配属性相关置提专门取到jpa的配置文件persistence.xml:

      persistence.xml:

        <persistence version="1.0"
            xmlns="http://java.sun.com/xml/ns/persistence"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://java.sun.com/xml/ns/persistence                      

            http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
            <persistence-unit name="persistenceUnit" transaction-type="RESOURCE_LOCAL"/>
        </persistence>
  • 相关阅读:
    何为受控组件(controlled component)
    (组件的)状态(state)和属性(props)之间有何不同
    类组件(Class component)和函数式组件(Functional component)之间有何不同
    [翻译] FSLineChart
    [翻译] DXPopover
    [翻译] LTInfiniteScrollView
    设计模式
    [翻译] LLSimpleCamera
    [翻译] VLDContextSheet
    将Model对象转换成json文本或者json二进制文件
  • 原文地址:https://www.cnblogs.com/zhaowancheng/p/5852150.html
Copyright © 2011-2022 走看看