配置JPA
Spring JPA提供了两种方法创建JPA EntityManagerFactory
<beans>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="myPersistenceUnit" />
</bean>
</beans>
FactoryBean
创建的EntityManagerFactory适用于仅通过JPA进行数据访问的环境。由于使用了PersistenceProvider自动侦测机
制,所以只能从默认路径classpath:META-INF/persistence.xml中读取配置信息。
<beans>
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="someDataSource" />
<property name="loadTimeWeaver">
<bean class="org.springframework.instrument.classloading.SimpleLoadTimeWeaver" />
</property>
</bean>
</beans>
FactoryBean
提供了对JPA
EntityManagerFactory的完整控制,非常适合那种有简单定制需要的环境。你可以处理多个persistence.xml配置文件;覆盖
persistence.xml文件的默认路径;可以传递Spring托管的JDBC DataSource给JPA
PersistenceProvider,用来替代persistence.xml中的JDBC配置(这个Spring托管的DataSource通常被
作为nonJtaDataSource传送给PersistenceProvider,并且覆盖persistence.xml中相同的
nonJtaDataSource)。
数据访问
基于JPA的DAO可以通过三种方式进行数据访问JpaDaoSupport,JpaTemplate和plain
JPA。其中JpaTemplate是plain
JPA的封装,而JpaDaoSupport又是JpaTemplate的封装。无疑,使用不对Spring产生任何依赖的Plain
JPA的API进行编程是最好选择。
public class ProductDaoImpl implements ProductDao {
private EntityManager entityManager = null;
@PersistenceContext
public void setEntityManager(EntityManager entityManager) {
this.entityManager = entityManager;
}
public Collection loadProductsByCategory(String category) {
EntityManager em= entityManagerFactory.createEntityManager();
Query query = em.createQuery("from Product as p where p.category = :category");
query.setParameter("category", category);
return query.getResultList();
}
}
注意,必须激活PersistenceAnnotationBeanPostProcessor功能才能让Spring识别@PersistenceContext注解。
<beans>
<!-- JPA annotations bean post processor -->
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
<bean id="myProductDao" class="product.ProductDaoImpl" />
</beans>
异常转化
Spring提供了一个允许通过使用@Repository注解进行透明的异常转化的解决方案。
@Repository
public class ProductDaoImpl implements ProductDao {
...
}
<beans>
<!-- Exception translation bean post processor -->
<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />
<bean id="myProductDao" class="product.ProductDaoImpl" />
</beans>
后置处理器将自动的寻找所有的异常转化器(PersistenceExceptionTranslator这个接口的实现类)并通知所有打上@Repository注解的bean,从而能够使得被找到的异常转化器能够在抛出异常时做相应的异常转化工作。
总结来说:DAO能够基于普通的Java持久层API和注解来实现,但同样也能享受到由Spring管理事务、IoC和透明的异常转化(转化成为Spring的异常体系)等好处。
分享到:
相关推荐
Spring Boot使用spring-data-jpa配置Mysql多数据源,可用版本
采用hibernate 4.3.6,spring 4.0.6 ,实现jpa配置,简单易懂明了。压缩文件中包含jpa依赖的hibernate包,如果下载者希望运行,需要自己写实体类。压缩包中含有精简的配置。
Spring Boot+Jpa多数据源配置Demo,可同时支持多种数据库,不同数据库,同时支持不同数据库的JdbcTemplate
spring springmvc jpa配置文件 内容详细简单易懂 可直接使用
声明:该应用仅仅是技术研究:Spring Data JPA的配置和常见api的使用&maven构建项目,其他技术不在此研究 内涵sql和各种Spring Data JPA测试和案例,导入&创建DB,配置好maven便可运行 maven构建项目&问题:...
NULL 博文链接:https://mybar.iteye.com/blog/1863390
很简单的,只是搭建了平台,可以作为blank使用
Spring JPA 配置类包集合 方便大家使用
'SpringDataJPA从入门到精通'以SpringBoot为技术基础 从入门到精通 由浅入深地介绍SpringDataJPA的使用。有语法 有实践 有原理剖析。'SpringDataJPA从入门到精通'分为12章 内容包括整体认识JPA、JPA基础查询方法、...
在Spring Boot 2.x版本中可以非常轻松、快速搞定持久层的开发动作,配置比SpringBoot+MyBatis还少,偶觉得它除了执行效果不如MyBatis外,在使用效率的情况下,使用Spring Data JPA的开发速度会比较MyBatis还快。...
Spring mvc + jpa +mysql5.6 配置,项目可运行。其中有两个案例,包含增删改查,复合主键开发 查询列表中,下拉列表显示名称所采用方式数据量大的时候存在问题,建议使用多表关联的方式。适合菜鸟学习。
如果使用spring mvc 3.2+和servelt 3+容器(比如tomcat8),那么web.xml和applicationContext.xml都不是必须的,可使用基于注解的配置: 基于配置的集成例子源代码:
spring+springMVC+spring-data-jpa+freemarket/json
Spring2.5整合JPA实例 博文链接:https://zmx.iteye.com/blog/556452
struts2+jpa+spring2.5配置基础框架,直接运行即可
具有详细的SpringDataJPA配置及文档说明,让你更快的理解SpringDataJPA持久层方案
持久层框架:Spring boot Jpa 安全框架:Spring Security 缓存框架:Redis 日志打印:logback+log4jdbc 接口文档 swagger2 其他:fastjson,aop,MapStruct等。 页面框架:Vue 前端源码:eladmin-qt 后端源码:el...
Struts2+Spring+JPA整合配置实例,及增删改查实例 (jar包放在另外一个文件中,超过15M了,请从新下载)
本文是介绍Spring-data-jpa的PPT的学习笔记,整理了Spring Data JPA相关知识配置和实践源码. 本文介绍知识点有: JPA与Spring的相关配置 JPA 方法名常用查询 JPA 使用@Query注解实现JPQL和本地自定义查询 JPA API 条件...
spring boot与cassandra集成,使用JPA方式。