jpa spring

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

所用到的jar包:spring

        spring 4.0.3 core,api

        hibernate 4.2.16(required and jpa),ide

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

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

        commons-logging-1.1.3, .net

        slf4j-api-1.7.7hibernate

spring.xmlcode

<?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 来注入 entityManagercomponent

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 开发

相关文章
相关标签/搜索