在Java企业级平台开发任务当中,持久层框架的选择,Mybatis和Hibernate都占据一定的市场。从大趋势来说,传统企业偏爱Hibernate,而互联网更偏爱Mybatis。今天的大数据基础分享,我们就来对Mybatis和Hibernate两个框架做个简单的对比分析。
一、关于Mybatis
MyBatis本是Apache的一个开源项目iBatis,2010年迁移到google code,并且改名为MyBatis,之后就以Mybatis命名固定下来,2013年11月迁移到Github。
MyBatis是一款优秀的持久层框架,基于Java,内部封装了JDBC,使得开发者只需要关注SQL语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。
具体来说,Mybatis支持定制化SQL、存储过程以及高级映射,避免了几乎所有的JDBC代码和手动设置参数以及获取结果集。
MyBatis可以使用简单的XML或注解来配置和映射原生类型、接口和Java的POJO(Plain Old Java Objects,普通老式Java对象)为数据库中的记录。
二、关于Hibernate
Hibernate同样也是一个优秀的持久层框架,出身于sf.net,现在已经成为Jboss的一部分。Hibernate作为O/R mapping框架,与Mybatis常常被拿来作比。
Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO和数据库表之间的映射,以及SQL的自动生成和执行。开发者往往只需定义好了POJO到数据库表的映射关系,即可通过Hibernate提供的方法完成持久层操作,甚至不需要对SQL的熟练掌握,Hibernate/OJB会根据制定的存储逻辑,自动生成对应的SQL并调用JDBC接口加以执行。
三、MyBatis和Hibernate的对比
MyBatis与Hibernate都是对象关系映射(ORM)框架,都是用于将数据持久化的框架技术,都是对JDBC的封装。两者的区别是存在于多方面的:
1.Hibernate是全自动,而MyBatis是半自动
Hibernate完全可以自动生成SQL。而MyBatis仅有基本的字段映射,仍然需要通过手写SQL来实现和管理。
2.Hibernate编码量小会减少开发周期,MyBatis编码量大会拖慢开发周期
Hibernate是对JDBC的高度封装,使用起来几乎不用写SQL,开发的时候,会减低开发周期.MyBatis需要自己写SQL,编码量较大,会拖慢开发周期。
3.Hibernate数据库移植性远大于MyBatis
Hibernate通过它强大的映射结构和HQL语言,大大降低了对象与数据库(oracle、mySQL等)的耦合性,而MyBatis由于需要手写SQL,移植性也会随之降低很多,成本很高。
4.MyBatis入门简单,Hibernate入门比较难
MyBatis入门简单,即学即用。Hibernate学习门槛高,要精通门槛更高,而且怎么设计O/R映射,在性能和对象模型之间如何权衡取得平衡,以及怎样用好Hibernate方面需要开发者的经验和能力都很强才行。
5.SQL直接优化上,MyBatis要比Hibernate方便很多
由于MyBatis的SQL都是写在xml里,因此优化SQL比Hibernate方便很多。而Hibernate的SQL很多都是自动生成的,无法直接维护SQL;总之,写SQL的灵活度上Hibernate不及MyBatis。
四、MyBatis和Hibernate选哪个?
在实际开发任务当中,对于持久层框架的选择,不仅仅要考虑到它们的特性及性能,更要根据项目需求去考虑究竟哪一个更适合项目开发。
举个简单的例子,一个项目中用到的复杂查询基本没有,就是简单的增删改查,这样选择Hibernate效率就很快了,因为基本的SQL语句已经被封装好了,可以节约时间提升效率;而对于一个大型项目,复杂语句较多,选择MyBatis就会更适合,而且SQL语句的管理也比较方便。
关于大数据基础,Mybatis和Hibernate对比分析,以上就为大家做了简单的介绍了。持久层框架的选择,是大数据基础架构设计当中需要考虑的重要一环,Hibernate和Mybatis建议可以结合实际来选择。