spring2中jpa的配置和使用
配置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的异常体系)等好处。
转载于:https://www.cnblogs.com/chenying99/archive/2012/07/29/2613989.html
spring2中jpa的配置和使用相关推荐
- SpringBoot 中 JPA 的使用
前言 第一次使用 Spring JPA 的时候,感觉这东西简直就是神器,几乎不需要写什么关于数据库访问的代码一个基本的 CURD 的功能就出来了.下面我们就用一个例子来讲述以下 JPA 使用的基本操作 ...
- SprintBoot中JPA的使用
前言 第一次使用Sprint JPA的时候,感觉这东西简直就是神器,几乎不需要写什么关于数据库访问的代码一个基本的CURD的功能就出来了.下面我们就用一个例子来讲述一下JPA使用的基本操作. 新建项目 ...
- springmvc jpa_使用JavaConfig的SpringMVC4 + Spring Data JPA + SpringSecurity配置
springmvc jpa 在本文中,我们将看到如何使用JavaConfig配置和集成SpringMVC4,带有Hibernate的Spring Data JPA和SpringSecurity. 1. ...
- 使用JavaConfig的SpringMVC4 + Spring Data JPA + SpringSecurity配置
在本文中,我们将看到如何使用JavaConfig配置和集成SpringMVC4,带有Hibernate的Spring Data JPA和SpringSecurity. 1.首先让我们在pom.xml中 ...
- Hibernate JPA 缓存配置
Hibernate JPA 缓存配置 1.一级缓存 一级缓存指的是 EntityManager 级的缓存,对于这样的缓存几乎是一直存在的,也就是说只要用户进行JPA的操作,那么就永远都会存在有一级缓存 ...
- SpringBoot 中JPA集成PostgreSql(详细步骤)避坑!
SpringBoot 中JPA集成PostgreSql(详细步骤) 什么是JPA?(Java Persistence API) Spring Data JPA, part of the larger ...
- Laravel中Redis的配置和使用
引入redis composer require predis/predis 会在composer.json中引入最新版本的predis composer update 把下载predis 库加入到v ...
- 在CentOS 7中安装与配置Tomcat-8方法
安装前提 在CentOS 7中安装与配置JDK8 安装tomcat apache-tomcat-8.0.14.tar.gz文件上传到/usr/local中执行以下操作: [root@localhos ...
- asp.net中web.config配置节点大全详解
web.config 文件查找规则: (1)如果在当前页面所在目录下存在web.config文件,查看是否存在所要查找的结点名称,如果存在返回结果并停止查找. (2)如果当 ...
- 在Web.config或App.config中的添加自定义配置
.Net中的System.Configuration命名空间为我们在web.config或者app.config中自定义配置提供了完美的支持.最近看到一些项目中还在自定义xml文件做程序的配置,所以忍 ...
最新文章
- JIPB:白洋组综述根系微生物组群落构建及其对植物适应性的贡献
- 网页设计过程中一般命名规则
- 深浅拷贝垃圾回收机制四大高阶函数
- 戴尔笔记本win8全新安装
- 【大会】5G现象级应用倒计时24个月
- unity模型任意无限切割插件
- mysql控制台导出查询结果_MySQL 命令行导出、导入Select 查询结果
- c# abstract抽象类与继承类子类的构造函数_base
- sql数据库自动增量备份_SQL自动增量
- webpack 多入口打包配置示例
- python函数手册pdf_Python3.8.1标准库参考中文手册 PDF 高质量版
- r4烧录卡内核安装_R4烧录卡NDS内核,绝对可用
- 证明您履历表经验的防弹五步法
- 【Git】git命令git clone 报错的解决方法集合
- 为知笔记 | 3 分钟创建格式美美的笔记
- 计算机新建用户如何删除,win10系统如何添加和删除用户?windows10删除用户教程...
- 阿里云服务器如何初始化云盘(跟换系统)?初始化云盘和跟换操作系统的区别?
- 苦练基本功-计算机网络基础-TCP建立连接
- 京东和区块链的那些事儿
- 银河麒麟系统设置变更
热门文章
- 浅析java垃圾回收机制
- pyhton基础中的要点一
- Linux篇---Grep和正则匹配
- Jan 11 - Contains Duplicate II; Array; Traverse; HashMap; HashSet;
- Android 常用的adb命令
- child-selector解释
- 第三部分:Android 应用程序接口指南---第一节:应用程序组件---第一章1-1.Fragment...
- 利用WCF与Android实现图片上传并传参
- windows 子系统认识(1)
- intellij idea下载安装以及创建项目(输出Hello World)