• 也用了这么久的Hibernate和MyBatis了,一直打算做一个总结,就他们之间的优缺点说说我自己的理解:

  1. 首先,Hibernate是一个ORM的持久层框架,它使用对象和我们的数据库建立关系,在Hibernate中,操作数据库实际上时通过对象状态的改变来改变数据中对应表的值,此时就是通过hql来操作数据库的,就不在通过sql来直接操作我们的数据库。
    • 我认为,最能体现Hibernate的面向对象的方法来操作数据库的一点,就是:在新创建一个对象后,在调用Hibernate的save()方法时,此时HIbernate并不会发送插入数据的sql,而是等到我们的session刷新,事务提交的时候,Hibernate才会发送一条插入数据的sql.这是因为,Hibernate是根据对象的状态来更改其数据库中对应的表的,上面所说的新建一个对象时,此时这个对象处于临时状态,而在调用了save()方法之后,该对象就处于了持久化状态,此后,当Hibernate进行session刷新,事务提交后,就会将由临时状态变成了持久化状态的这个对象持久化到数据库中相应的表中。
    • 具体的,对象的状态分为:
      • 临时状态:
      1. 对象刚被new出来,没有id.
      2. 删除状态的对象的在session刷新,事务提交之后,也是临时状态。(此时通过在hibernate.properties文件中配置use_identifier_rollback可以是改对象的id为null)。
      • 持久化状态:
      1. 对象有id,并且被session管理。
        • save方法将临时对象或者游离对象变成持久化对象。
        • get方法返回的时持久化的对象。
        • load方法返回的是持久化对象。
        • Query.list()返回的是持久化对象。不过在大数据处理时需要即时清理缓存。
        • update将游离对象变成持久化对象。
      • 持久化状态:
      1. 对象有id,但是不处于session的管理之下。
        • session.close()将当前被关闭的session中的所有持久化对象全部变成游离对象。
        • session.clear()将当前被清理的session中的所有持久化对象全部变成游离对象。
        • session.evict(Object)将指定对象变成游离对象。
      • 删除状态:
      1. 对象有id,但是计划被删除。
        • delete方法将持久化对象变成删除状态,但是需要在session刷新,事务提交后才会更改到数据库。

    2.其次,MyBatis则时仍然是基于sql查询的方式,他通过将查询结果列设置到我们指定的对象的属性中,其本质上我们的对象和数据库并无直接关系,我们使用的仍然是sql。

    3.Hibernate和MyBatis均是通过反射价格数据库的查询结果列封装到相应的对象中。

MyBatis与Hibernate总结篇的更多相关文章

  1. 【持久化框架】Mybatis与Hibernate的详细对比

        前言 这篇博文我们重点分析一下Mybatis与hibernate的区别,当然在前面的博文中我们已经深入的研究了Mybatis和Hibernate的原理. Mybatis [持久化框架]Myba ...

  2. 【持久化框架】Mybatis与Hibernate的详细对比(转发)

    前言 这篇博文我们重点分析一下Mybatis与Hibernate的区别,当然在前面的博文中我们已经深入的研究了Mybatis和Hibernate的原理. Mybatis [持久化框架]Mybatis简 ...

  3. MyBatis 与 Hibernate 到底哪个更快?

    前言 由于编程思想与数据库的设计模式不同,生出了一些ORM框架. 核心都是将关系型数据库和数据转成对象型.当前流行的方案有Hibernate与myBatis. 两者各有优劣.竞争激烈,其中一个比较重要 ...

  4. Mybatis与Hibernate的详细对比

    前言 这篇博文我们重点分析一下Mybatis与hibernate的区别,当然在前面的博文中我们已经深入的研究了Mybatis和Hibernate的原理. Mybatis [持久化框架]Mybatis简 ...

  5. Mybatis 入门到理解篇

    MyBatis         MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code, ...

  6. 缓存机制总结(JVM内置缓存机制,MyBatis和Hibernate缓存机制,Redis缓存)

    一.JVM内置缓存(值存放在JVM缓存中) 我们可以先了解一下Cookie,Session,和Cache Cookie:当你在浏览网站的时候,WEB 服务器会先送一小小资料放在你的计算机上,Cooki ...

  7. mybatis与hibernate运行流程比较

    hibernate长时间没用,感觉生疏了,正好借这篇文章整合下知识,顺便复习比较下两种框架. 概述: Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己 ...

  8. Spring+SpringMVC+MyBatis+easyUI整合基础篇(六)maven整合SSM

    写在前面的话   承接前文<Spring+SpringMVC+MyBatis+easyUI整合基础篇(五)讲一下maven>,本篇所讲述的是如何使用maven与原ssm项目整合,使得一个普 ...

  9. Spring+SpringMVC+MyBatis+easyUI整合基础篇(八)mysql中文查询bug修复

    写在前面的话 在测试搜索时出现的问题,mysql通过中文查询条件搜索不出数据,但是英文和数字可以搜索到记录,中文无返回记录.本文就是写一下发现问题的过程及解决方法.此bug在第一个项目中点这里还存在, ...

随机推荐

  1. Omnigraffle

    OmniGraffle 7 Mac 注册码 账号:Appked 密码:MFWG-GHEB-HYTW-CGHT-CSXU-QCNC-SXU https://blog.csdn.net/ChibiMaru ...

  2. DP&图论 DAY 6 上午

    DP&图论  DAY 6  上午 双连通分量 从u-->v不存在必经边,点 点双连通分量 边双连通分量 点/边双连通分量缩点之后变成一个树 找连通块的时候不越过割点或者桥 P3469 [ ...

  3. Host x.x.x.x not found in /root/.ssh/known_hosts

    候解决办法是,只要找到电脑里“.ssh” 文件夹,将文件夹里的文件”known_hosts”删除掉或者担心删除了会有风险,改个名字,然后在重新提交的时候,就能正确提交了 将known_hosts删掉或 ...

  4. ESP32开发之Windows开发环境

    电脑出了问题linux系统下的环境不知道怎么就挂了,在一次搭建,总是出错,没办法,只能在win10下一试. 1 下载交叉编译工具,最新版 找到并下载最新的工具链: https://dl.espress ...

  5. RxJava2实战--第八章 RxJava的背压

    RxJava2实战--第八章 RxJava的背压 1 背压 在RxJava中,会遇到被观察者发送消息太快以至于它的操作符或者订阅者不能及时处理相关的消息,这就是典型的背压(Back Pressure) ...

  6. java:shiro(认证,赋予角色,授权...)

    1.shiro(权限框架(认证,赋予角色,授权...)): readme.txt(运行机制): 1.从jsp的form中的action属性跳转到springmvc的Handler中(controlle ...

  7. Tor路径选择说明

    Tor Path Specification Roger Dingledine Nick Mathewson Note: This is an attempt to specify Tor as cu ...

  8. python获取内存地址上存储的值

    在python中,可以通过id()这个方法来获取对象的内存地址. 但是反过来,怎么获取内存地址上存储的值? 先看一段代码: from ctypes import string_at from sys ...

  9. (转)Dubbo + Zookeeper入门初探

    一.搭建java和tomcat环境 二.搭建zookeeper 三.搭建dubbo监控中心 四.配置项目 4.1 服务提供方代码 4.2 服务使用方代码 五.测试 2018年2月15日,阿里巴巴的du ...

  10. 【转载】mysql行列转换方法总结

    [转载]mysql行列转换方法总结 [MySQL] 行列转换变化各种方法实现总结(行变列报表统计.列变行数据记录统计等) Mysql 列转行统计查询 .行转列统计查询 在某些数据库中有交叉表,但在My ...