很久沒寫文章,隨意找些東西來記錄一下。
Spring 整合 JPA 是很簡單的,只需在 XML 檔案設定數個 Bean 就可以:
先設定好 persistence.xml:
(persistence.xml) download <?xml version="1.0" encoding="UTF-8"?>
<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_2_0.xsd"
version= "2.0" >
<persistence-unit name= "defaultDS" transaction-type= "RESOURCE_LOCAL" >
<provider> org.hibernate.ejb.HibernatePersistence</provider>
<non-jta-data-source> jdbc/ctlok</non-jta-data-source>
<class> com.ctlok.pro.entity.User</class>
<properties>
<property name= "hibernate.dialect" value= "org.hibernate.dialect.MySQL5Dialect" />
</properties>
</persistence-unit>
</persistence>
在 Spring config 加上以下設定
(application-context.xml) download <?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:aop= "http://www.springframework.org/schema/aop" xmlns:zksp= "http://www.zkoss.org/2008/zkspring/core"
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.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.zkoss.org/2008/zkspring/core http://www.zkoss.org/2008/zkspring/core/zkspring-core.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd" >
<context:annotation-config />
<tx:annotation-driven />
<bean class= "org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean class= "org.springframework.orm.jpa.LocalEntityManagerFactoryBean" id= "entityManagerFactory" >
<property name= "persistenceUnitName" value= "defaultDS" />
</bean>
<bean class= "org.springframework.orm.jpa.JpaTransactionManager" id= "transactionManager" >
<property name= "entityManagerFactory" ref= "entityManagerFactory" />
</bean>
</bean>
這樣就可以在 Repoitory bean 內使用 @PersistenceContext 注入 Entity Manager 了:
(UserDao.java) download package com . ctlok . pro . dao ;
import java.util.List ;
import javax.persistence.EntityManager ;
import javax.persistence.PersistenceContext ;
import org.springframework.stereotype.Repository ;
@Repository
public class UserDao {
@PersistenceContext
protected EntityManager em ;
public List < User > findAll (){
return ( List < Entity >) em . createQuery ( "SELECT e FROM User e" , User . class ). getResultList ();
}
}
並可以在 Service bean 使用 @Transactional 令 Spring 自動管理 Transaction:
(UserService.java) download package com . ctlok . pro . service ;
import org.springframework.stereotype.Service ;
import org.springframework.transaction.annotation.Transactional ;
@Service
public class UserService {
@Transactional
public void createUser (){
//..........
}
}