Mybatis和hibernate不同,

Mybatis不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并将java对象和sql语句映射生成最终执行的sql,最后将sql执行的结果再映射生成java对象。

Mybatis学习门槛低,简单易学,程序员直接编写原生态sql,可严格控制sql执行性能,灵活度高,非常适合对关系数据模型要求不高的软件开发,例如互联网软件、企业运营类软件等,因为这类软件需求变化频繁,一但需求变化要求成果输出迅速。但是灵活的前提是mybatis无法做到数据库无关性,如果需要实现支持多种数据库的软件则需要自定义多套sql映射文件,工作量大(因为每一中SQL的语法有些不同)

mybatis无法做到数据库无关性

Hibernate对象/关系映射能力强,数据库无关性好,对于关系模型要求高的软件(例如需求固定的定制化软件)如果用hibernate开发可以节省很多代码,提高效率。但是Hibernate的学习门槛高,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡,以及怎样用好Hibernate需要具有很强的经验和能力才行。

Hibernate对象/关系映射能力强,数据库无关性好

总之,按照用户的需求在有限的资源环境下只要能做出维护性、扩展性良好的软件架构都是好架构,所以框架只有适合才是最好。



1.概念:

Hibernate :Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,使得Java程序员可以随心所欲的使用对象编程思维来操纵数据库着力点对象与对象之间关系,自动生成SQL。

Mybatis:MyBatis 本是apache的一个开源项目iBatis, 2010年这个项目由apache software foundation 迁移到了google code,并且改名为MyBatis 。Mybatis着力于POJO与SQL之间的映射关系

Spring Data:Spring Data是一个用于简化数据库访问,并支持云服务的开源框架。其主要目标是使得对数据的访问变得方便快捷,并支持map-reduce框架和云计算数据服务。

2.开发的难度:

Hibernate的开发难度要大于Mybatis、Spring Data。主要是由于Hibernate封装了完整的对象关系映射机制,以至于内部的实现比较复杂、庞大,学习周期较长。
Mybatis 主要依赖于SQL的编写与ResultMap的映射。
Spring Data易上手,通过命名规范、注解查询简化查询操作。

3.查询区别:

简单查询:Hibernate 提供了基础的查询方法,也可以根据具体的业务编写相应的SQL(HQL);

Mybatis需要手动编写SQL语句,Spring Data 继承基础接口,可使用内置的增删改查方法。

高级查询:Hibernate通过对象映射机制,开发者无需关心SQL的生成与结果映射,专注业务流程;Mybatis需要通过手动在XML文件中编写SQL语句以及ResultMap或者注解,Spring Data 提供了命名规范查询和注解查询更简便的编写想要的SQL。

4.数据库的扩展性:

Hibernate与数据库具体的关联都在XML中,所以HQL对具体是用什么数据库并不是很关心。

Mybatis由于所有SQL都是依赖数据库书写的,所以扩展性,迁移性比较差。

Spring Data 与数据具体的关联可以通过命名规范查询、注解查询,无需关心数据库的差异,但是通过本地化SQL查询的话,就不易扩展。

5.缓存机制:

相同点:Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓存方案,创建适配器来完全覆盖缓存行为。

不同点:Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后再在具体的表-对象映射中配置是那种缓存。

MyBatis的二级缓存配置都是在每个具体的表-对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓存机制(命名空间)。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。

Spring Data 可以通过自己的缓存或者第三方缓存方案,配置满足自己业务需要的缓存行为。

6.查询方式:
Hibernate查询:
 .1.HQL  --->from Admin as admin where admin.name =:name 使用命名参数,仅使用与Hiberante框架

2.Criteria---->对象化查询 Criteria c = getSession().Criteria(Admin.class)

c.add(Restrictions.eq("aname",name));//eq是等于,gt是大于,lt是小于,or是或
   c.add(Restrictions.eq("apassword", password));

3.DetachedCriteria----->动态分离查询

4.例子查询-Example.create(user).list()

5.sql查询

Query q = s.createSQLQuery("select * from user").addEntity(User.class);

6.命名查询:Query q = getSession().getNamedQuery(“getUserByID”);

Mybatis查询:

l 定义xml例如;userMapper.xml

l 定义接口userMapper 定义相关的方法 不必编写接口的实现类

l 通过mybatis内部处理机制解析xml文件中的sql

l 调用存储过程 {call 存储过程名} 

Spring Data查询:

1.命名查询,需要遵循Spring Data规范,例如findByUser、deleteById 等从右向左解析生成sql

2.注解查询:@Query(“ql语句”)

7.总结:

Hibernate 对数据库提供了较为完整的封装,封装了基本的DAO层操作,有较好的数据库移植性

Mybatis 可以进行更细致的SQL优化,查询必要的字段,但是需要维护SQL和查询结果集的映射,而且数据库的移植性较差,针对不同的数据库编写不同的SQL,

Spring Data JPA 极大的简化了数据库访问,可以通过命名规范、注解的方式较快的编写SQL。

框架:Hibernate和Mybatis的区别相关推荐

  1. JPA、Hibernate、Mybatis的区别

    2019独角兽企业重金招聘Python工程师标准>>> 1.概念: Hibernate :Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装 ...

  2. Hibernate与MyBatis的区别

    一.简介 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个全自动的orm框架,hibernate可以自动生成SQ ...

  3. 聊聊Hibernate和Mybatis的区别

    1.开发对比 开发速度 Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些. 个人觉得要用好Mybatis还是首先要先理解好Hibernate ...

  4. Hibernate和MyBatis的区别与联系

    1.Hibernate 在管理系统时代,首先是实现业务逻辑,然后才是性能,所以Hibernate在当时是主流. 2.MyBatis 在移动互联网时代,MyBatis是首选,不屏蔽SQL,程序员可以自己 ...

  5. hibernate与mybatis的区别优缺点对比

    现在对hibernate和mybatis做一下对比,便于大家更好的理解和学习,使自己在做项目中更加得心应手. 第一方面:开发速度的对比 就开发速度而言,Hibernate的真正掌握要比Mybatis来 ...

  6. hibernate 和 mybatis 的区别

    [转载]:JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结 转载于:https://www.cnblogs.com/virgosnail/p/10054987.html

  7. hibernate与mybatis的区别和应用场景

    mybatis 与 hibernate 的区别和应用场景(转) 1    Hibernate : 标准的ORM(对象关系映射) 框架: 不要用写sql, sql 自动语句生成: 使用Hibernate ...

  8. 【Java框架】 Hibernate与Mybatis对比

    Hibernate与Mybatis对比 今天同事跟我说现在的小规模公司很少用hibernate,大部分都用mybatis.平时也经常接触这两方面,正好最近不怎么忙,查看网上其他相关技术文档 ,梳理下M ...

  9. jdbc,mybatis,hibernate各自优缺点及区别

    jdbc,mybatis,hibernate各自优缺点及区别 先比较下jdbc编程和hibernate编程各自的优缺点. JDBC: 我们平时使用jdbc进行编程,大致需要下面几个步骤:1,使用jdb ...

最新文章

  1. Mockito cannot mock/spy because : - final class 问题
  2. android studio常用适配器,从ListView(Android Studio)的自定义适配器中的U...
  3. sun的没落是悲还是喜?
  4. mysql数据库information_schema库中的表说明
  5. pcap封包修改服务器数据,tcprewrite批量修改pcap数据报文
  6. 蓝桥杯 基础练习 数列特征
  7. mysql null 查询条件_MySql当查询条件为空时不作为条件查询
  8. Egret之属性绑定
  9. Android6.0权限适配及兼容库的实现
  10. Atitit.python web环境的配置 attilax 总结
  11. TCP和UDP区别详解
  12. [导入]液晶显示器型号速查[转]
  13. Axure可视化原型模板+大数据图表组件 提升您的设计效率 做出甲方买不起的样子
  14. 关于JS如何实现图片闪烁
  15. 北京实时公交查询——Flutter 入坑实战
  16. 华为实验18-OSPF区域认证
  17. 【厚积薄发系列】C++项目总结10—C++模板在实际项目常用场景之一
  18. 公司内服务器微信报警怎么做,一种用企业微信实现信息报警的装置制造方法及图纸...
  19. 【060】PP匠-上传PPT后一键生成H5
  20. Web Spider XHR断点 堆栈跟值 逆向案例(四)

热门文章

  1. 10个迷惑新手的CocoaObjective-c开发问题
  2. ASP.NET—001:GridView绑定List、页面返回值
  3. C#使用StreamReader类读取汉字
  4. (Excel)常用函数公式及操作技巧之九:查询和查找引用
  5. 车道线检测参考学习资料
  6. C++中的类模板详细讲述
  7. 泛洪攻击(Flood)与TCP代理(TCP proxy)
  8. cut、tee、split、xargs、bc命令
  9. cent os 下使用hashmap + string
  10. autoconf和automake的安装与使用