Mybatis和Hibernate

一、简介

二者都是O/R mapping框架。

1、Hibernate

Hibernate框架对数据库提供了较为完整的封装,实现了POJO(Plain Ordinary Java Object:简单的Java对象,或者叫普通的JavaBean,是为了避免和EJB混淆所创造的简称)和数据库表之间的映射,以及sql的自动生成和执行。程序员往往只需要定义好了POJO到数据库表的映射关系,即可以通过Hibernate提供的方法完成操作。Hibernate/OJB会根据制定的存储逻辑,自动生成对应的sql并调用JDBC接口加以执行。

2、Mybatis

Mybatis的着力点则在于POJO与sql之间的映射关系,通过映射配置文件,将sql所需的参数以及返回的结果字段映射到指定的POJO。

相对于Hibernate的“O/R”而言,Mybatis是一种“Sql Mapping”的ORM实现。

二、系统调优对比

1、Hibernate常用的调优方案:

1)制定合理的缓存策略;

2)尽量使用延迟加载特性;

3)采用合理的Session管理机制;

4)使用批量抓取,设定合理的批处理参数(batch_size);

5)进行合理的O/R映射设计。

2、Mybatis常用的的调优方案:

1)制定合理的缓存策略;

2)采用合理的Session管理机制;

3)进行sql优化设计。

Mybatis在Session方面和Hibernate的Session生命周期是一致的,同样也有二级缓存机制。

三、sql优化方面

1、Hibernate的sql优化:

1)Hibernate的查询会将表中所有的字段查询出来,这一点会有性能损耗;

2)Hibernate也可以自己写sql来制定要查询的字段,但这样就破坏了Hibernate开发的简洁性;

3)Hibernate的HQL语句调优需要将sql打印出来,调整不方便,不直观;

4)Hibernate有自己完整的日志统计,包括:sql记录、关系异常、优化警告、缓存提示、脏数据警告等;

2、Mybatis的sql优化:

1)Mybatis的sql是手动编写的,可以按需求指定查询的字段,调整直观方便;

2)Mybatis本身不带日志统计。

四、扩展性方面

1、Hibernate与具体数据库的关联只需在xml文件中配置即可,所有的HQL语句与具体使用的数据库无关,移植性很好;

2、Mybatis项目中所有的sql语句都是依赖所用的数据库,因此对不同类型数据库的支持不好。

五、对象管理与抓取策略

1、对象管理

Hibernate是完整的对象/关系映射解决方案,它提供了对象状态管理的功能,是开发者不再需要理会底层数据库系统的细节。相对于常见的JDBC/SQL持久层方案中需要管理sql语句而言,Hibernate采用了更自然的面向对象的视角来持久化Java中应用的数据;

Mybatis在对象管理上没有详细的解决方案,需要用户自己对对象进行管理。

2、抓取策略

Hibernate对实体关联对象的抓取有良好的机制。对于每一个关联关系都可以详细地设置是否延迟加载,并且提供关联抓取、查询抓取、子查询抓取、批量抓取四种模式,它是详细配置和处理的;

Mybatis的延迟加载时全局配置的。

六、缓存机制

各自的详细介绍见《磁盘缓存、Hibernate缓存、Mybatis缓存》

1、相同点

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

2、不同点

1)Hibernate的二级缓存在Session Factory生成的配置文件中进行详细配置,然后再具体的表-对象映射中配置是哪种缓存;

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

2)因为Hibernate对查询对象有着良好的管理机制,用户无需关心sql,所以在使用二级缓存时如果出现脏数据,系统会报错;

Mybatis在使用二级缓存时需要特别小心,如果不能完全确定数据更新操作的波及范围,需避免cache的盲目使用,否则,脏数据的出现会给系统的正常运行带来很大的隐患。

七、两个框架对比总结

1、相同点

1)Hibernate和Mybatis都可以通过SessionFactoryBuilder由xml配置文件生成SessionFactory,然后由SessionFactory生成Session,最后由Session来开启执行事务和sql语句。二者的SessionFactoryBuilder、SessionFactory、Session的生命周期都差不多;

2)Hibernate和Mybatis都支持JDBC和JTA事务处理。

2、优势

Hibernate优势

1)Hibernate数据库无关性好,O/R映射能力强,Mybatis需要维护sql和结果映射;

2)Hibernate对对象的维护和缓存要比Mybatis好,对增删改查的对象的维护要方便;

3)Hibernate数据库移植性很好,Mybatis的数据库移植性不好,不同的数据库需要写不同的sql;

4)Hibernate有更好的二级缓存,Mybatis本身提供的缓存机制不佳。

Mybatis优势

1)Mybatis可以进行更为细致的sql优化,可以减少查询字段;

2)Mybatis容易掌握,Hibernate门槛较高。

 

 

### 回答1: 我们可以把MyBatisHibernate比作两个工具箱,它们都是Java编程语言的开源持久层框架,用于映射关系数据库中的数据到Java对象。MyBatis提供了一种灵活的接口,可以自定义SQL,存储过程高级映射。而Hibernate则提供了一种面向对象的查询语言,可以用于查询更新数据库中的数据。 ### 回答2: MyBatisHibernate是两种常用的Java持久化框架。 MyBatis是一种基于半自动化原理的ORM(对象关系映射)框架。它通过XML或注解的方式,将数据库表映射为Java对象,并且提供了灵活的SQL映射配置,可以细粒度地控制SQL语句的编写执行。MyBatis将SQLJava代码解耦,使得开发者可以更加灵活地操作数据库,满足复杂业务需求。另外,MyBatis支持原生SQL、动态SQL存储过程等数据库操作方式,支持多种数据库的平滑切换。 Hibernate是一种全自动化的ORM框架。它通过配置文件或注解的方式,自动完成数据库表Java对象之间的映射,无需手动编写SQL语句。Hibernate使用了Hibernate Query Language (HQL)这种面向对象的查询语言,使得开发者可以直接面对对象编程,提高了开发效率。另外,Hibernate还具备缓存、事务管理跨数据库支持等重要特性,可以提供较高的系统性能可扩展性。 相比而言,MyBatis更灵活,可以更好地控制SQL语句数据库操作。它适用于对SQL熟练的开发者对性能要求较高的项目,但需要开发者手动维护SQL语句数据库表的映射关系。而Hibernate则更加自动化,提供了更高的开发效率,但对于复杂的查询性能要求较高的项目,可能不如MyBatis灵活。因此,在选择使用哪种框架时,需要根据具体项目需求开发者技术水平进行权衡。 ### 回答3: MyBatisHibernate是Java编程语言中两个常见的对象关系映射(ORM)框架。 MyBatis是一个基于XML配置文件的持久层框架。它的优势在于灵活性对SQL的直接控制能力。使用MyBatis,开发者可以定义自己的SQL语句以及参数映射,从而能够更好地优化数据库访问性能。另外,MyBatis还支持动态SQL缓存等功能,使得开发者能够灵活地处理各种复杂的查询需求。但是,相对于Hibernate而言,MyBatis需要手动编写SQL语句,因此对于开发者而言,需要有更强的SQL知识经验。 Hibernate是一个全自动的ORM框架。它通过使用面向对象的思维模型将Java对象映射到数据库表结构上。Hibernate可以大大减少开发者需要编写的SQL语句,提高开发效率。另外,Hibernate还提供了很多高级的特性,例如对象级别的缓存、延迟加载、事务管理等。这些特性使得开发者能够更加关注业务逻辑,而不需要过多地关心数据库操作。 总的来说,MyBatisHibernate都是优秀的ORM框架,各有各的优势。MyBatis适合对SQL有较强需求的项目,或者对数据库访问性能要求较高的项目。Hibernate则适合那些需要高度自动化数据库操作的项目,或者对业务逻辑更关注而不太关心底层SQL语句的项目。正确选择合适的框架取决于具体的项目需求开发者的技术水平。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值