Spring:Spring 中集成JPA;

2014-11-23 23:41:22 · 作者: · 浏览: 0
1、使用应用程序管理类型的JPA:

以下是典型的persistence.xml---持久化单元


 
  
		
    
    
     com.habuma.spitter.domain.Spitter
     
    
     com.habuma.spitter.domain.Spittle
     
     
      
      
      
      
     
   
	
  

	
  
		
   
	
  

2、使用容器管理类型的JPA: <常用的方式>

 
  
		
   
   
		
   
   
	
  

下是Spring提供的多个JPA提供商
EclipseLinkJpaVendorAdapter
HibernateJpaVendorAdapter
OpenJpaVendorAdapter
TopLinkJpaVendorAdapter


 
  
		
   
   
		
   
		
   
		
   
	
  

 IBM DB2 	DB2
		Apache Derby   DERBY
		H2 		H2
		Hypersonic	 HSQL
		INFORMIX 	INFORMIX
		MYSQL 	MYSQL
		Oracle 		ORACLE
		PostgresQL 	POSTGRESQL
		Microsoft SQL 	Server SQLSERVER
		Sybase 	SYBASE


 如果服务器中已经创建好了EntityManagerFactory,可以通过JNDI查找:
	
  


编写基于JPA的DAO:

Spring也对jpa集成提供了JpaTemplate模板,以及对应的dao支持JpaDaoSupport,但是为了提供更纯粹的JPA方式,基于模板的JPA已经弃用了。
鉴于纯粹的JPA方式远胜于基于模板的JPA,所以本章重点关注如何构建不使用Spring的JPA DAO。


 import java.util.List;
	import javax.persistence.EntityManager;
	import javax.persistence.PersistenceContext;
	import org.springframework.dao.DataAccessException;
	import org.springframework.stereotype.Repository;
	import org.springframework.transaction.annotation.Transactional;
	import com.habuma.spitter.domain.Spitter;
	import com.habuma.spitter.domain.Spittle;
	
	@Repository("spitterDao")  //捕获异常
	@Transactional  //事物管理
	public classJpaSpitterDaoimplementsSpitterDao{
	
	private static final String RECENT_SPITTLES= "SELECTsFROMSpittles";
	private static final String ALL_SPITTERS= "SELECTsFROMSpitters";
	private static final String SPITTER_FOR_USERNAME= "SELECTsFROMSpittersWHEREs.username=:username";
	private static final String SPITTLES_BY_USERNAME= "SELECTsFROMSpittlesWHEREs.spitter.username=:username";
	
	@PersistenceContext //注入EntityManager em
	private EntityManager em;
	
	public voidaddSpitter(Spitter spitter){
		em.persist(spitter);
	}
	public SpittergetSpitterById(long id){
		returnem.find(Spitter.class,id);
	}
	public voidsaveSpitter(Spitter spitter){
		em.merge(spitter); //更新
	}
	...
	}