• 在Spring中配置Hibernate和单独配置Hibernate的区别


    首先说下Spring和Hibernate的几个特征:

    Spring:自动依赖注入,类都可以被当成bean使用。

    Hibernate:会话工厂sessionfactory,事务管理器transaction。

    如果只使用Hibernate,那么当你操作数据库的时候,需要敲诸如:

    Configuration conf = new Configuration().configure();

    SessionFactory sf = conf.buildSessionFactory();

    Session sess = sf.openSession();

    Transaction tx = sess.beginTransaction();

    然后在session里操作数据库方法,在tx里提交。

    但是当你使用Spring,在Spring里配置Hibernate时候,

    首先是会话工厂可以被当作一个bean来写入Spring配置文件当中,例如:

    <bean id=”dataSource” class=”org.apache.commons.dbcp.BasicDataSource”>
    <property name=”url” value=”jdbc:jtds:sqlserver://localhost:1433/test”>
    </property>
    <property name=”driverClassName” value=”net.sourceforge.jtds.jdbc.Driver”>
    </property>
    <property name=”username” value=”sa”></property>
    <property name=”password” value=”123456″></property>
    </bean>
    <bean id=”sessionFactory” class=”org.springframework.orm.hibernate4.LocalSessionFactoryBean”>
    <property name=”dataSource”>
    <ref bean=”dataSource” />
    </property>
    <property name=”hibernateProperties”>
    <props>
    <prop key=”hibernate.dialect”>
    org.hibernate.dialect.SQLServerDialect
    </prop>
    </props>
    </property>
    <property name=”mappingResources”>
    <list>
    <value>com/domain/Users.hbm.xml</value>
    </list>
    </property>
    </bean>

    在sessionfactory这个bean里配置数据源和各种属性。当然这个类是Spring包中的,是Spring提供的功能。

    然后,Spring同样也可以以bean方式提供给Hibernate一个事务管理器,例如:

    <bean id=”transactionManager”
    class=”org.springframework.orm.hibernate4.HibernateTransactionManager”>
    <property name=”sessionFactory” ref=”sessionFactory” />
    </bean>
    <tx:annotation-driven transaction-manager=”transactionManager” />

    然后是事务拦截器,将事务管理器的bean注入其中,例如:

    <bean id=”transactionInterceptor”
    class=”org.springframework.transaction.interceptor.TransactionInterceptor”>
    <!– 事务拦截器bean需要依赖注入一个事务管理器 –>
    <property name=”transactionManager” ref=”transactionManager” />
    </bean>

    再是可以自动生成业务代理的bean,这个bean将使用事务拦截器,例如:

    <!– 定义BeanNameAutoProxyCreator –>
    <bean
    class=”org.springframework.aop.framework.autoproxy.BeanNameAutoProxyCreator”>
    <!– 指定哪些bean自动生成业务代理 –>
    <property name=”beanNames”>
    <!– 下面是所有需要自动创建事务代理的bean –>
    <list>
    <value>mgr</value>
    </list>
    <!– 此处可增加其他需要自动创建事务代理的bean –>
    </property>
    <!– 下面定义BeanNameAutoProxyCreator所需的事务拦截器 –>
    <property name=”interceptorNames”>
    <list>
    <!– 此处可增加其他新的Interceptor –>
    <value>transactionInterceptor</value>
    </list>
    </property>
    </bean>

    那么,我们在其中写的自动创建事务代理的id为mgr的bean是这样的:

    <bean id=”mgr” class=”com.service.impl.ActionManagerImpl”>
    <property name=”usersDAO” ref=”usersDAO” />
    </bean>

    其中,usersDAO会被自动注入。

    我们在usersDAO里不需要像之前要创建配置、会话工厂、事务这么复杂,只需要用getCurrentSession()下的各种方法就可以了。会帮你自动获取当前会话。

    配置起来过程会略多,但是总体写的代码绝对比单独用hibernate然后在DAO类里写的代码要少。

  • 相关阅读:
    高精度计算
    c++ sort
    算法分类小结
    二叉树层序遍历
    clion windows c++环境配置 mingw
    kafka,filebeat 配置
    centos7 源码安装mysql5.7
    如何优雅的生成及遍历python嵌套字典
    Java Swing 绝对布局管理方法,null布局【图】
    python3.4+pymssql 中文乱码问题解决
  • 原文地址:https://www.cnblogs.com/orisonchan/p/5061236.html
Copyright © 2020-2023  润新知