在Spring中配置使用Java Persistence API(JPA)

 

1. 配置数据源

首先,在Spring配置文件(applicationContext.xml)中创建一个JNDI数据源,该数据源使用JndiObjectFactoryBean

<bean id="dataSource" destroy-method="close" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName">
<value>java:comp/env/jdbc/login</value>
</property>
<property name="resourceRef" value="true"/>
</bean>

另外,需要为tomcat做相应的配置。本例中通过配置全局resource,然后通过resourcelink来映射到数据源。

在$TOMCAT_HOME/conf/server.xml的GlobalNamingResources部分添加一个新的数据源,指定JDBC连接方式,配置如下:

<GlobalNamingResources>    
<!-- other data source -->
<Resource
name="jdbc/login"
type
="javax.sql.DataSource"
maxActive
="4"
maxIdle
="2"
maxWait
="5000"
driverClassName
="com.mysql.jdbc.Driver"
username
="root"
password
=""
url
="jdbc:mysql://localhost:3306/login" />
</GlobalNamingResources>

在$TOMCAT_HOME/conf/context.xml中配置resourcelink:

<Context>
  <ResourceLink name="jdbc/login" type="javax.sql.DataSource" global="jdbc/login"/>
</Context>

注意,context中的name要和resource中的name一致。

 

2. 配置entityManagerFactory

在spring配置文件中申明一个entityManagerFactory bean来提供JPA EntityManager。该EntityManager提供对数据库的操作。另外还需要指定jpaVendorAdapter来告诉Spring,我们将使用Hibernanate来作为JPA实现的提供者。

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

<bean id="jpaVendorAdapter" class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter">
<property name="showSql" value="true"/>
</bean>

 

3. 定义持久化单元

在上面的配置中,我们指定了EntityManager所使用的持久化单元为“default”,我们需要创建一个persistence.xml来定义该持久化单元。该文件必须出现在该应用的classpath中,这样该文件才能被JPA的实现提供者(本例中为Hibernate)找到。我们将该文件保存在 src/main/resources/META-INF下。

<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
                    http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"

version
="1.0">
  <persistence-unitname="default" transaction-type="RESOURCE_LOCAL">
    <class>login.User</class>
    <properties>
      <propertyname="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
    </properties>
  </persistence-unit>
</persistence>

这里要注意,根据后台数据库的不同使用正确的dialect,本文以mysql为例。对于sqlserver要做相应的修改:

<property name="hibernate.dialect"  value="org.hibernate.dialect.SQLServerDialect" />

 

4. 代码实现

在Spring配置文件中配置PersistenceAnnotationBeanPostProcessor,以使Spring能识别JPA的annotation。

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

定义Java实体类,使用JPA的annotation标记:

@Entity
@Table(name = "UserTable")
public class User implements Serializable {
  private static final long serialVersionUID = -2680510247379883696L;

  @Id
  @Generated Value(strategy = GenerationType.AUTO)
  private int id;

  private String username;

  public int getId() {
    returnthis.id;
  }
  public void setId(int id) {
    this.id = id;
  }

  public String getUsername() {
return this.username;
}
  public void setUsername(String username) {
this.username = username;
}
}

在持久层中使用JPA实现对数据库的访问,使用JPQL (Java Persistence Query Language)来查询数据库:

@PersistenceContext
private EntityManager entityManager;

public User getUserByUsername(String username) {
   Query query = this.getEntityManager().createQuery("select user from login.User user where user.username like :username");
query.setParameter("username", username);
return (User) query.getSingleResult();
}

public void setEntityManager(EntityManager entityManager) {
  this.entityManager = entityManager;
}

public EntityManager getEntityManager() {
  returnentityManager;
}

转载于:https://www.cnblogs.com/xiaonaz/archive/2012/02/29/2373898.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值