zoukankan      html  css  js  c++  java
  • Spring与Hibernate整合

    一 概述

    1.整合目的

    在Hibernate中,SessionFactory是一个重量级对象,创建与初始化会耗费大量的资源,应该减少对象的创建次数,并且SessionFactory线程安全,可以采用单例模式,如果将对象的创建任务交给Spring容器就解决了这个问题。

    二 实现

    1.配置SessionFactory创建类

    Spring提供了LocalSessionFactoryBean负责创建SessionFactory对象:

    <bean id="sessionFactory"class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
        <property name="dataSource" ref="c3p0" />
        <property name="hibernateProperties">
           <props>
               <prop key="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</prop>
               <prop key="hibernate.show_sql">true</prop>
               <prop key="hibernate.format_sql">true</prop>
               <prop key="hibernate.hbm2ddl.auto">update</prop>
               <prop key="hibernate.current_session_context_class">
    org.springframework.orm.hibernate5.SpringSessionContext</prop> </props> </property> <property name="mappingDirectoryLocations" value="com/spring_hibernate/integration/demo01" /> </bean>
    • mappingDirectoryLocations:配置映射文件,只需要指明映射文件的根路径即可,系统会自动加载此路径下的映射文件。
    • current_session_context_class:用来指定Session对象所处的上下文环境,即Session的创建者,Spring与Hibernate整合以后,Session对象就由Spring容器创建与管理。

    2.配置事务管理器

    Spring为兼容Hibernate提供的事务管理器为HibernateTransactionManager:

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

    Spring为不同的操作数据库的方式提供了不同的数据源,JDBC与Mybatis共享DataSourceTransactionManager。

    3.配置事务

    Spring提供了两种事务,一种基于Spring自身AOP的事务,一种基于AspectJ的事务,由于后者比前者简单方便,采用后者为Dao服务层配置事务:

    <tx:advice id="advice" transaction-manager="transactionManager">
       <tx:attributes>
          <tx:method name="find*" isolation="DEFAULT" propagation="REQUIRED"read-only="true" />
          <tx:method name="modify*" isolation="DEFAULT" propagation="REQUIRED"rollback-for="exception" />
          <tx:method name="add*" isolation="DEFAULT" propagation="REQUIRED"rollback-for="exception" />
          <tx:method name="remove*" isolation="DEFAULT" propagation="REQUIRED"rollback-for="exception" />
       </tx:attributes>
    </tx:advice>
    <aop:config>
       <aop:pointcut id="p01" expression="execution(* *..demo01.*.*(..))" />
       <aop:advisor advice-ref="advice" pointcut-ref="p01" />
    </aop:config>

    三 注解

    当Hibernate的实体类采用注解注册时,映射文件被取代,因此需要在Spring配置文件中修改映射关系的设定方式,修改为:

    <property name="packagesToScan"value="实体所在的包"/>
  • 相关阅读:
    《Python 源码阅读》之 类型Type
    《Python 源码剖析》之对象
    KMP匹配算法
    Python的递归深度
    js验证手机号
    Jquery 实现 “下次自动登录” 记住用户名密码功能
    js注册读秒进度条
    div+css进度条
    SprignMVC+myBatis整合
    ssm控制输出sql(二)
  • 原文地址:https://www.cnblogs.com/tonghun/p/7231158.html
Copyright © 2011-2022 走看看