mybatis和hibernate的异同
2015-07-30 11:02
183 查看
最近学习了mybatis,它也是一个ORM的持久层框架,但是它和hibernate还是有很大区别的,而且各有优缺点。
一、映射关系
hibernate实现了pojo和数据库表之间的映射,以及sql的自动生成和执行,程序员只需定义好了pojo和数据库的映射关系,就能通过hibernate提供的方法完成持久化的操作。程序员不需要对sql掌握熟练。
mybatis实现了pojo和sql的映射,通过映射配置文件,将sql需要的参数、返回值映射到指定的pojo。相对于hibernate而言,它需要程序员熟练掌握sql。
二、移植性
hibernate与数据库具体的关联只需在xml文件中配置即可,所有的hql语句与具体使用的数据库无关,移植性很好
mybatis中所有的sql语句都依赖具体的数据库写的,所以移植性差
三、sql优化
hibernate查询会将表中所有的字段查询出来,这一点会消耗性能,hibernate也可以自己写sql语句,但是这就破坏了hibernate开发的简洁性。hibernate具有自己的日志统计。
mybatis的sql是手动编写的,所以按照需求查询字段而且调整方便。mybatis本身不带日志统计,使用log4j进行日志记录。
四、缓存机制
相同点:Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓存方案,创建适配器来完全覆盖缓存行为。
不同点:Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后再在具体的表-对象映射中配置是那种缓存。
MyBatis的二级缓存配置都是在每个具体的表-对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。
两者比较:因为Hibernate对查询对象有着良好的管理机制,用户无需关心SQL。所以在使用二级缓存时如果出现脏数据,系统会报出错误并提示。
而MyBatis在这一方面,使用二级缓存时需要特别小心。如果不能完全确定数据更新操作的波及范围,避免Cache的盲目使用。否则,脏数据的出现会给系统的正常运行带来很大的隐患。
总结
hibernate的dao层开发比mybatis简单,mybatis需要维护sql的结果映射
hibernate数据库移植性好,mybatis的数据库移植性不好,不同的数据库要写不同的sql
hibernate有更好的二级缓存机制,mybatis提供的第三方缓存机制不佳
mybatis可以进行更为细致的sql优化,可以减少查询字段,性能更好一些。
mybatis简单易学,入门简单,hibernate学习门槛高。 mybatis的缺点是框架还比较简陋,功能尚有缺失,工作量比较大。
一、映射关系
hibernate实现了pojo和数据库表之间的映射,以及sql的自动生成和执行,程序员只需定义好了pojo和数据库的映射关系,就能通过hibernate提供的方法完成持久化的操作。程序员不需要对sql掌握熟练。
mybatis实现了pojo和sql的映射,通过映射配置文件,将sql需要的参数、返回值映射到指定的pojo。相对于hibernate而言,它需要程序员熟练掌握sql。
二、移植性
hibernate与数据库具体的关联只需在xml文件中配置即可,所有的hql语句与具体使用的数据库无关,移植性很好
mybatis中所有的sql语句都依赖具体的数据库写的,所以移植性差
三、sql优化
hibernate查询会将表中所有的字段查询出来,这一点会消耗性能,hibernate也可以自己写sql语句,但是这就破坏了hibernate开发的简洁性。hibernate具有自己的日志统计。
mybatis的sql是手动编写的,所以按照需求查询字段而且调整方便。mybatis本身不带日志统计,使用log4j进行日志记录。
四、缓存机制
相同点:Hibernate和Mybatis的二级缓存除了采用系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓存方案,创建适配器来完全覆盖缓存行为。
不同点:Hibernate的二级缓存配置在SessionFactory生成的配置文件中进行详细配置,然后再在具体的表-对象映射中配置是那种缓存。
MyBatis的二级缓存配置都是在每个具体的表-对象映射中进行详细配置,这样针对不同的表可以自定义不同的缓存机制。并且Mybatis可以在命名空间中共享相同的缓存配置和实例,通过Cache-ref来实现。
两者比较:因为Hibernate对查询对象有着良好的管理机制,用户无需关心SQL。所以在使用二级缓存时如果出现脏数据,系统会报出错误并提示。
而MyBatis在这一方面,使用二级缓存时需要特别小心。如果不能完全确定数据更新操作的波及范围,避免Cache的盲目使用。否则,脏数据的出现会给系统的正常运行带来很大的隐患。
总结
hibernate的dao层开发比mybatis简单,mybatis需要维护sql的结果映射
hibernate数据库移植性好,mybatis的数据库移植性不好,不同的数据库要写不同的sql
hibernate有更好的二级缓存机制,mybatis提供的第三方缓存机制不佳
mybatis可以进行更为细致的sql优化,可以减少查询字段,性能更好一些。
mybatis简单易学,入门简单,hibernate学习门槛高。 mybatis的缺点是框架还比较简陋,功能尚有缺失,工作量比较大。
相关文章推荐
- 消息框Messager使用方法
- 代码大全2-软件构建中的设计
- 表单三件套之一“上传插件” Plupload--网络转载
- vi/vim 基本使用方法
- HDU 3313 Key Vertex(BFS+BFS) 求S点到T点路径的关键点
- Mybatis包分页查询java公共类
- 正交实验设计法设计测试用例
- dicom网络通讯入门(1)
- 从头开始写项目Makefile(四):伪目标 .
- 使用WEBStorage+JSON做简易数据库
- 详解spring 每个jar的作用
- 详解spring 每个jar的作用
- 详解spring 每个jar的作用
- C#窗口实现单例模式的方法
- 设计模式 1-单例模式(Singleton)
- 属性通知之ObservableCollection
- 大数据:protobuf是啥玩意儿
- Java中static final 关键字释惑
- OpenCV向JNI层的参数转换
- H264基本概念之 宏块、片和片组