【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 ...
随机推荐
- Jmeter—1 安装
1 Jmeter运行需要java环境.首先需要安装JDK. 图标是这样的: 2 下载apache-jmeter包. jmeter官网:http://jmeter.apache.org/ 3 解压 ...
- 黑马程序员——【Java高新技术】——JavaBean、注解
---------- android培训.java培训.期待与您交流! ---------- 一.JavaBean * 通过内省引入JavaBean:内省对应的英文全程是IntroSpector.在J ...
- [转]lua面向对象编程之点号与冒号的差异详细比较
首先,先来一段在lua创建一个类与对象的代码 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 Class = {} Class.__index = Cl ...
- 腾讯优测优分享 | 这些年,我们追过的 fiddler
腾讯优测是专业的移动云测试平台,提供全面兼容性测试,远程真机租用,漏洞分析等多维度的测试服务,旗下优分享提供大量的移动研发及测试相关的干货! 一.fiddler原理简介 fiddler是目前最强大最好 ...
- C++概念整理
/* 面向对象: 多态, 继承 封装 */ #include <stdio.h> #include <stdlib.h> //一旦有了纯虚函数,该对象就不能实例化了. #def ...
- VNC-Server安装及配置
一.什么是VNC? VNC (Virtual Network Computer)是虚拟网络计算机的缩写.VNC 是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发的.VNC ...
- MongoDB学习笔记二:创建、更新及删除文档
插入并保存文档 对目标集使用insert方法插入一个文档: > db.foo.insert({"bar" : "baz"}) 这个操作会给文档增加一个&q ...
- Apache配置代理服务器的方法(1)
众所周知Apache是目前最优秀的HTTP服务器.实际上它不仅能当作服务器使用,也能够被用来架设代理服务器.本文就如何使用Apache架设HTTP代理服务器进行说明. 本文将基于Win32版的Apac ...
- python集成开发工具
1. IDLE http://python.org/idle/ (在 Python 发行版中自带) 2 BlackAdder 3 PythonWorks 4 Wing IDE http://wingw ...
- android的ArrayMap类
运行的时候出现: java.lang.NoClassDefFoundError: android.util.ArrayMap http://stackoverflow.com/questions/24 ...