• Hibernate知识总结(一)——Hibernate原理概述


    一、Hibernate是什么:

      它是一个持久化框架,它对JDBC进行了轻量级的封装,简化对数据库的操作,提高开发效率。和另一个持久化框架MyBatis一样,他们操作数据库都是通过一个session对象来进行的,session是由sessionFactory生产的,sessionFactory是通过读取配置文件(hibernate.cfg.xml)而创建的。

    二、Hibernate配置文件:

    核心配置文件:hibernate.cfg.xml

      它是Hiberante的核心配置文件。在该文件里需配置要连接的数据库的URL数据库用户信息JDBC驱动数据库方言(为不同的数据库提供支持),每个实体类的映射等。

    映射类: *.java

      映射类中的属性和数据库表中的字段是对应的。

    映射文件: *.hbm.xml

      映射类在数据库表中的映射。该文件可以通过工具自动生成。

    三、Hibernate运行过程:

    1.通过Configuration().configure();读取并解析hibernate.cfg.xml配置文件

    2.由hibernate.cfg.xml中的<mappingresource="com/xx/User.hbm.xml"/>读取并解析映射信息

    3.通过config.buildSessionFactory();//创建SessionFactory

    4.sessionFactory.openSession();//打开Sesssion

    5.session.beginTransaction();//创建事务Transation

    6.persistent operate持久化操作 //一般指Save这个方法

    7.session.getTransaction().commit();//提交事务

    8.关闭Session

    9.关闭SesstionFactory

    四、Hibernate事务管理:

      在刚开始学Hibernate时你一定很疑惑为什么在操作数据时要创建事务?

      为什么呢?

      其实事务是程序执行的单元,表示这段代码要么全做完,要么不做。在实际场景中有很多应用,例如A银行卡往B卡里转账100元这件事,首先应当在数据库里给A卡减100,然后往B卡里增加100。但是如果程序运行到中间突然被迫中断,那么会出现A少了100,而B没收到钱的结果,显然这种情况出现是种灾难。而用了事务Transaction之后的情况是这样的:

      首先开启事务(tran=session.beginTransaction()),使接下来操作数据库等动作成为一个不可分割的整体执行单元;然后操作数据库;然后提交事务(tran.commit())。若动作在执行过程中遇到了问题或者突然中断,此时需要回滚事务(commit.rollback()),回到所有动作执行前的状态。加入转账时突然中断,则事务回滚的意思就是说虽然B卡还没收到钱,但是A卡也不会少100元。

      这里需要说明的是Hibernate是对JDBC的轻量级封装,它本身没有事务管理能力,所以Hibernate事务管理底层是由JDBC Connection或JTA(Java Transaction API)实现的。他们两者的最大的区别是JDBC Connection实现的事务管理是connection生命周期内的,也就是单数据源的,对数据库的操作只能由一个session完成,再关闭session.close()前必须tran.commit();但是JTA不同了,它是用于分布式跨数据库的情况中,可以操作多个数据库,也就是说可以有多个session。等session1和session2两个对数据库的操作都完成后再提交事务。

      JDBC事务是由Connection控制的,但JTA事务是由容器内的事务管理器管理的,但Tomcat是不能管理JTA容器的,所以若使用JTA事务,一般用Weblogic,JBoss等容器。

    public void saveUser(){
    
        Session session1 = sessionFactory.openSession();
        Transaction tran = session.beginTransaction();
        
        session1.save(user1);  
        session1.close(); 
        
        Session session2 = sessionFactory.openSession();
        session2.save(user2);
        session.close();  
        
        tran.commit();   //等session1和session2两个对数据库的操作都完成后,再提交事务。

     五、Hibernate的缓存机制:

    这两篇博客整理得很好:

      http://www.cnblogs.com/wean/archive/2012/05/16/2502724.html

      http://www.cnblogs.com/jifeng/archive/2013/03/03/2941189.html

  • 相关阅读:
    Vue的基本使用
    django中的跨表查询梳理
    docker安装及配置
    大数据分析(一)探索性分析
    搜索引擎-一种提示词推荐算法
    shell变量详解
    机器学习之寻找KMeans的最优K
    大数据系统之监控系统(二)Flume的扩展
    大数据系统之监控系统(一)
    大数据系统之系统设计
  • 原文地址:https://www.cnblogs.com/wangerxiansheng/p/4147111.html
Copyright © 2020-2023  润新知