【SSM 3】Mybatis应用,和Hibernate的区别
PS:每次写概念性的总结,都是各种复制,各种粘,然后各种理解各种猜。但是这一步的总结,决定了我能够再这条路上走的远近和是否开心、是否创造!so,开启Ctrl A+Ctrl C的模式吧。
接触到这个概念的时候,很熟悉的感觉又回来了。想起了那时候研究.NET的Entity Framework的时候,那时候,是我第一次接触到Hibernate和Mybatis,iBatis等等。因为当时将ORM框架的实现,分为了.NET和Java体系。我说过,我会回来的,将近一年,我终于能够去用上这个传说中的Mybatis了!
在说Mybatis之前,先看看什么是ORM框架吧,博客:【EF 4】ORM框架及其流行产品之一EF介绍
一、Mybatis概述
MyBatis:是一个支持普通SQL查询,存储过程和高级映射的优秀持久层框架。MyBatis消除了几乎所有的JDBC代码和参数的手工设置以及对结果集的检索封装。MyBatis可以使用简单的XML或注解用于配置和原始映射,将接口和Java的POJO(Plain Old Java Objects,普通的Java对象)映射成数据库中的记录。
那么根据ORM框架,O就是我们常说的实体对象了,R就是关系映射,M就是mapper(我理解为地图索引)。先看一下Mybatis的简单应用体系:
Mybatis主要需要两个文件(结合图片实例),一个是实体文件TbUser,一个是TbuserMapper.xml。就跟EF框架中所生成的 edmx文件一样,mapper.xml描述了实体和数据库之间的映射关系。而且,Mybatis是一个半自动的框架,它的sql语句,也写在这个xml文件里。
PS:说到这里,真的忍不住再说说EF,我猜很多人都不知道EF的edmx这个文件是可以写存储过程和函数的。其实,那个edmx的作用,就可以简单等于Mybatis的mapper.xml的作用。简单点说,看过EF三大工作模式,再来看这个Mybatis,别的深入的不敢说,但要是单纯的应用,绝对是没有问题的!
PS:关于Mybatis的mapper配置,下一篇博客详细介绍
二、和Hibernate的区别
首先,了解一下hibernate,系列博客: SSH 里面写了hibernate的用处,hibernate的映射关系、缓存、抓取策略等等。
其次,区别(纯手工个人总结)
说这个区别前,我最大的一个感受就是,Hibernate和Mybatis,如果对应到EF的话,纯粹就是把那三个工作模式给每一个都自立门户整了一个框架。(一家之谈,只对应奴家的知识网络图)
1,开发速度
Hibernate可以算是全自动的,它和EF一样,本身便封装了很多的方法供给开发人员使用
Mybatis是半自动的(我想说纯手工制作,但都不太合适),它本身并没有为开发人员提供过多的方法,在开发的时候,需要手写SQL语句。
所以,从开发速度上来说,Hibernate可能更胜一筹。PS:Mybatis有其自身的逆向工程生成工具,那时候,这速度的对比,还不一定!
2,缓存和抓取
这个不用说,Hibernate完胜。hibernate支持一级缓存、二级缓存等等等等,它的抓取策略也是性能调优的好方法。不多说了,系列博客: SSH
3,Mybatis的特别
1,执行效率高:它的开发速度慢,并不意味着它的执行速度也慢。不管是Hibernate,还是EF,我们知道,最终要去数据库获取数据,都是对应的SQL语句(相应的查询语句)Mybatis,它直接执行的就是SQL原生语句,而hibernate经过封装使用hql,不管它转化的效率有多高,总是废了时间的!
2,灵活:开发速度慢,是因为没有封装好的方法,每个方法都要自己手写SQL语句,可是,这也就是意味着,你可以利用SQL语句写各种增删改语句。这点对于互联网产品,需求变化比较快的产品来说,Mybatis完胜。ps:spring提供了spring data jpa可以跟hibernate结合解决查询灵活性的问题,但是相对来说,哪有直接整原生SQL来的猛呢!
3,资源利用率高:说实在的,这一点的感悟是基于,我目前觉得,能够真正用好一款产品的人,非常好。Hibernate确实是封装了很多东西,但是,并不是每个人都知道它究竟提供了哪些资源,也就是说,Hibernate所提供的资源,很多被浪费!而Mybatis,基本上是写一个就能用上一个(不用的话,你老人家写着SQL语句玩耍吗?)
三、总结
好饿,不写了,以后有时间了再说吧,最近对于各种框架的应用有很大的感触。其实Hibernate和Mybatis各有优劣吧。如果系统需求比较稳定,那选hibernate没什么不好。底层方法基本上都有了。如果系统需求比较灵活,常常涉及到多表操作,那就整Mybatis吧,想怎么写就怎么写。如果又不想开发基本的单表操作方法,不想放弃hibernate的抓取和缓存。那就两个一起使吧,也没什么不好!(我们目前的系统,就是Hibernate和Mybatis两个一起使)
但是,我想说的是,如果将Mybatis基本的增删改等操作进行抽象封装成公共的mapper,然后通过传入的实体,判断操作具体的数据库表单,好像也是可以的。至少这时候,我就不太乐意再去捯饬一个hibernate进入系统了。缓存什么的,或许可以引入专门解决缓存 的工具,如radis、memchache等啊。
真不说了,好饿。下一篇博客接着写!刚刚写博客的过程中,我又回去把我那个EF的研究资料瞅了几眼,好开森!
【SSM 3】Mybatis应用,和Hibernate的区别的更多相关文章
- 一 Mybatis概述&与Hibernate的区别&CRUD
Mybatis是类似Hibernate的ORM持久层框架 为什么学习Mybatis? 是目前国内主流的持久层框架,面向sql(相较于Hibernate,Mybatis一定要用sql) Hibernat ...
- mybatis和hibernate的区别
1. hibernate是全自动,而mybatis是半自动 hibernate完全可以通过对象关系模型实现对数据库的操作,拥有完整的JavaBean对象与数据库的映射结构来自动生成sql.而mybat ...
- mybatis由浅入深day01_ 4.11总结(parameterType_resultType_#{}和${}_selectOne和selectList_mybatis和hibernate本质区别和应用场景)
4.11 总结 4.11.1 parameterType 在映射文件中通过parameterType指定输入参数的类型.mybatis通过ognl从输入对象中获取参数值拼接在sql中. 4.11.2 ...
- mybatis与hibernate的区别持久层对比【面试题】
Mybatis技术特点: 好处: 通过直接编写SQL语句,可以直接对SQL进行性能的优化: 学习门槛低,学习成本低.只要有SQL基础,就可以学习mybatis,而且很容易上手: 由于直接编写SQL语句 ...
- IBatis 2.x 和 MyBatis 3.0.x 的区别(从 iBatis 到 MyBatis)
从 iBatis 到 MyBatis,你准备好了吗? 对于从事 Java EE 的开发人员来说,iBatis 是一个再熟悉不过的持久层框架了,在 Hibernate.JPA 这样的一站式对象 / 关系 ...
- MyIbatis和Hibernate的区别--2019-04-26
1.MyBatis 真正实现了java代码和sql的分离 2.Hibernate 是全自动的,MyBatis是半自动的 Hibernate实现了部分自动生成SQL 3.SQL优化上 MyBatis 强 ...
- Java基础-SSM之mybatis的统计函数和分页查询
Java基础-SSM之mybatis的统计函数和分页查询 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.
- Java基础-SSM之mybatis一对一关联
Java基础-SSM之mybatis一对一关联 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表) 1>.创建husbands和wifes表并建 ...
- Java基础-SSM之mybatis多对多关联
Java基础-SSM之mybatis多对多关联 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.准备测试环境(创建数据库表) 1>.创建teas,stus,links表 u ...
随机推荐
- 关于js中的setTimeout和setInterval
http://ejohn.org/blog/how-javascript-timers-work 这是John的一篇博文说到setTimeout和setInterval的区别,在看js高效图形编程的时 ...
- php大力力 [044节] PHP的POST语句一定要大写!!if(!empty($_POST['id'])) {
早上花了几个小时,寻找错误!!! 不应该这样写 if(!empty($_Post['id'])) { 应该这样写 if(!empty($_POST['id'])) { 万万不能小谢!
- Android 中Thread,Handler,Loop学习
1.先看一下最简单的进度条示例 EG: package com.sxz.android.thread; import java.util.concurrent.atomic.AtomicBoolean ...
- PAT (Basic Level) Practise:1018. 锤子剪刀布
[题目链接] 大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入第1行 ...
- [读书笔记]java中的类加载器
以下内容大多来自周志明的<深入理解Java虚拟机>. 类加载器是java的一项创新,也是java流行的重要原因之一,它最初是为了满足java applet的需求而开发出来. 什么是appl ...
- windows 下的定时任务
linux 下的定时任务是crontab 以前都是linux的定时任务,这次在windows做了定时任务,简单记录一下 windows 2008下的定时任务配置: 控制面板->管理工具-> ...
- android使用Webview上传图片
package com.example.webview; import java.io.File; import android.net.Uri;import android.os.Bundle;im ...
- codeforces mysterious present 最长上升子序列+倒序打印路径
link:http://codeforces.com/problemset/problem/4/D #include <iostream> #include <cstdio> ...
- windows下在yii中使用mongodb
1.编译或下载对应dll动态链接库拓展文件,下载地址:点我,不知道如何编译windows下的dll拓展->点我 2.找到web服务器软件,如apache,nginx等webserver处理浏览器 ...
- VC_MFC水波纹控件,开源
代码和效果图: https://github.com/wjx0912/MfcWaterEffect 集成以下5个文件即可: watereffect\DIB.hwatereffect\DIB.cppwa ...