zoukankan      html  css  js  c++  java
  • Hibernate和Mybatis的工作原理以及区别

    一、Mybatis的工作流程图

    (1)、原理详见:

      MyBatis应用程序根据XML配置文件创建SqlSessionFactory,SqlSessionFactory在根据配置,配置来源于两个地方,一处是配置文件,一处是Java代码的注解,获取一个SqlSession。SqlSession包含了执行sql所需要的所有方法,可以通过SqlSession实例直接运行映射的sql语句,完成对数据的增删改查和事务提交等,用完之后关闭SqlSession。

    二、Mybatis的优缺点

    优点:

    1、简单易学

           mybatis本身就很小且简单。没有任何第三方依赖,最简单安装只要两个jar文件+配置几个sql映射文件易于学习,易于使用,通过文档和源代码,可以比较完全的掌握它的设计思路和实现。

      

    2、灵活

           mybatis不会对应用程序或者数据库的现有设计强加任何影响。 sql写在xml里,便于统一管理和优化。通过sql基本上可以实现我们不使用数据访问框架可以实现的所有功能,或许更多。

      

    3、解除sql与程序代码的耦合

           通过提供DAL层,将业务逻辑和数据访问逻辑分离,使系统的设计更清晰,更易维护,更易单元测试。sql和代码的分离,提高了可维护性。

    4、提供映射标签,支持对象与数据库的orm字段关系映射

      
    5、提供对象关系映射标签,支持对象关系组建维护

     
    6、提供xml标签,支持编写动态sql。

    缺点:

    1、编写SQL语句时工作量很大,尤其是字段多、关联表多时,更是如此。

      
    2、SQL语句依赖于数据库,导致数据库移植性差,不能更换数据库。

      

    3、框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。

      

    4、二级缓存机制不佳

    三、Hibernate的工作原理流程图

    四、Hibernate是对JDBC进一步封装

           原来没有使用Hiberante做持久层开发时,存在很多冗余,如:各种JDBC语句,connection的管理,所以出现了Hibernate把JDBC封装了一下,我们不用操作数据,直接操作它就行了。

    五、我们再从分层的角度来看

          典型的三层架构:表示层,业务层,还有持久层。Hiberante也是持久层的框架,而且持久层的框架还有很多,比如:IBatis,Nhibernate,JDO,OJB,EJB等等。

    六、Hibernate是开源的一个ORM(对象关系映射)框架

          ORM,即Object-Relational Mapping,它的作用就是在关系型数据库和对象之间做了一个映射。从对象(Object)映射到关系(Relation),再从关系映射到对象。这样,我们在操作数据库的时候,不需要再去和复杂SQL打交道,只要像操作对象一样操作它就可以了(把关系数据库的字段在内存中映射成对象的属性)。

    Hibernate的核心:

      Hibernate六大核心接口,两个主要配置文件

    1、Configuration接口:负责配置并启动Hibernate

    2、SessionFactory接口:负责初始化Hibernate

    3、Session接口:负责持久化对象的CRUD操作

    4、Transaction接口:负责事务

    5、Query接口和Criteria接口:负责执行各种数据库查询

    注意:Configuration实例是一个启动期间的对象,一旦SessionFactory创建完成它就被丢弃了。

    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的优/缺点:

    优点:

    1、更加对象化

          以对象化的思维操作数据库,我们只需要操作对象就可以了,开发更加对象化。

    2、移植性
          因为Hibernate做了持久层的封装,你就不知道数据库,你写的所有的代码都具有可复用性。

    3、Hibernate是一个没有侵入性的框架,没有侵入性的框架我们称为轻量级框架。

          对比Struts的Action和ActionForm,都需要继承,离不开Struts。Hibernate不需要继承任何类,不需要实现任何接口。这样的对象叫POJO对象。

    4、Hibernate代码测试方便。

    5、提高效率,提高生产力。

  • 相关阅读:
    free命令中buffers和caches的区别
    ubuntu14.0安装ITK的步骤
    Ubuntu服务器上相关软件或应用时常打不开的问题
    机器学习之训练集_验证集_测试集
    VS C++ 并发编程
    Matlab保存uint16格式文件的相关注意事项
    OpenCV中的SVM参数优化
    caffe之solver.prototxt文件参数设置
    FY21 Microsoft Inspire Online Sessions Journey Guidance
    Azure Function Runtime版本和IP输出格式问题
  • 原文地址:https://www.cnblogs.com/bwcx1375/p/7499141.html
Copyright © 2011-2022 走看看