Mybatis和Hibernate的一些区别

本文探讨了MyBatis与Hibernate这两种ORM框架的区别。MyBatis提供了高度灵活的SQL查询能力,而Hibernate则具备强大的对象关系映射机制。此外,还详细介绍了Hibernate中的四种对象状态及其转换过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Mybatis具有较高的灵活性,通过灵活的sql语句可以实现按需查询,查询字段比较干净,直接关联到映射对象。

Hibernate具有较高的封装机制,良好的对象映射机制,hibernate为了保证POJO的数据完整性,需要将关联的数据加载,需要额外地查询更多的数据。,这一点比Mybatis有性能消耗。但Hibernate具有更高的开发简洁性。

myBatis相对Hibernate 等封装较为严密的ORM 实现而言,因为hibernate对数据对象的操作实现了较为严密的封装,可以保证其作用范围内的缓存同步,而ibatis 提供的是半封闭的封装实现,因此对缓存的操作难以做到完全的自动化同步。从这里引出Hibernate的独有的四种对象状态,1、临时状态,2、持久化状态(托管状态),3、删除状态,4、游离状态(也称脱管状态)

临时状态:表示对象和数据库没有关联,id为null,不存在session的缓存中,在数据库中没有对应的记录,一般是指new 出来的对象。

持久化状态:id不为null,位于session的缓存中,持久化对象和数据库中的相关记录对应。session在flush缓存时,会把对象的状态更新到数据库对应的记录中

删除状态:在数据库中已经没有和其id对应的记录,不存在session缓存中

游离状态:id不为null,但不存在session缓存中,一般情况下,由持久化对象转换过来,数据库中可能还有其对应的记录。

从上面的四个状态中,我们可以知道,到对象处于持久化状态时,对象属性值发生改变时,Hibernate就会自动提交对象状态。这就需要我们在开发时注意了。当需要改变对象的状态,有不希望把对象的状态提交到数据库时,要么转换对象的状态,要么创建一个vo对象(临时对象),把持久化对象的属性赋值给对应的vo对象,对vo对象进行操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值