javascript
Spring 3.1和JPA的持久层
1.概述
本教程顯示了如何使用Hibernate作為持久性提供程序使用JPA設置Spring 。
有關使用基于Java的配置和項目的基本Maven pom設置Spring上下文的分步介紹,請參閱本文 。
2. Java的JPA Spring配置
要在Spring項目中使用JPA, 需要設置EntityManager 。
這是配置的主要部分,它是通過Spring工廠bean完成的,即更簡單的LocalEntityManagerFactoryBean或更靈活的LocalContainerEntityManagerFactoryBean 。 此處使用后一個選項,以便可以在其上配置其他屬性:
@Configuration @EnableTransactionManagement public class PersistenceJPAConfig{@Beanpublic LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {LocalContainerEntityManagerFactoryBean em = new LocalContainerEntityManagerFactoryBean();em.setDataSource(dataSource());em.setPackagesToScan(new String[] { "org.baeldung.persistence.model" });JpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();em.setJpaVendorAdapter(vendorAdapter);em.setJpaProperties(additionalProperties());return em;}@Beanpublic DataSource dataSource(){DriverManagerDataSource dataSource = new DriverManagerDataSource();dataSource.setDriverClassName("com.mysql.jdbc.Driver");dataSource.setUrl("jdbc:mysql://localhost:3306/spring_jpa");dataSource.setUsername( "tutorialuser" );dataSource.setPassword( "tutorialmy5ql" );return dataSource;}@Beanpublic PlatformTransactionManager transactionManager(){JpaTransactionManager transactionManager = new JpaTransactionManager();transactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject() );return transactionManager;}@Beanpublic PersistenceExceptionTranslationPostProcessor exceptionTranslation(){return new PersistenceExceptionTranslationPostProcessor();}Properties additionalProperties() {return new Properties() {{ // Hibernate Specific: setProperty("hibernate.hbm2ddl.auto", "create-drop");setProperty("hibernate.dialect", "org.hibernate.dialect.MySQL5Dialect");}};} }另外,請注意,在Spring 3.2之前, cglib必須位于類路徑中才能使Java @Configuration類起作用。 為了更好地理解cglib作為依賴項的需求,請參閱Spring中有關cglib工件的討論 。
3.使用XML的JPA Spring配置
與XML相同的Spring配置:
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:tx="http://www.springframework.org/schema/tx"xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsdhttp://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.2.xsd"><bean id="myEmf" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"><property name="dataSource" ref="dataSource" /><property name="packagesToScan" value="org.baeldung.persistence.model" /><property name="jpaVendorAdapter"><bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" /></property><property name="jpaProperties"><props><prop key="hibernate.hbm2ddl.auto">create-drop</prop><prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop></props></property></bean><bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"><property name="driverClassName" value="com.mysql.jdbc.Driver" /><property name="url" value="jdbc:mysql://localhost:3306/spring_jpa" /><property name="username" value="tutorialuser" /><property name="password" value="tutorialmy5ql" /></bean><bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"><property name="entityManagerFactory" ref="myEmf" /></bean><tx:annotation-driven /><bean id="persistenceExceptionTranslationPostProcessor" class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" /></beans>在XML中配置Spring和基于Java的新配置之間有一個相對小的差異–在XML中,對另一個bean的引用可以指向該bean或該bean的bean工廠。 但是在Java中,由于類型不同,編譯器不允許這樣做,因此首先從Bean工廠中檢索EntityManagerFactory ,然后將其傳遞給事務管理器:
txManager.setEntityManagerFactory( this.entityManagerFactoryBean()。getObject() );
4.完全不用XML
通常,JPA通過META-INF / persistence.xml文件定義一個持久性單元。 從Spring 3.1開始,不再需要persistence.xml - LocalContainerEntityManagerFactoryBean現在支持'packagesToScan'屬性,可以在其中指定要掃描@Entity類的軟件包。
該文件是最后要刪除的XML片段–現在, 無需使用XML即可完全??設置JPA。
4.1。 JPA屬性
JPA屬性通常在persistence.xml文件中指定; 或者,可以將屬性直接指定給實體管理器工廠bean:
factoryBean.setJpaProperties(this.additionalProperties());
附帶說明一下,如果Hibernate將是持久性提供程序,則這將是指定Hibernate特定屬性的方式。
5. Maven配置
除了Spring Core和持久性依賴關系(在Spring with Maven教程中詳細顯示)之外,我們還需要在項目中定義JPA和Hibernate,以及MySQL連接器 :
<dependency><groupId>org.hibernate</groupId><artifactId>hibernate-entitymanager</artifactId><version>4.2.4.Final</version><scope>runtime</scope> </dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.26</version><scope>runtime</scope> </dependency>請注意,MySQL依賴項作為參考包括在內-需要驅動程序來配置數據源,但是任何受Hibernate支持的數據庫都可以。
六,結論
本教程說明了如何使用XML和Java配置在Spring中使用Hibernate配置JPA 。
我們還討論了如何擺脫通常與JPA相關聯的XML的最后一部分– persistence.xml 。 最終結果是一個輕量級的,干凈的DAO實現,幾乎沒有依賴Spring的編譯時。
可以在github項目中找到此Spring JPA教程的實現–這是一個基于Eclipse的項目,因此應該很容易直接導入和運行。
翻譯自: https://www.javacodegeeks.com/2011/12/persistence-layer-with-spring-31-and_14.html
總結
以上是生活随笔為你收集整理的Spring 3.1和JPA的持久层的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 使用ThreadPoolExecutor
- 下一篇: 在JSF 2中对定制验证器进行参数化