【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 ...
随机推荐
- Unity3D和OGRE资源管理机制
转自:http://www.tuicool.com/articles/QbMjUn 游戏中通常有大量资源,如网格.材质.纹理.动画.着色器程序和音乐等,游戏引擎作为做游戏的工具,自然要提供良好的资源管 ...
- css3 倒影
说起倒影效果,在传统网页中,我们只能使用photoshop进行事先将倒影设计好,然后导入到网页中,这样不但耗费资源,也阻碍了开发的效率.而 css3新增了Reflections板块,css Refl ...
- UE4 - C++ 射线捕捉
#include "Runtime/Engine/Classes/Kismet/KismetMathLibrary.h" //省略大部分代码 void AMyFPS_Charact ...
- Ubuntu12.04安装vscode i386
最近在Ubuntu12.04的32位版本上安装vscode,我下载的是32位deb包, vscode官网 安装命令 sudo dpkg -i vscode-i386.deb 安装完成没有报错,但是点 ...
- JAVA入门第二季 第一章 类和对象
面向对象编程 Object Oriented Programming OOP 第一.什么是类和对象 在具体说明类和对象之前,先说说别的. 眼睛在人类身体上最为有用的器官.如果一个没有了眼睛,这个人与世 ...
- PAT (Basic Level) Practise:1037. 在霍格沃茨找零钱
[题目链接] 如果你是哈利·波特迷,你会知道魔法世界有它自己的货币系统 —— 就如海格告诉哈利的:“十七个银西可(Sickle)兑一个加隆(Galleon),二十九个纳特(Knut)兑一个西可,很容易 ...
- 部分用到的python代码
replace file extensions # change .htm files to .html for file in *.htm ; do mv $file `echo $file | s ...
- java中的抽象类和接口
抽象类和接口本身让面向对象真正实现,一个好的系统可以让抽象类或者接口实现多次复用,如果出现了集成具体类那么肯定是有问题的. 抽象类和接口很相似,很多时候好像功能可以混用,java设计者赋予了很多不一样 ...
- codeforces 381 D Alyona and a tree(倍增)(前缀数组)
Alyona and a tree time limit per test 2 seconds memory limit per test 256 megabytes input standard i ...
- Spring源码学习之:ClassLoader学习(1)
转载:http://longdick.iteye.com/blog/442213 java应用环境中不同的class分别由不同的ClassLoader负责加载. 一个jvm中默认的classloade ...