mybatis和hibernate的对比总结

mybatis和hibernate

 第一步, 首先让我们对mybatis和hibernate对比了解下         

1、 Hibernate :Hibernate 是当前非常流行的ORM框架,对数据库结构提供了较为完整的封装,都是为了简化Dao层的操作。
    Mybatis:Mybatis同样也是非常流行的ORM框架,主要着力点在于POJO 与SQL之间的映射关系,都是为了简化Dao层的操作。

2、Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生 成Session,最后由Session来开启执行事务和SQL语句。其中SessionFactoryBuider,SessionFactory,Session的生命周期都是  
    差不多的。Hibernate和MyBatis都支持JDBC和JTA事务处理。

3、Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓存方 案,创建适配器来完全覆盖缓存行为,一般在这里的话我们用encache和mybatis和spring集成比较多,这个时候你可以你学习下encache也可以去了解小分布式缓存mencached 还有oschache都可以学习下。

   MyBatis 参考资料官网:http://www.mybatis.org/core/zh/index.html
   Hibernate参考资料: http://docs.jboss.org/hibernate/core/3.6/reference/zh-CN/html_single/
   不同点:
1、hibernate是全自动,而mybatis是半自动。
   Hibernate完全实现了对JDBC的封装,可看成"全自动洗衣机".调用一个save()方法就能实现插入操作,完全不需要写sql.当然,它也支持类似sql的hql语句.ibatis需要自己写sql,但是sql写在配置文件(.xml)文件里面,可看成"半自动洗衣机".mybatis初级阶段可理解成就是ibatis.
      
2、hibernate不怎么需要写sql,而mybatis需要把sql写在配置文件里面。

3、 hibernate数据库移植性和扩展性远大于mybatis,维护性比较好。
    Mybatis由于所有SQL都是依赖数据库书写的,所以扩展性,迁移性比较差,成本很高。Hibernate与数据库具体的关联都在XML中,所以HQL对具体是用什么数据库并不是很关心,大大降低了对象与数据库(oracle、mysql等)的耦合性。
       
4、hibernate开发速度比mybatis相对快点
   Hibernate的开发难度要大于Mybatis。主要由于Hibernate比较复杂、庞大,学习周期较长。
   而Mybatis则相对简单一些,并且Mybatis主要依赖于sql的书写,让开发者感觉更熟悉。
   Hibernate和MyBatis都有相应的代码生成工具。可以生成简单基本的DAO层方法。
   针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。

5、 hibernate拥有完整的日志系统,mybatis则欠缺一些。
    hibernate日志系统非常健全,涉及广泛,包括:sql记录、关系异常、优化警告、缓存提示、脏数据警告等;而mybatis则除了基本记录功能外,功能薄弱很多。 

6、mybatis相比hibernate需要关心很多细节
   hibernate配置要比mybatis复杂的多,学习成本也比mybatis高。但也正因为mybatis使用简单,才导致它要比hibernate关心很多技术细节。mybatis由于不用考虑很多细节,开发模式上与传统jdbc区别很小,因此很容易上手并开发项目,但忽略细节会导致项目前期bug较多,因而开发出相对稳定的软件很慢,而开发出软件却很快。hibernate则正好与之相反。但是如果使用hibernate很熟练的话,实际上开发效率丝毫不差于甚至超越mybatis。

7、hibernate缓存机制比mybatis强大
     
   Hibernate一级缓存是Session缓存,利用好一级缓存就需要对Session的生命周期进行管理好。建议在一个Action操作中使用一个Session。一级缓存需要对Session进行严格管理。

   Hibernate二级缓存是SessionFactory级的缓存。 SessionFactory的缓存分为内置缓存和外置缓存。内置缓存中存放的是SessionFactory对象的一些集合属性包含的数据(映射元素据及预定SQL语句等),对于应用程序来说,它是只读的。外置缓存中存放的是数据库数据的副本,其作用和一级缓存类似.二级缓存除了以内存作为存储介质外,还可以选用硬盘等外部存储设备。二级缓存称为进程级缓存或SessionFactory级缓存,它可以被所有session共享,它的生命周期伴随着SessionFactory的生命周期存在和消亡。

   MyBatis 包含一个非常强大的查询缓存特性,它可以非常方便地配置和定制。MyBatis 3 中的缓存实现的很多改进都已经实现了,使得它更加强大而且易于配置。

   默认情况下是没有开启缓存的,除了局部的 session 缓存,可以增强变现而且处理循环 依赖也是必须的。要开启二级缓存,你需要在你的 SQL 映射文件中添加一行:

  字面上看就是这样。这个简单语句的效果如下:

  映射语句文件中的所有 select 语句将会被缓存。
  映射语句文件中的所有 insert,update 和 delete 语句会刷新缓存。
  缓存会使用 Least Recently Used(LRU,最近最少使用的)算法来收回。
  根据时间表(比如 no Flush Interval,没有刷新间隔), 缓存不会以任何时间顺序 来刷新。
  缓存会存储列表集合或对象(无论查询方法返回什么)的 1024 个引用。
  缓存会被视为是 read/write(可读/可写)的缓存,意味着对象检索不是共享的,而 且可以安全地被调用者修改,而不干扰其他调用者或线程所做的潜在修改

8、sql直接优化上,mybatis要比hibernate方便很多
   由于mybatis的sql都是写在xml里,因此优化sql比hibernate方便很多。而hibernate的sql很多都是自动生成的,无法直接维护sql;虽有hql,但功能还是不及sql强大,见到报表等变态需求时,hql也歇菜,也就是说hql是有局限的;hibernate虽然也支持原生sql,但开发模式上却与orm不同,需要转换思维,因此使用上不是非常方便。总之写sql的灵活度上hibernate不及mybatis。

9、mybait比hibernate更加灵活,驾驭型更好

  Mybatis优势
  MyBatis可以进行更为细致的SQL优化,可以减少查询字段。
  MyBatis容易掌握,而Hibernate门槛较高。
  Hibernate优势
  Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。
  Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。
  Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。
  Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295452.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET 6新特性试用 | Controller支持IAsyncDisposable

前言在.NET中,拥有非托管资源的类通常会实现IDisposable接口,以提供一种同步释放非托管资源的机制。但是,在某些情况下,需要提供一种异步机制来释放非托管资源,这时候可以实现IAsyncDisposable接口。在实现此接口后&am…

ngnix之rewrite

2019独角兽企业重金招聘Python工程师标准>>> REWITE重写[rootlocalhost nginx]# cd conf[rootlocalhost conf]# lsfastcgi.conf koi-win scgi_paramsfastcgi.conf.default mime.types scgi_params.defaultfastcgi_params …

【转】服务器维护工程师悲惨的一个星期

2012.5.11 17点40分,接到**科技部的电话,告诉我IBMX346的服务器同时坏了2块SCSI146G硬盘,现在系统进不去了.问我周六周日能否去修复,和我的领导沟通后明确要周一才能拿到配件. 周一11点才拿到2块SCSI 146G硬盘,匆忙赶去该行,还好不要数据恢复,估计不是很重要的业务,吃完中饭之后…

清华博士生放弃科研,跑去当中学教师,值得吗?

全世界只有3.14 % 的人关注了爆炸吧知识本文来源:科学网博客 作者:程代展原清华大学程代展教授数年前发表博文《昨夜无眠,为了一个学生》,叙述一个亲传徒弟转行的事情。该文曾激起对科研有兴趣的网友的关注,也引发了人…

6、基本查询操作

在数据库的操作中,开发人员或者用户为了取得数据记录,需要检索数据表中的信息。在SQL语句中,检索数据记录是通过SELECT语句来完成的。SELECT语句可以检索数据表或者视图中的数据,并将查询出来的数据以结果集的形式显示出来。 1.查…

java web容器_Java Web容器安全

这里的Java Web容器特指Tomcat,Tomcat依然是最流行的Java Web容器,你大爷还是你大爷。本文并不涉及业务层面上的安全控制,只针对Tomcat自身所支持的相关安全控制功能与特性。首先看一下Web容器的四个基本安全特性验证 Authentication资源访问…

C# 中如何一次 catch 多个异常?

咨询区 Michael Stum:在项目开发中当抛出异常时,我会简单的用 System.Exception,但这种会捕获所有的异常,我不希望大一统,我只想捕获我预知的几个异常,然后在这里处理一些特定的业务逻辑。目前我只能这么实…

堆和堆排序

在讨论「堆排序」之前&#xff0c;先复习一下「选择排序」。 void SelectionSort(int a[], size_t n) {for (size_t i 0; i < n; i) {// 在剩余元素中找出最小的一个&#xff0c;然后与 a[i] 交换。size_t k i;for (size_t j i1; j < n; j) {if (a[j] < a[k]) {k …

Android之二维码生成和识别

二维码 1、ZXing库介绍 这里简单介绍一下ZXing库。ZXing是一个开放源码的,用Java实现的多种格式的1D/2D条码图像处理库,它包含了联系到其他语言的端口。Zxing可以实现使用手机的内置的摄像头完成条形码的扫描及解码。该项目可实现的条形码编码和解码。目前支持以下格式:UPC…

得罪前女友到底有多可怕?

1 多带一支笔到底有多重要&#xff08;via&#xff1a;100天用泰语撩到小哥哥&#xff09;▼2 专门为跪键盘而生&#xff08;via&#xff1a;in外设&#xff09;▼3 当表情包不再模糊▼4 新娘&#xff1a;他渣你&#xff0c;你干啥子整我&#xff01;&#xff01;&#xff0…

Asp.NET中如何一次性下载多个文件

在ASP.NET中&#xff0c;我们可以很方便的下载单个文件&#xff0c;当需要一次性下载多个文件的时候&#xff0c;如果提示用户一次一次保存的话&#xff0c;会导致用户体验特别的不好。我这里找到一种比较合理的解决方案&#xff0c;就是先把要下载的所有文件打包压缩到成一个文…

CybersecurityVentures:中小企业将是SIEM市场增长的下一波热点

CybersecurityVentures在2016Q1的一个报告中指出&#xff0c;中小企业将是SIEM市场增长的下一波热点。网安战略群发布了该报告的中文版。报告由GAIA小组的Charlie翻译&#xff0c;转载如下&#xff1a;来源&#xff1a;CybersecurityVentures官网翻译&#xff1a;盖亚(GAIA)小组…

Windows 10 版本 21H2 正式发布

微软今日宣布开始推送 Windows 10 版本 21H2。 Windows 10 版本 21H2 将作为 Windows 10 2021 年 11 月更新向运行 Windows 10 版本 2004、Windows 10 版本 20H2 和 Windows 10 版本 21H1 的电脑推出。 为保证升级效果&#xff0c;Windows 10 版本 21H2 将进行分阶段和可评估的…

Android之开发者应该收藏的优秀博客和技术网站

安居客Trinea 的个人博客 http:// www.trinea.cn codekk 一个Trinea发起的开源项目解析分享站点 微信公众号:codekk http://codekk.com/open-source-project-analysis

成功的换心手术——Windows Phone 8 发布

微软在刚刚开始的 Windows Phone 开发者峰会上正式发布了代号阿波罗的 Windows Phone 8 操作系统。虽然微软之前几乎没在公开场合提过阿波罗&#xff0c;但新系统变化的大方向早已泄漏。不过整个发布会依然充满惊喜&#xff0c;微软整整演示了一个多小时新功能&#xff0c;完全…

世上最“贵”的河:河里石头比黄金还值钱?甚至还有士兵驻守!

全世界只有3.14 % 的人关注了爆炸吧知识大家都听过世界上最长的河是尼罗河世界上最宽的河是亚马逊河但是你知道世界上最“贵”的河是哪条河吗这条河中最贵的原因不是水中有什么特殊生物也不是河里有黄金钻石仅仅是因为这里的“石头”这河里的石头可不普通大都是翡翠原石而这条河…

ASP.NET Core 跨平台图形验证码实现

概述几年前&#xff0c;大部分网站、论坛之类的是没有验证码的&#xff0c;因为对于一般用户来说验证码只是增加了用户的操作&#xff0c;降低了用户的体验。但是后来各种灌水机器人、投票机器人、恶意注册机器人层出不穷&#xff0c;大大增加了网站的负担同时也给网站数据库带…

日常管理

2019独角兽企业重金招聘Python工程师标准>>> 关于目前自己iOS项目使用的第三方开源库 1.AFNetworking 目前比较推荐的iOS网络请求组件&#xff0c;默认网络请求是异步&#xff0c;通过block回调的方式对返回数据进行处理。 2.FMDB 对sqlite数据库操作进行了封装&…

关于input type=file 限制文件上传类型

HTML <input> 标签的 accept 属性 <input type"file" name"pic" id"pic" accept"image/gif, image/jpeg" />accept 的取值是 MIME_type列出素有MIME_type的取值&#xff1a;下列信息摘自w3cschool MIME 类型 MIME (Multip…

System Information for Windows

运行平台&#xff1a;Windows软件授权&#xff1a;自由软件软件大小&#xff1a;1.76MBSystem Information for Windows是一款功能非常强大的系统信息管理工具,除了可查看电脑中所有的软硬件信息,网络信息等这些基本功能外,还可以查看电脑中所有软件的注册信息,包括IE和 Firefo…