• 也用了这么久的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. CSS、Bulma介绍

    文章目录 一.序章 二.CSS 基础 1. CSS 介绍 2. CSS 语法 3. CSS常用元素 1.颜色 2.字体大小 3.宽高 4.盒模型(单独拿出来讲) 5.背景 4.1样式和内容分离 4.2 ...

  2. Mysql general_log 日志详解

    开启 general log  将所有到达MySQL Server的SQL语句记录下来. 一般不会开启开功能,因为log的量会非常庞大.但个别情况下可能会临时的开一会儿general log以供排障使 ...

  3. System 源码阅读

    System 属性说明 /** * System 类包含了几个有用的字段和方法,并且不能被实例化. * * @author unascribed * @since 1.0 */ public fina ...

  4. LC 954. Array of Doubled Pairs

    Given an array of integers A with even length, return true if and only if it is possible to reorder ...

  5. JavaScript 格式化数字成金额格式

    在看公司一个项目的JavaScript代码时,发现一段JavaScript代码,是把数字格式化成金额格式 比如: 12345.678 格式化成  12,345.68 看完代码后,google了一下,发 ...

  6. python接口自动化框架搭建

    一.在搭建接口自动化测试框架前,我觉得先需要想明白以下几点: ① 目前情况下,绝大部分接口协议是http,所以需要对http协议有个基本的了解,如:http协议请求.响应由哪些部分组成,常用的meth ...

  7. MySQL SQL查询优化技巧详解

    MySQL SQL查询优化技巧详解 本文总结了30个mysql千万级大数据SQL查询优化技巧,特别适合大数据里的MYSQL使用. 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 ...

  8. python(29)Tinker+BeautifulSoup+Request抓取美女壁纸

    原文链接:http://www.limerence2017.com/2019/10/22/python29/ 抓取准备 今天是10月24日,祝所有程序员节日快乐.今天打算写个爬虫抓取3DMGAME论坛 ...

  9. Jmeter实现WebSocket协议的接口

    1.下载websocket插件的jar包 网盘链接:https://pan.baidu.com/s/1FDcTHdQcDo6izgROMgB96w 密码:uags 该包下载完成后直接放在jmeter的 ...

  10. JS apply 、call和bind

    JS当中的call .apply.和bind 这三个方法都是js function当中自带的方法,用来改变this的指向. call()方法 语法格式: fun.call(thisArg[,arg1[ ...