一、相同点

都屏蔽 jdbc api 的底层访问细节,使用我们不用与 jdbc api 打交道,就可以访问数据。

jdbc api 编程流程固定,还将 sql 语句与 java 代码混杂在了一起,经常需要拼凑sql语句,细节很繁琐。

二、映射区别

有时我们可能需要用不正规形式与传统数据库协同工作,

使用成熟的 ORM 框架(如 Hibernate ),有可能很难跟传统数据库很好地协同工作,因为他们尝试将 Java 对象静态地映射到数据库的表上。

而 MyBatis 是将查询的结果与 Java 对象映射起来,这使得 MyBatis 可以很好地与传统数据库协同工作。你可以根据面向对象的模型创建 Java 域对象,执行传统数据库的查询,然后将结果映射到对应的 Java 对象上。

三、SQL 区别

成熟的 ORM 框架(如 Hibernate )鼓励使用实体对象(Entity Objects),和在其底层,自动产生SQL 语句。由于这种 SQL 生成方式,我们有可能不能够利用到数据库的一些特有的特性。Hibernate 允许执行本地 SQL,但是这样会打破持久层和数据库独立的原则。

MyBatis 框架接受 SQL 语句,而不是将其对开发人员隐藏起来。由于 MyBatis 不会产生任何的SQL 语句,所以开发人员就要准备 SQL 语句,这样就可以充分利用数据库特有的特性并且可以准备自定义的查询。

其它:

MyBatis 对存储过程也提供了支持。

将sql语句与java代码进行分离;提供了将结果集自动封装称为实体对象和对象的集合的功能,queryForList返回对象集合,用queryForObject返回单个对象;提供了自动将实体对象的属性传递给sql语句的参数。

Hibernate的优点:

1、如果你的应用是以面向对象模型,并且想动态生成SQL语句,那么MyBatis可能就不符合你的要求;
2、如果要让你的应用有一个传递性的缓存机制的话(保存父对象时也应该保存关联的子对象),Hibernate会更适合。

Hibernate是一个全自动的orm映射工具,它可以自动生成sql语句,ibatis需要我们自己在xml配置文件中写sql语句,hibernate要比ibatis功能负责和强大很多。因为hibernate自动生成sql语句,我们无法控制该语句,我们就无法去写特定的高效率的sql。对于一些不太复杂的sql查询,hibernate可以很好帮我们完成,但是,对于特别复杂的查询,hibernate就很难适应了,这时候用ibatis就是不错的选择,因为ibatis还是由我们自己写sql语句。

最新文章

  1. .NET/ASP.NET MVC Controller 控制器(深入解析控制器运行原理)
  2. 睡觉问题早晚成为我顶头疼的问题。。。-PHP
  3. http与websocket(基于SignalR)两种协议下的跨域基于ASP.NET MVC--竹子整理
  4. LNMP 环境发布项目
  5. Spring IOC 方式结合TESTGN测试用例,测试简单java的命令模式
  6. SVN server的搭建
  7. PDO的事物处理机制
  8. WimMaker 2.0 (2013.10) WIM制作工具
  9. java多线程系列(一)
  10. oracle 分析函数中 keep关键字的使用
  11. WordPress Plugin Contact Form Builder [CSRF → LFI]
  12. java 11 值得关注的新特性
  13. UEditor富文本简单使用
  14. Billiard CFR484 div2 (数论)
  15. spass按位置编码,进行排序题处理与分析
  16. VsCode 使用习惯设置(备份)
  17. sql语句Order by 报错列名不明确
  18. 链栈的基本操作(C语言)
  19. mybatis 之 parameterType="HashMap"参数包含list
  20. Mac下 Windows 7 虚拟机搭建SVN服务器的详细步骤(此方法同样适用于单纯的Windows系统搭建SVN)

热门文章

  1. virtualbox 安装 虚拟机的时候报错不能创建新任务
  2. Erlang 程序引发共享内存 bug 的一个例子
  3. 如何自定义Grunt任务
  4. The Monocycle(BFS)
  5. Swift 学习笔记 enum 枚举类型
  6. Excel Sheet Column Number
  7. hdu2527哈夫曼编码
  8. NOIP2014提高组 DAY1 -SilverN
  9. js统计字符串中各种字符情况
  10. python中range函数和xrange函数有什么异同?