面试之mybatis和hibernate的区别
mybatis是支持普通SQL查询、存储过程和高级映射的优秀持久层框架。封装了 几乎所有的JDBC代码和参数的手工设置 ,以及结果集的检索:
封装了:1,获取连接,执行sql,释放连接。
2,sql的参数设置,属性自动传递参数(例如emp有name和age属性,sql语句写成“insert into emp (name,age) values(#{name},#{age})”就可以了,不用像jdbc 一样还要用preparedstatement对象设置参数ps.setString(1,“xiaoming”)
3,封装了记录映射成实体对象的的过程,(jdbc要自己写rowmapper)
hibernate也是当前流行的orm工具,访问数据库的框架,对数据结构提供了较完整的封装。
封装了:1,获取连接,sql编写,执行sql,释放连接。
2,sql参数设置,
3,记录封装成实体对象等一系列过程。
对比上面两个,一目了然,hibernate相比mabatis居然连sql编写也封装了。这点本质的不同,是mybatis与hibernate的最大区别,很多网上写的区别,看起来很乱,很头大其实大多都是从这点引发出来的。
接下来我们一点一点的说。
区别一:扩展性方面。使用mybatis要自己根据相应的数据库写不同的sql实现,例如用MySQL数据库写了一个sql的分页语句,如果换成了oracle数据库就用不了了。然而如果是hibernate的hql语句则是对实体类(User)和属性的操作,也拿分页查询来说,string hql=“from User”; Query q1=session.creatQuery(hql); q1.setFirstResult(m);q1.setMaxResult(n); List<User> list=q1.list();会根据具体的数据库生成各自相应不同的查询的语句,所以移植性很好。
区别二:sql效率,优化方面。Hibernate的查询,更新都是对所有字段的操作例如(根据id查询,sessin.get(User.class,"id"),还有要session.update(对象)时,按照对象的id做条件,更新其他字段信息。如果想要更新部分字段,其他字段保持不变,则对象的其他字段对应的属性也要有原值),这一点会有性能消耗。Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。而Mybatis的SQL是手动编写的,所以可以按需求指定查询的字段。maybatis的优化,就是对sql语句的优化,MyBatis在Session方面和Hibernate的Session生命周期是一致的,同样需要合理的Session管理机制。hibernate的优化(可以记一下):
- 制定合理的缓存策略;
- 尽量使用延迟加载特性;
- 采用合理的Session管理机制;
- 使用批量抓取,设定合理的批处理参数(batch_size);
- 进行合理的O/R映射设计
还有一点被面试问到过,就是sql和hql形式上的区别。个人认为属于第一点区别:
sql: select 字段名...from table_name where 字段名... sql是直接对数据库表的操作
hql:select 属性名...from 实体类 where 属性 条件 ...group by 属性order by属性。hql是对与表有映射关系的实体类的操作,底层会再自动生成相应的sql。
以上点就是最大的区别了。当然网上还有说对象管理和抓取策略,缓存机制什么的,太高级了这里不再讨论了。附上连接:
http://blog.csdn.net/firejuly/article/details/819022
转载于:https://www.cnblogs.com/huangwentian/p/6926922.html
面试之mybatis和hibernate的区别相关推荐
- MyBatis和ORM的区别以及Mybatis和Hibernate的区别
ORM: 即Object Relation Mapping,即对象关联映射.所以ORM就是将Java中的对象和数据库中的表关联对应起来. 思考一下Mybatis,Mybatis相当于将mapper中的 ...
- 浅析 Mybatis 与 Hibernate 的区别与用途
有很长一段时间对mybatis是比较陌生的,只知道与Hibernate一样是个orm数据库框架.随着使用熟练度的增加,发现它与Hibernate区别是非常大的,应当结合不同的情况分析选用.结合至今为止 ...
- mybatis和hibernate的区别---Mybatis的学习笔记(四)
具体说明: Mybatis和hibernate不同,它不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将 ...
- 面试问题:MyBatis和Hibernate的区别
1.sql 优化方面 Hibernate 使用 HQL(Hibernate Query Language)语句,独立于数据库.不需要编写大量的 SQL,就可以完全映射,但会多消耗性能,且开发人员不能自 ...
- MyBatis和hibernate本质区别与应用场景
1.Hibernate:是一个标准的ORM框架(对象关系映射),不需要写sql,自动生成sql 使用hibernate对SQL优化修改比较困难 应用场景: 适用于需求 ...
- 开课吧Java:MyBatis和Hibernate的区别
Hibernate 和 MyBatis 都是目前业界中主流的对象关系映射(ORM)框架,它们的主要区别如下. 1)sql 优化方面 Hibernate 使用 HQL(Hibernate Query L ...
- mybatis和hibernate的区别优缺点对比
第一方面:开发速度的对比 就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉得要用好Mybatis还是首先要先理解好H ...
- Mybatis与Hibernate的详细对比
转载自 Mybatis与Hibernate的详细对比 前言 这篇博文我们重点分析一下Mybatis与Hibernate的区别,当然在前面的博文中我们已经深入的研究了Mybatis和Hibernate ...
- 【持久化框架】Mybatis与Hibernate的详细对比
前言 这篇博文我们重点分析一下Mybatis与Hibernate的区别,当然在前面的博文中我们已经深入的研究了Mybatis和Hibernate的原理. Mybatis [持久化框架]Mybatis简 ...
最新文章
- linux搭建--DISPLAY环境变量问题(一)
- IE6 / IE7 / Firefox 的margin问题解决办法
- django makemigrtions时出现no changes detected 解决方式
- ARM的编程模式和7种模式
- kubernetes中mysql乱码_在kubernetes中部署tomcat与mysql集群-Go语言中文社区
- Android实现拍照并存储功能,Android实现拍照及图片显示效果
- mysql-查询例题大全
- MongoDB compass 连接不上远程服务器的解决方法
- Discuz! 7.2 二次开发基础 (一)
- error: Microsoft Visual C++ 14.0 is required. Get it with “Build Tools for Visual Studio“: https://
- 用Python算带有进度条的圆周率
- Android Studio sdk emulator directory is missing
- 50首经典好听的英文歌曲!
- 不喜欢现在的领导,怎么办?不懂跟领导相处,你到哪都混不好
- 使用Jquery制作精美的图片展示效果
- 软件复杂性正在杀死我们
- EventBridge 集成云服务实践
- iOS 学习资料整理
- linux 修改主机名 命令,Linux修改主机名命令详解
- 深圳Java学习培训:SQL语言之索引-千锋
热门文章
- 矩阵连乘 动态规划_利用动态规划解LeetCode第62题:不同路径
- array in java,ArrayList to Array Conversion in Java
- 如何选择漏电保护器规格型号_电涌保护器(SPD)选择有哪几个关键的参数?SPD如何使用和安装?...
- idea弹出Server‘s certificate is not trusted
- 冻结html表格标题列,jQuery实现冻结表头的方法
- mongodb和mysql空间占用_MongoDB的存储结构及对空间使用率的影响
- git版本回退(3)
- 操作系统—死锁的检测和解除
- 数据结构—线索二叉树
- 计算机组成原理—半导体随机存储器的基本结构