mybatis&Hibernate区别
mybatis是一个不完全的orm框架,因为mybatis需要程序员自己写大量的sql,需要程序员对sql的掌握比较高,不过mybatis可以通过xml文件可以灵活的配置要运行的sql语句,将sql与Java对象做了很好的关系映射。
Mybatis的学习门槛较低,可严格控制sql的执行性能,灵活度高,适合于对关系数据模型要求不高的软件开发,比如互联网软件、企业运营类软件等。因为这类软件的需求变化快而且多。灵活的前提是无法做到数据库的无关系,如果要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大。
Hibernate是一套完全的orm框架,数据库无关性好,适用于关系数据模型较高的软件,可以节省很多代码,提高工作效率。而且hibernate的性能调优需要很强的经验和能力。
1、开发上手难度
hibernate的真正掌握(封装的功能和特性非常多)要比Mybatis来得难。
在真正产品级应用上要用Hibernate,不仅对开发人员的要求高,hibernate往往还不适合(多表关联查询等)。
2、系统调优调优方案对比
Hibernate:
* 制定合理的缓存策略;
* 尽量使用延迟加载特性;
* 采用合理的Session管理机制;
* 使用批量抓取,设定合理的批处理参数(batch_size);
* 进行合理的O/R映射设计
Mybatis:
* MyBatis在Session方面和Hibernate的Session生命周期是一致的,同样需要合理的Session管理机制。MyBatis同样具有二级缓存机制。
* MyBatis可以进行详细的SQL优化设计。
3、SQL优化方面
Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗。
Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。
Mybatis的SQL是手动编写的,所以可以按需求指定查询的字段。
总的来说,Hibernate使用的是封装好,通用的SQL来应付所有场景,而Mybatis是针对响应的场景设计的SQL。Mybatis的SQL会更灵活、可控性更好、更优化。
4、移植性
Hibernate与具体数据库的关联只需在XML文件中配置即可,所有的HQL语句与具体使用的数据库无关,移植性很好。
MyBatis项目中所有的SQL语句都是依赖所用的数据库的,所以不同数据库类型的支持不好。
5、JDBC
Hibernate是在JDBC上进行了一次封装。
Mybatis是基于原生的JDBC的。Mybatis有运行速度上的优势。
6、功能、特性丰富程度
Hibernate提供了诸多功能和特性。要全掌握很难。
Mybatis 自身功能很有限,但Mybatis支持plugin,可以使用开源的plugin来扩展功能。
7、动态SQL
Mybatis mapper xml 支持动态SQL
Hibernate不支持
实际项目关于Hibernate和Mybatis的选型:
1、数据量:有以下情况最好选用Mybatis
如果有超过千万级别的表
如果有单次业务大批量数据提交的需求(百万条及以上的),这个尤其不建议用Hibernate
如果有单次业务大批量读取需求(百万条及以上的)(注,hibernate多表查询比较费劲,用不好很容易造成性能问题)
2、表关联复杂度
如果主要业务表的关联表超过20个(大概值),不建议使用hibernate
3、人员
如果开发成员多数不是多年使用hibernate的情况,建议使用mybatis
4、数据库对于项目的重要程度
如果项目要求对于数据库可控性好,可深度调优,用mybatis
总之,用户需求在有限的资源环境下只要做出维护性、扩展性好的软件架构都是好架构,框架只有合适的才是最好的。
感谢:http://blog.csdn.net/a63297066/article/details/51454726
mybatis&Hibernate区别的更多相关文章
- jdbc,mybatis,hibernate各自优缺点及区别
先比较下jdbc编程和hibernate编程各自的优缺点. JDBC: 我们平时使用jdbc进行编程,大致需要下面几个步骤: 1,使用jdbc编程需要连接数据库,注册驱动和数据库信息 ...
- jdbc,mybatis,hibernate各自有优缺点以及区别
JDBC: 我们平时使用jdbc进行编程,大致需要下面几个步骤: 1,使用jdbc编程需要连接数据库,注册驱动和数据库信息 2,操作Connection,打开Statement对象 3,通过State ...
- Mybatis与Hibernate区别
Mybatis与Hibernate区别 mybatis: 1. 入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美 ...
- 对比JPA 和Hibernate 和 Mybatis的区别
1.JPA.Hibernate.Mybatis简单了解 1.JPA:本身是一种ORM规范,不是ORM框架.由各大ORM框架提供实现. 2.Hibernate:目前最流行的ORM框架,设计灵巧,文档丰富 ...
- Hibernate 和Mybatis的区别
Hibernate 和Mybatis的区别 1.hibernate 入门门槛高,是一个标准的ORM框架(对象关系映射),不需要程序写sql,sql语句自动生成,对sql语句进行优化.修改比较困难. ...
- hibernate和mybatis的区别
本文出自 alicejiyayun原创 第一章 Hibernate与MyBatis Hibernate 是当前最流行的O/R mapping框架,它出身于sf.NET,现在已经成为Jboss的 ...
- Hibernate与 MyBatis的区别
第一章 Hibernate与MyBatis Hibernate 是当前最流行的O/R mapping框架,它出身于sf.net,现在已经成为Jboss的一部分. Mybatis 是另外一种优秀 ...
- iBatis & myBatis & Hibernate 要点记录
iBatis & myBatis & Hibernate 要点记录 这三个是当前常用三大持久层框架,对其各自要点简要记录,并对其异同点进行简单比较. 1. iBatis iBatis主 ...
- mybatis #与$区别
mybatis #与$区别 #{}变量解析到SQL有带引号字符串:如查询条件变量如:select * from user where name = #{name}; 为:select * from u ...
随机推荐
- 在JTextField中监听回车键,并执行相应按钮
在jbInit() 中加入jTextField1的按键监听,代码如下: jTextField1.addKeyListener(new KeyAdapter(){ public voi ...
- [Git] 写文章 史上最全文献检索、阅读及管理攻略
copy from : https://zhuanlan.zhihu.com/p/30605683 一.查文献 首先,我认为需要常备几个体量大.文献全的数据库,有针对性找哦!下面列出了一些适合所有专 ...
- 最小二乘法least square
上研究生的时候接触的第一个Loss function就是least square.最近又研究了一下,做个总结吧. 定义看wiki就够了.公式如下 E(w)=12∑n=1N{y−xWT}2E(w)=12 ...
- ubuntu下如何查看软件安装目录以及安装版本
1)aptitude show 软件名 例如aptitude show kde-runtime 显示如下 ****@ubuntu:~$ aptitude show kde-runtime 软件包: k ...
- N-Queens II leetcode java
题目: Follow up for N-Queens problem. Now, instead outputting board configurations, return the total n ...
- css表格单元格中的长文本的显示问题
自动换行问题,正常字符的换行是比较合理的,而连续的数字和英文字符常常将容器撑大,挺让人头疼,下面介绍的是CSS如何实现换行的方法 对于div,p等块级元素 正常文字的换行(亚洲文字和非亚洲文字)元素拥 ...
- [置顶] ios 无限循环翻页源码例子
原创文章,转载请注明出处:http://blog.csdn.net/donny_zhang/article/details/9923053 demo功能:ios 无限循环翻页源码例子.iphone 6 ...
- TypeError: 'newline' is an invalid keyword argument for this function 错误解决
出错代码: outputFile = open('output1.csv', 'w', newline='') # error line outputWriter = csv.writer(outpu ...
- Ubuntu14.04下Neo4j图数据库官网安装部署步骤(图文详解)(博主推荐)
不多说,直接上干货! 说在前面的话 首先,查看下你的操作系统的版本. root@zhouls-virtual-machine:~# cat /etc/issue Ubuntu 14.04.4 LTS ...
- CentOS 7 中 hostnamectl 的使用
hostnamectl 是在 centos7 中新增加的命令,它是用来修改主机名称的,centos7 修改主机名称会比以往容易许多. 用法 # hostnamectl -h -h --help 显示帮 ...