关于MyBatis和Hibernate的区别?

请简述MyBatis和Hibernate的区别


幕布斯6054654
浏览 663回答 3
3回答

aluckdog

答:Hibernate和Mybatis都是orm对象关系映射框架,都是用于将数据持久化的框架技术。Hiberante较深度的封装了jdbc,对开发者写sql的能力要求的不是那么的高,我们只要通过hql语句操作对象即可完成对数据持久化的操作了。另外hibernate可移植性好,如一个项目开始使用的是mysql数据库,但是随着业务的发展,现mysql数据库已经无法满足当前的绣球了,现在决定使用Oracle数据库,虽然sql标准定义的数据库间的sql语句差距不大,但是不同的数据库sql标准还是有差距的,那么我们手动修改起来会存在很大的困难,使用hibernate只需改变一下数据库方言即可搞定。用hibernate框架,数据库的移植变的非常方便。但是hibernate也存在着诸多的不足,比如在实际开发过程中会生成很多不必要的sql语句耗费程序资源,优化起来也不是很方便,且对存储过程支持的也不够太强大。但是针对于hibernate它也提供了一些优化策略,比如说懒加载、缓存、策略模式等都是针对于它的优化方案。Mybatis 也是对jdbc的封装,但是封装的没有hibernate那么深,我们可以再配置文件中写sql语句,可以根据需求定制sql语句,数据优化起来较hibernate容易很多。Mybatis要求程序员写sql的能力要相对使用hibernate的开发人员要高的多,且可移植性也不是很好。涉及到大数据的系统使用Mybatis比较好,因为优化较方便。涉及的数据量不是很大且对优化没有那么高,可以使用hibernate

小唯快跑啊

1) 对于每个实体,需要写一个dao接口文件。编码复杂度C(n)=O(n),即会随实体的增长,编码量呈线性增长。当n较大时,会增加许多人力物力消耗。2) 实体Javabean与DB表的map映射文件太多;或者,实体Javabean文件注解用得太泛滥,太多注解难以记忆,增加开发人员负担。Mybatis中实体对应的mapper文件,代码太多,虽然可以自动生成,但阅读性太差。编写和调试sql语句需要大量时间,降低开发效率。3) 实体操作默认的条件,一般以id作为条件,但开发时,一般不会提前知道id;若用其它条件作为查询等,需要在接口文件新定义方法。如一个实体有10个字段,2个字段组合一个查询方法,则有 =45个查询方法;若算上3个字段,4个字段的组合,则更多。4) 接口文件定义好后,若后期发现定义的方法不能满足需求,需要定义新的方法,又要修改接口文件;若是系统已经上线,还要需要重新开发、测试、发布等。5) 当一个表新增一个字段,删除一个字段,或修改一个字段时,Mybatis需要修改mapper映射文件,几乎其中的每个方法都要修改。修改字段,Mybatis在编译期不能自动发现错误。Hibernate通过xml文件或有注解的Javabean文件,同步DB的表结构时,也不能实现删除和更新。更新时,它是忽略原来的字段,然后新增一个字段,除非删除了表,重新再建一次。要是DB的表已保存了数据,不能删除,还是要手动去更改数据库。6) Hibernate想让ORM框架做完DB所有的事情,反而使框架变得太复杂,不易于使用。Hibernate的ORM模型不能查询一部分数据,即使用户没有使用到,也会将所有关联的数据都查询出来。7) Hibernate的概念太复杂,学习成本高,更新会先查询再更新,n+1问题。Mybatis即使进行单表的Suid操作也需要人工写sql或生成sql文件,需要维护的sql太多。8) 需要写很多的判断字段是否为空(null) ,是否是空字符串的语句;开发人员需要承担太多类似的重复,乏味的编程工作。
打开App,查看更多内容
随时随地看视频慕课网APP