http://www.cnblogs.com/tazi/archive/2012/01/04/2311577.html

Spring配置事务的三种方式

步骤:数据源配置-事务配置(xml配置方式或注解方式)

如果要使用注解方式依赖注入sessionFactory到业务Bean中(使用@Resource)或者注入entityManager到业务Bean中(使用@PersistenceContext ),要加入<context:annotation-config/>

1.使用数据源:

<!-- 配置数据源 -->
    <bean id="dataSource"
    class="org.apache.commons.dbcp.BasicDataSource"
    destroy-method="close"
    >
        <property name="driverClassName" value="com.mysql.jdbc.Driver"/>
        <property name="url"
        value="jdbc:mysql://localhost:3306/hib?useUnicode=true&amp;characterEncoding=UTF-8"/>
        <property name="username" value="root"/>
        <property name="password" value="123456"/>
        <property name="initialSize" value="1"/>
        <property name="maxActive" value="100"/>
        <property name="maxIdle" value="2"/>
        <property name="minIdle" value="1"/>
    </bean>

<!-- 数据源事务管理器-->
    <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager" >
        <property name="dataSource" ref="dataSource"/>
    </bean>

<!-- 注解方式配置事务 -->
    <tx:annotation-driven transaction-manager="txManager"/>

2.使用Hibernate。

(1).配置数据源同上。

(2).配置sessionFactory

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource" ref="dataSource"/>
        <property name="mappingResources">
            <list>
                <value>com/tazi/domin/Person.hbm.xml</value>
            </list>
        </property>
        <property name="hibernateProperties">
            <value>
            hibernate.dialect=org.hibernate.dialect.MySQLDialect
            hibernate.show_sql=true
            hibernate.format_sql=true
            hibernate.hbm2ddl.auto=update
            </value>
        </property>
    </bean>

(3).配置事务管理器

<bean id="txManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory" ref="sessionFactory"/>
    </bean>

(4).注解方式配置事务同上。

3.使用JPA

(1).配置持久化数据单元

src/META-INF/persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence 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_1_0.xsd" version="1.0">
   
    <persistence-unit name="jpaPU" transaction-type="RESOURCE_LOCAL">
        <provider>org.hibernate.ejb.HibernatePersistence</provider>
          <properties>
              <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
            <property name = "hibernate.connection.driver_class" value = "com.mysql.jdbc.Driver"/>
            <property name = "hibernate.connection.url" value = "jdbc:mysql://localhost:3306/hib"/>
            <property name = "hibernate.connection.username" value = "root"/>
            <property name = "hibernate.connection.password" value = "123456"/>
            <property name = "hibernate.hbm2ddl.auto" value = "update"/>
          </properties>
    </persistence-unit>
 
</persistence>

(2).配置entityManagerFactory

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

(3).配置事务管理器

<bean id="transactionManager"
        class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory"       ref="entityManagerFactory" />
    </bean>

(4).注解方式配置事务同上。

分析spring源代码

LocalEntityManagerFactoryBean中的方法createNativeEntityManagerFactory()。由以下代码可以看出Spring可以利用JPA的实现产品(这里是Hibernate)来创建实体管理器工厂(EntityManagerFactory)。

protected EntityManagerFactory createNativeEntityManagerFactory()
    throws PersistenceException
  {
   //日志记录省略

PersistenceProvider provider = getPersistenceProvider();
    if (provider != null)
    {
      EntityManagerFactory emf = provider.createEntityManagerFactory(getPersistenceUnitName(), getJpaPropertyMap());
      if (emf == null) {
        throw new IllegalStateException("PersistenceProvider [" + provider + "] did not return an EntityManagerFactory for name '" + getPersistenceUnitName() + "'");
      }

return emf;
    }

return Persistence.createEntityManagerFactory(getPersistenceUnitName(), getJpaPropertyMap());
  }

LocalEntityManagerFactoryBean并没有实现EntityManagerFactory接口,配置它得到EntityManagerFactory对象的原因是它实现了spring框架中的FactoryBean接口,从而Spring可以通过调用接口方法getObject等创建EntityManagerFactory实现者的实例。

spring 配置jdbc/hibernate/jpa相关推荐

  1. Spring配置JDBC连接Orcale、MySql、sqlserver

    阅读指南:本文章主要讲述如何在Spring框架中配置JDBC连接方式连接Oracle.Mysql.SqlServer. 原理如下: 一.导包 连接oracle11g所需的jar包:ojdbc6.jar ...

  2. spring配置JDBC事务

    http://www.iteye.com/problems/2951 Spring+JDBC事务配置 悬赏:10 发布时间:2008-08-19 提问人:charity_lan (初级程序员) < ...

  3. spring配置jdbc连接oracle,mysql,sqlserver

    2019独角兽企业重金招聘Python工程师标准>>> http://mvnrepository.com/ 这个网站可以查询所有maven库的最新版本 一.oracle maven库 ...

  4. spring.jpa配置_使用JPA和Spring 3.1进行事务配置

    spring.jpa配置 1.概述 本教程将讨论配置Spring Transactions ,使用@Transactional批注和常见陷阱的正确方法 . 有关核心持久性配置的更深入讨论,请查看Spr ...

  5. Spring + hibernate + JPA 配置

    最近对hibernate的JPA实现比较感兴趣,在此记录下配置方法,备查. 先上maven依赖包配置,这里使用的是spring3.1.2和hibernate3.6.0 <dependencies ...

  6. Spring Hibernate JPA 联表查询 复杂查询

    (转自:http://www.cnblogs.com/jiangxiaoyaoblog/p/5635152.html) 今天刷网,才发现: 1)如果想用hibernate注解,是不是一定会用到jpa的 ...

  7. primefaces教程_Primefaces,带有JPA的Spring 4(Hibernate 4 / EclipseLink)示例教程

    primefaces教程 Java Persistence API is a standard specification. It provides a persistence model that' ...

  8. Spring基础入门7 - JPA/Hibernate

    1. 数据访问层 (DAO模式) 通常我们的应用都要使用数据,涉及到大量的数据存取, 对于企业级应用,数据存放在关系型数据库是最常用的方案.前文提到Spring MVC将前端展现与业务逻辑分离,为了让 ...

  9. Spring Boot下使用JPA报错:'hibernate.dialect' not set的解决办法

    问题现象: Spring Boot下使用JPA报错:'hibernate.dialect' not set 原因是: 没有设置数据库方言导致的 解决方案: 1.如果配置文件格式为application ...

最新文章

  1. python学习使用
  2. mfc 加密解密_[源码和文档分享]基于MFC实现的AES加密解密程序
  3. Boost:bind绑定数据成员的测试程序
  4. hosts文件中同一个域名两个IP的解析顺序
  5. java.util.Date与 java.sql.Date两个包下Date的区别与联系
  6. 新建android项目导包,Cordova开发App入门(一)创建android项目
  7. vue的使用(引用/创建vue项目)(一)
  8. Django+Jquery+Ajax+验证码登录案例
  9. hyperledger fabric_鼎诚鬼才|超级账本入门(四):HYPERLEDGER 权限管理
  10. 【华为云技术分享】【开发记录】Linux服务器维护常用命令(二)
  11. java post raw_Java raw 请求和获取
  12. Windows Server 2016补丁更新机制
  13. [洛谷P4234]最小差值生成树
  14. python argparse 入门
  15. 信息安全系统设计基础_exp3
  16. 运用Python完成五角星随机颜色的绘制
  17. Python图像识别-Opencv05 色彩
  18. python 实现多核 CPU 并行计算
  19. 办公总结——WPS表格拆分单元格及排序
  20. CAD打印图纸尺寸怎么设置?CAD打印图纸尺寸设置步骤

热门文章

  1. 1.4 Hive和数据库的比较
  2. python获得本机硬件信息
  3. 卷积神经网络——池化层学习——最大池化
  4. Netty实战 IM即时通讯系统(三)Netty环境配置
  5. TMS320F28335之定时器
  6. 【机器视觉】 dev_unmap_prog算子
  7. 【C++】error C2275 “XXXX” 将此类型用作表达式非法
  8. 【Linux】一步一步学Linux网络编程教程汇总(更新中......)
  9. Python安装Whl文件
  10. qt带小数点的数字串显示,Qt-自定义小数点和千位分隔符