• Spring整合Hibernate


    Spring整合Hibernate
    1到底整合什么?
    I:为了让Spring的IOC容器去生成SessionFactory
    II:为了让Hibernate能使用Spring的声明式事务
    2如何整合(整合步骤)
    1加入Hibernate的必须jar包,然后再加入commons-logging-1.1.3.jar,和Mysql的jar包mysql-connector-java-5.1.7-bin.jar

    2配置Hibernate配置文件(数据源的配置不用在这里配置了,连接数据库参数也不用在这里配置了,在这个文件配置数据库方言、生成表策略等、、、、)

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
            <!-- 配置 hibernate 的基本属性 -->
            <!-- 1. 数据源需配置到 IOC 容器中, 所以在此处不再需要配置数据源 -->
            <!-- 2. 关联的 .hbm.xml 也在 IOC 容器配置 SessionFactory 实例时在进行配置 -->
            <!-- 3. 配置 hibernate 的基本属性: 方言, SQL 显示及格式化, 生成数据表的策略以及二级缓存等. -->
            <property name="hibernate.dialect">org.hibernate.dialect.MySQL5InnoDBDialect</property>
            <property name="hibernate.show_sql">true</property>
            <property name="hibernate.format_sql">true</property>
            <property name="hibernate.hbm2ddl.auto">update</property>
            <!-- 配置 hibernate 二级缓存相关的属性. -->
        </session-factory>
    </hibernate-configuration>

    3在Spring的配置文件配置数据源(例如Spring中配置C3p0那样,数据源也是一个Bean,所以也用Bean节点来配置)

    <!-- 配置数据源 -->
        <!-- 加载数据源文件 -->
        <context:property-placeholder location="classpath:db.properties"/>
        <!-- 配置数据源属性 -->
        <bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
            <property name="user" value="${jdbc.user}"></property>
            <property name="password" value="${jdbc.password}"></property>
            <property name="jdbcUrl" value="${jdbc.jdbcUrl}"></property>
            <property name="driverClass" value="${jdbc.driverClass}"></property>
        </bean>

    4在Spring配置文件中配置SessionFactory
    (1告诉SessionFactory使用哪个数据源吧,
    2告诉SessionFactory hibernate.cfg.xml文件在哪里
    3告诉Sessionfactory 持久化类的映射文件在哪里(能同一放在一个位置??))

    <!-- 配置sessionFactory:通过 Spring 提供的 LocalSessionFactoryBean 进行配置 -->
        <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
            <!-- 使用哪一个数据源 -->
            <property name="dataSource" ref="dataSource"></property>
            <!-- 配置 hibernate 配置文件的位置及名称,就是生成SessionFactory时的约束 -->
            <property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
            <!-- 告诉SessionFactory持久化类的配置文件在哪里 -->
            <property name="mappingLocations" value="classpath:com/atguigu/spring/hibernate/entities/*.hbm.xml"></property>
            
        </bean>

    5代码实现(就是到底怎么用呢)

    /*
         * 1首先要获取SessionFactory吧,这个直接在IOC拿即可,使用Autowire注解关联,这样会自动加载SessionFactory实例
         * 2要获取Session吧,但是Session还是用OpenSession方法??不是,这里应该使用线程Session,
         * 因为如果是opensession会导致产生了很多Session,会造成内存溢出和对象滥用
         * 3以前的Session是和Hibernate的事务(绑定在一起的),但是既然我们整合到 了Spring,那就应该使用Spring的声明式事务吧
         * 所以要记得调用Session对象的方法里,都应该绑定事务,要不然会报错
         */
        @Autowired
        private SessionFactory sessionFactory;--取得SessionFactory
    public Session getSession() { --取得Session return sessionFactory.getCurrentSession(); }

    * Spring hibernate 事务的流程
    * 1. 在方法开始之前
    * ①. 获取 Session
    * ②. 把 Session 和当前线程绑定, 这样就可以在 Dao 中使用 SessionFactory 的
    * getCurrentSession() 方法来获取 Session 了
    * ③. 开启事务
    *
    * 2. 若方法正常结束, 即没有出现异常, 则
    * ①. 提交事务
    * ②. 使和当前线程绑定的 Session 解除绑定
    * ③. 关闭 Session
    *
    * 3. 若方法出现异常, 则:
    * ①. 回滚事务
    * ②. 使和当前线程绑定的 Session 解除绑定
    * ③. 关闭 Session
    */

  • 相关阅读:
    Postman教程大全
    Java关键字(一)——instanceof
    RocketMQ(1)-架构原理----通用MQ知识点
    CAP理论的理解
    Buy the Ticket HDU
    高斯消元求多元一次方程(讲解+板子)
    P3709 大爷的字符串题 莫队
    P4074 [WC2013]糖果公园 树上莫队带修改
    java的静态代码块和类变量的隐式覆盖
    SP10707 COT2
  • 原文地址:https://www.cnblogs.com/jeremy-blog/p/4060299.html
Copyright © 2020-2023  润新知