信创国产化替换如何推动企业自主创新与市场竞争力提升
646
2022-12-02
hibernate与mybatis的比较
近来面试了不少java程序员,基本上都是SSM,这个M,就是mybatis,数据持久层框架。
java世界里,另一个著名且应用广泛的持久层框架是HIbernate?我以前搞-的时候,也用它,NHibernate,。net的版本。
两者比较,有啥区别?
Hibernate试图完全用面向对象的方法来访问数据库,最终将我们的代码转化成SQL到数据库里执行,返回结果用实体类或集合之类来接收;当然Hibernate也可以执行我们写的SQL语句,但返回结果需要程序员手动做一个转换,才能赋值到实体类或集合里。
而mybatis则需要我们在注解或配置里写好SQL,交给它来执行。返回结果也是用实体类或集合之类来接收。
先给结论:mybatis比hibernate要实用和灵活。
hibernate使得程序员可以像开发业务模块一样,直接写代码来操作数据库,理论上可以完全不懂SQL,因为这部分工作它替我们做了。但是,最强大的之处也往往是最薄弱之处。正因为转化成SQL这个工作hibernate替我们做了,这是个黑箱,我们写代码的时候,往往不知道它会转成什么样子,感觉不可控,尤其是出了问题调试的时候。有时候,我们明明只是查询,但天知道数据库居然会开启了一个事务。这里面原因很多,可能是我们先从数据库查找,获得了一个对象,然后中途修改了这个对象的属性,hibernate就会自动持久化到数据库,从而开启了事务。
本来呢,将程序员当成普通用户,啥事都帮他做好,表面上方便,但掩盖了原理,反而阻碍了开发人员的理解和深入,这是微软系列的风格,JAVA应该是偏重于开源和参与,所以我觉得hibernate是走偏了。
像mybatis就挺好啊,还是写SQL语句,但返回结果封装在对象里,灵活与便利很好地结合起来。事实上,hibernate简单的增删改查不用写SQL,但像统计分析这类比较复杂的,我们还是照样写SQL。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~