jpa spring

jpa hibernate简单配置 中已经将jpa 和hibernate配置好了,但是依然要我们来手动管理entityManager, 接下来就要 加入spring的支持,让spring替我们来管理 entityManager。

所用到的jar包:

        spring 4.0.3 core,

        hibernate 4.2.16(required and jpa),

        spring-data-commons-1.8.0.RELEASE.jar,

        spring-data-jpa-1.6.0.RELEASE.jar, (如果是1.7.2版本的会报异常 NoSuchMethod: registerIfNotAlreadyRegistered())

        commons-logging-1.1.3, 

        slf4j-api-1.7.7

spring.xml

<?xml version="1.0" encoding="UTF-8"?>

<beans ...>
 <!-- 开启组件扫描,即spring会扫描  base-package中的类,

 将@Component, @Repository, @Service, and @Controller注解的bean扫描到spring上下文中 -->

 <context:component-scan base-package="com.jt"/> 

 <!-- jpa 的entitymanagerfactory -->
 <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
  <!-- 这个provider也可以在 persistence.xml 中配置 --> 
  <property name="persistenceProviderClass" value="org.hibernate.ejb.HibernatePersistence"></property>

 </bean> 

 <!-- jpa的事务管理器 -->
 <bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">

  <property name="entityManagerFactory" ref="entityManagerFactory"></property>

 </bean>

 <tx:annotation-driven transaction-manager="transactionManager"/>
 
</beans>

注意在 持久层实现中,用 @PersistenceContext 来注入 entityManager

EmployeeDaoImpl.java

package com.jt.dao.impl;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.springframework.stereotype.Repository;
import com.jt.dao.EmployeeDao;
import com.jt.entity.Employee;
@Repository
public class EmployeeDaoImpl implements EmployeeDao {
 @PersistenceContext
 private EntityManager entityManager;
 @Override
 public void save(Employee employee) {
    entityManager.persist(employee);
 }
}

再进一步用spring data jpa简化,连dao实现都不用写,让spring替我们实现持久层。

在spring.xml加如下配置:

<!-- 让spring 来实现base-package 中的持久层接口 -->
 <jpa:repositories base-package="com.jt.dao" entity-manager-factory-ref="entityManagerFactory"
  transaction-manager-ref="transactionManager"></jpa:repositories>

EmployeeDaoJpa.java

package com.jt.dao;
import org.springframework.data.repository.Repository;
import com.jt.entity.Employee;
public interface EmployeeDaoJpa extends Repository<Employee, Integer>{
 void save(Employee employee);
 
 Employee findByEmployeeId(Integer empId);
}

然而,Repository并没有提供任何方法,业务模块多的时候,每一个dao都要增删改查方法,非常麻烦,这时可以继承 CrudRepository 内置了10个 CRUD方法,如果需要分页,可以继承 PagingAndSortingRepository

参考:使用 Spring Data JPA 简化 JPA 开发

猜你喜欢

转载自my.oschina.net/u/2250875/blog/386985