Maven Spring3.0+JPA2.0

最近我使用Spring3.0、JPA2.0和最新的Wicket来更新WicketCool。下面是我最近研究的简要概述, 展示使用Maven快速进入Spring3.0和JPA2.0的快速教程。

1. 依赖项

a) Spring

要使用Spring框架3.0,你不能像之前那样为其添加引用项了

<dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring</artifactId>
        <version>2.5.6</version>
</dependency>

这已经不能用了。因为Spring框架已经被划分成了20个模块:

如果你创建的web应用,那你可能需要使用的模块如下:

  1. 所有Core容器的:Beans, Core, Context和Expression Language
  2. AOP
  3. 数据访问/集成: Transactions, ORM
  4. Web中的:Web (即使你不使用SpringMVC,你可能也需要考虑使用web模块中的OpenEntityManagerInViewFilter。
  5. Test

因此下面是我们需要在pom.xml中设置的依赖项:

<properties>
        <spring.version>3.0.0.RELEASE</spring.version>
</properties>
<dependencies>
        <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
                <version>${spring.version}</version>
        </dependency>
        <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-web</artifactId>
                <version>${spring.version}</version>
        </dependency>
        <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-beans</artifactId>
                <version>${spring.version}</version>
        </dependency>
        <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
                <version>${spring.version}</version>
        </dependency>
        <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-aop</artifactId>
                <version>${spring.version}</version>
        </dependency>
        <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context-support</artifactId>
                <version>${spring.version}</version>
        </dependency>
        <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-tx</artifactId>
                <version>${spring.version}</version>
        </dependency>
        <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-orm</artifactId>
                <version>${spring.version}</version>
        </dependency>
        <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-jdbc</artifactId>
                <version>${spring.version}</version>
        </dependency>
        <dependency>
                <groupId>org.springframework</groupId>
                <artifactId>spring-test</artifactId>
                <version>${spring.version}</version>
        </dependency>
</dependencies>

b) JPA 2.0

既然我们已经将Spring3的依赖项弄好,那么我们就看看JPA2.0的依赖项。我们必须知道,JPA自身仅仅是标准,因此,在设置时,我们实际上需要选择供应商。 我可以使用Hibernate或EclipseLink。Hibernate目前还处于beta阶段,EclipseLink则是标准的参考实现。因此我认为EclipseLink是个更好的选择。然而经过研究后,我认为还是先使用Hibernate为好。

Hibernate的新特性是,你不需要再依赖core、annotation、commons-annotation等。现在只需要一个依赖。另一个依赖就是标准API。

<dependencies>
        <dependency>
                <groupId>org.hibernate.java-persistence</groupId>
                <artifactId>jpa-api</artifactId>
                <version>2.0-cr-1</version>
        </dependency>
        <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-entitymanager</artifactId>
                <version>3.5.0-Beta-2</version>
        </dependency>
</dependencies>

你可能也需要添加JBoss的Maven库:

<repositories>
        <repository>
                <id>JBoss Repo</id>
                <url>http://repository.jboss.com/maven2</url>
        </repository>
</repositories>

2. 配置

简单应用的上下文配置文件看上去如下:

<? 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:context="http://www.springframework.org/schema/context"
        xmlns:tx="http://www.springframework.org/schema/tx" xmlns:p="http://www.springframework.org/schema/p"
        xmlns:aop="http://www.springframework.org/schema/aop"
        xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd">

        <!-- holding properties for database connectivity /-->
        <context:property-placeholder location="classpath:jdbc.properties" />
        <!-- enabling annotation driven configuration /-->
        <context:annotation-config />
        <context:component-scan base-package="wcpackage" />
        <tx:annotation-driven transaction-manager="transactionManager" />

        <bean
                class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />

        <bean id="dataSource"
                class="org.springframework.jdbc.datasource.DriverManagerDataSource"
                p:driverClassName="${jdbc.driverClassName}" p:url="${jdbc.url}" />

        <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager"
                p:entityManagerFactory-ref="entityManagerFactory" />

        <bean id="entityManagerFactory"
                class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"
                p:dataSource-ref="dataSource" p:jpaVendorAdapter-ref="jpaAdapter">
                <property name="loadTimeWeaver">
                        <bean
                                class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
                </property>
                <property name="persistenceUnitName" value="wctemplatePU"></property>
        </bean>

        <bean id="jpaAdapter"
                class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"
                p:database="${jpa.database}" p:showSql="${jpa.showSql}" />
</beans>

让我们假设wcpackage是组件扫描的根包,wctemplatePU是持久化单元的名字。

现在我们需要做的就是在META-INF/persistence.xml中定义持久化单元。

<persistence 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">
        <persistence-unit name="wctemplatePU"
                transaction-type="RESOURCE_LOCAL">
                <properties>
                        <property name="hibernate.hbm2ddl.auto" value="validate" />
                </properties>
        </persistence-unit>
</persistence>

这是最基本的。你已经让Spring配置了,然后可以在你的服务类中使用EntityManager。

@Repository (value = "userDAO" )
public class UserDefaultDAO implements UserDAO {
    @PersistenceContext
    private EntityManager entityManager;

注入EntityManager将带有事务范围内的持久化上下文、资源本地的事务类型(意味着事务使用数据库事务而不是JTA)

 

参照地址:http://javasight.net/2011/05/jpa2-spring3-with-maven/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值