首页 > 编程知识 正文

property sqlsessionfactory or,jpa和hibernate的区别

时间:2023-05-04 13:43:47 阅读:173643 作者:4742

ORM:或对象关系映射,或对象关联映射。 因此,ORM是Java对象和数据库中的表之间的关联。

想想Mybatis。 Mybatis相当于将mapper参与和加入结果集封装在java的POJO类中。 听起来像ORM吧?

但实际上Mybatis是半ORM,开发人员自己鼓励写sql。 这意味着,由于sql语句是自己写的,因此Mybatis将java方法与sql语句相关联,而不将java对象与数据库相关联。

这些Mybatis的优点是,了解sql的开发和调整可以更好地管理和优化sql,同时充分利用数据库的各种功能,如存储视图、复杂的查询和特定数据库的独特特性有好处的同时也有坏处呢。 因为自己写sql,所以面对很多数据库的时候,这种方法平台的可移植性不是很高。

我说了半天左右,有真正的` ORM框架吗?

这样就必须邀请另一个人了。Hibernate~

如前所述,Mybatis是一个非常受欢迎的ORM框架,主要是POJO和SQL之间的映射关系。

Hibernate也是一种非常流行的ORM框架,它通过处理数据对象来更完整地封装数据库结构。

所以通过说Mybatis和ORM的不同导致了Mybatis和Hibernate的不同。

然后单击Mybatis和Hibernate上的区别

主要差异的比较

Mybatis将java方法与sql语句相关联,是半自动的,Hibernate将java对象与数据库相关联,是全自动的。 虽然Mybatis必须自己编写SQL语句、结果映射等,但映射机制使Hibernate不再关注SQL的生成和结果映射,从而可以将精力集中在业务上。 开发的难度

Mybatis的开发难度低于Hibernate。 因为Mybatis需要我们写的SQL,所以大多数程序员应该都是在学校开始写SQL的,但后期直接基于SQL进行调优也很亲切,众所周知。

另一方面,Hibernate要求框架在大量配置中自动将sql语句发送到数据库,以完成我们想要执行的数据库操作。 Hibernate还允许您自己编写sql以创建需要查询的字段,但这将损害框架的特性。 可移植性

通过上面的开发难度的比较,其实可以拿去比较他的可移植性。 Mybatis很容易使用,我们自己写SQL,但是我们自己写的SQL还是和我们当时依赖的数据库有关,所以SQL和数据库的耦合性决定了如果写的SQL和很多数据库不通用的话,Mybatis的移植

Hibernate强大的映射结构和HQL降低了对象与每个数据库的耦合性,Hibernate与数据库的具体关联写在XML中,因此HQL对于我们当前使用的数据库和今后使用的数据库日志系统

Mybatis没有日志统计功能,因此需要使用log4j。 另一方面,HIbernate具有日志聚集功能,日志系统非常健全,包括SQL日志、关系异常、缓存提示和优化警告脏数据警告。 SQL优化

既然Mybatis可以自己手写SQL,SQL可以写在XML里或评论里,可以写SQL,就应该自己优化SQL。 因为最优化的方式和SQL的最优化方式相同,所以使用Mybatis的时候只要考虑你应该如何最优化SQL就可以了。

Hibernate在SQL优化方面很困难。 在Hibernate概念中,Java对象有三种状态。 瞬时状态、游离状态、持续状态。 当这些状态发生变化时,Hibernate框架会自动将sql语句发送到数据库并完成数据库操作。 Hibernate有三种查询方法: QBC、HQL和SQL,因此大多数SQL是自动生成的。 无法更直接地维护SQL。 这意味着优化SQL语句很困难。 高速缓存机制

MyBatis的二级高速缓存配置针对特定的表和对象映射进行了详细配置,因此可以为每个表定制不同的高速缓存机制。 另外,Mybatis可以在名称空间中共享相同的缓存配置和实例,通过Cache-ref来实现。 在Mybatis中使用二级缓存时需要特别小心。 如果不能完全确定数据更新操作的范围,请避免盲目使用Cache。 否则,污染数据的出现会给系统的正常运行带来很大的风险。

Hibernate的辅助缓存配置由SessionFactory生成的配置文件详细组成,然后在特定的表-对象映射中配置其缓存,以正确管理查询对象。 用户不需要在意SQL。 因此,如果在使用二级缓存时发生脏数据,则会报告错误并显示提示。 当然两者并不都不同。 接下来谈谈两者的相同

Mybatis和Hibernate都采用ORM的思想,Hibernate和Mybatis都通过SessionFactoryBuider从XML配置文件中生成SessionFactory。 最后可以从SessionFactory生成sesion,其中SessionFactoryBuider,Sess

ionFactory,Session的生命周期差不多并且Hibernate和MyBatis都支持JDBC和JTA事务处理,其二级缓存除了采用系统默认的缓存机制外,都可以通过实现你自己的缓存或为其他第三方缓存方案,创建适配器来完全覆盖缓存行为。

优略势总结

Mybatis优势

Mybatis入门简单,即学即用,提供了数据库查询的自动对象绑定功能,而且延续了很好的SQL使用经验,对于没有那么高的对象模型要求的项目来说,相当完美。MyBatis可以进行更为细致的SQL优化,可以减少查询字段。缺点就是框架还是比较简陋,功能尚有缺失,虽然简化了数据绑定代码,但是整个底层数据库查询实际还是要自己写的,工作量也比较大,而且不太容易适应快速数据库修改。二级缓存机制不佳。

Hibernate优势

Hibernate的数据库无关性好,O/R映射能力强,功能强,如果你对Hibernate相当精通,而且对Hibernate进行了适当的封装,那么你的项目整个持久层代码会相当简单,需要写的代码很少,开发速度很快,非常爽DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。

形象比喻(这个比喻真的太好了)

mybatis:机械工具,使用方便,拿来就用,但工作还是要自己来作,不过工具是活的,怎么使由我决定。hibernate:智能机器人,但研发它(学习、熟练度)的成本很高,工作都可以摆脱他了,但仅限于它能做的事。

参考
https://www.zhihu.com/question/21104468
https://baijiahao.baidu.com/s?id=1598595163822471051&wfr=spider&for=pc
https://blog.csdn.net/qq_41378597/article/details/88070335
https://www.cnblogs.com/lixuwu/p/10941649.html
https://www.zhihu.com/question/21104468

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。