本例实现的是Spring注入JPA 和 使用JPA事务管理。JPA是sun公司开发的一项新的规范标准。在本质上来说,JPA可以看作是Hibernate的一个子集;然而从功能上来说,Hibernate是JPA的一种实现。

  在web开发的过程中,使用hibernate进行数据库连接、事务等的管理。当然也可以使用JPA替换Hibernate是实现这些功能。

  一、使用Spring来注入JPA

    之前,在本人博客(http://www.cnblogs.com/demoMeng/)中已经进行了hibernate的搭建和后期的是实现。了解到了,获取hibernate中的sessionFactory有两种方式。

    一种是自己手动获取src目录下hibernate.cfg.xml配置文件:(在dao层面的代码)

        SessionFactory sessionFactory = new Configuration().configure("hibernate.cfg.xml").buildSessionFactory();

    另外一种是使用spring注入,并且可以删除src目录下的配置文件:

      在spring的配置文件applicationContext.xml文件中进行sessionFactory和dataSource的bean的配置:之后在dao层面的实现类中定义一个属性为SessionFactory,使用spring注入

          同理,使用JPA也有这两中方式来是实现。先前,本人博客中已进行了JPA第一种的实现(手动书写代码读取JPA配置文件):http://www.cnblogs.com/demoMeng/p/5853583.html,所以在此,进行第二种使用spring注入的方式是实现获取EntityManagerFactory。

      1、首先:在spring配置文件创建一个bean标签,目的创建一个EntityManagerFactory,这里不同于sessionFactory的bean,因为这里读取的是src目录下的META-INF目录下的persistence.xml 即JPA的配置文件,所以在下面设置的是持久化单元名"myJpa",对应JPA配置文件中的单元名字。

      <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
   <property name="persistenceUnitName" value="myJpa"/>
</bean>

      JPA的配置文件 :persistence.xml,这里的具体不做过多的解释,如果有疑问,请上网查找资料。

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> <persistence-unit name="myJpa" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>entity.Product</class>

<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5Dialect"/>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="123456"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/ProductDB"/>
<property name="hibernate.show_sql" value="true"></property>
<property name="hibernate.format_sql" value="true"></property>
<property name="hibernate.connection.autocommit" value="false"/>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties> </persistence-unit>
</persistence>

        

       2、最后:在dao层面设置sessionFactory成员属性。

                

                      在这里,可以使用spring的注解,或者是使用bean注入的方式,这里使用的spring的注入进行注入。使用spring注解需要在spring配置文件中添加一个注解的解析器:,这个@Qualifier("entityManagerFactory")注解中的entityManagerFactory对应的是spring配置文件中JPA配置的entityManagerFactory的id属性值。

      二、添加JPA的事务管理

         1、首先建立在之前使用spring注入JPA的基础之上,再加入JPA的事务管理。好处 不需要手动开启、提交事务和关闭资源,因为这些都是重复的代码,做的事情都是同一样的。所以可以交给事务来管理。

          首先:在spring配置文件applicationContext.xml中添加事务管理,如下 

            <bean id="txManager" class="org.springframework.orm.jpa.JpaTransactionManager">
<property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean> <tx:annotation-driven transaction-manager="txManager"/>

          其次:在dao层面加上注解@Transactional。这个注解需要加载类上。并且在这个dao类上加上一个属性:之后就可以直接使用这个entityManager进行CURD操作。

          这个属性: 的定义是建立在JPA的事务管理之上的,当web容器读取spring配置文件中的entityManagerFactory后会自动创建一个entityManager,然后根据在dao类中定义的这个属性进行注入,和上面的定义EntityManagerFactory不同。具体的可以自己进行尝试。  

  


      谢谢浏览!

        

Spring注入JPA+JPA事务管理的更多相关文章

  1. JPA和事务管理

    JPA和事务管理 很重要的一点是JPA本身并不提供任何类型的声明式事务管理.如果在依赖注入容器之外使用JPA,事务处理必须由开发人员编程实现. 123456789101112UserTransacti ...

  2. 全面分析 Spring 的编程式事务管理及声明式事务管理

    开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...

  3. 全面分析 Spring 的编程式事务管理及声明式事务管理--转

    开始之前 关于本教程 本教程将深入讲解 Spring 简单而强大的事务管理功能,包括编程式事务和声明式事务.通过对本教程的学习,您将能够理解 Spring 事务管理的本质,并灵活运用之. 先决条件 本 ...

  4. Spring企业级程序设计 • 【第4章 Spring持久化层和事务管理】

    全部章节   >>>> 本章目录 4.1 配置数据源资源 4.1.1 JdbcTemplate介绍 4.1.2通过ComboPooledDataSource创建数据源 4.1. ...

  5. Spring整合hibernate4:事务管理

    Spring整合hibernate4:事务管理 Spring和Hibernate整合后,通过Hibernate API进行数据库操作时发现每次都要opensession,close,beginTran ...

  6. Spring基于AOP的事务管理

                                  Spring基于AOP的事务管理 事务 事务是一系列动作,这一系列动作综合在一起组成一个完整的工作单元,如果有任何一个动作执行失败,那么事务 ...

  7. spring声明式的事务管理

    spring支持声明式事务管理和编程式事务管理两种方式. 编程式事务使用TransactionTemplate来定义,可在代码级别对事务进行定义. 声明式事务基于aop来实现,缺点是其最细粒度的事务声 ...

  8. Spring框架——JDBC与事务管理

    JDBC JDBCTemplate简介 XML配置JDBCTemplate 简化JDBC模板查询 事务管理 事务简介 Spring中的事务管理器 Spring中的事务管理器的不同实现 用事务通知声明式 ...

  9. spring的annotation-driven配置事务管理器详解

    http://blog.sina.com.cn/s/blog_8f61307b0100ynfb.html ——————————————————————————————————————————————— ...

  10. 使用注解实现Spring的声明式事务管理

    使用注解实现Spring的声明式事务管理,更加简单! 步骤: 1) 必须引入Aop相关的jar文件 2) bean.xml中指定注解方式实现声明式事务管理以及应用的事务管理器类 3)在需要添加事务控制 ...

随机推荐

  1. HttpClient发送Get和Post请求

    package JanGin.httpClient.demo; import java.io.IOException; import java.io.UnsupportedEncodingExcept ...

  2. Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数

    特殊变量列表 变量 含义 $0 当前脚本的文件名 $n 传递给脚本或函数的参数.n 是一个数字,表示第几个参数.例如,第一个参数是$1,第二个参数是$2. $# 传递给脚本或函数的参数个数. $* 传 ...

  3. 二分 题目 压缩打包 Special Judge? 不不不 当然不是

    http://noi.openjudge.cn/ch0111/ No 题目 分数 01 查找最接近的元素 10 3176 02 二分法求函数的零点 10 2181 03 矩形分割 10 1420 04 ...

  4. javascript中三种典型情况下this的含义

    this本意:基于函数的执行环境绑定. 1)一般函数内部,返回的是window(作用域链中的第二层全局作用域) function test() { return this; } alert(test( ...

  5. Php:学习笔记(一):版本选择

    (注:本文来自网络) 超过75%的网站使用了PHP作为开发语言,wordpress,phpmyadmin和其他一些开源项目的盛行,带来了一大批的长尾用户.然而,他们一般安装之后却很少升级.下图是目前P ...

  6. 在update语句中使用子查询

    在update 中的 where 子句中使用子查询: UPDATE mg_page_log as a  SET  page_num=1 WHERE id in( SELECT id  from mg_ ...

  7. Cocos2d 利用继承Draw方法制作可显示三维数据(宠物三维等)的三角形显示面板

    很久没有写博客了,这段时间比较忙,又是搬家又是做自己的项目,还有太多琐碎的事情缠身,好不容易抽出时间把最近自己做的一些简单例子记录一下. 在我的项目中,我需要一个显示面板来显示游戏中的一个三维数据,例 ...

  8. HDU2818 并查集

    Building Block Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  9. asp.net[web.config] httphandlers 与实现自由定义访问地址

    今天一起来看一个简单的例子,主要是用来实现一个映射功能,我们一般访问一个网址的时候比如是这样的http://localhost:6166/WebSite1/api/request.aspx?strte ...

  10. Jquery 系列(1) 基本认识

    本系列Jquery所用测试Demo版本是<uncompressed,development jQuery 1.11.3> 最新的jquery包可以从官网下载请参照http://jquery ...