Spring Boot 2.0 读书笔记_08:数据库操作补充说明 + Mybatis、Hibernate异同点

写在开头,为了承接下篇文章JPA做好铺垫以及回顾下数据库操作的相关知识,于是有了这篇文章。
谈到操作数据库,可以说我是经历了好几个阶段:提及几个阶段关键字来回忆下!

1. JDBC阶段(数据库驱动,preparedStatement,close()放在try-catch块里)
2. 连接池阶段(c3p0、dbcp、druid)
3. Spring JDBC Template阶段
4. 框架阶段(mybatis、mybatis-plus、hibernate)

总的来说,原理性的JDBC是贯穿始终的,只是在不同角度和程度上进行数据库相关操作的封装。当然封装角度和程度也大有不同。

封装角度,这个词形容可能有点牵强,但是数据库操作的封装便是沿着这个方向进行的。

SQL角度:Mybatis
Java Entity角度:Hibernate

那么接下来就是老生常谈的面试环节:Mybatis和Hibernate的区别?
通过网上资料在这里总结下: 提前说明,博主没怎么使用过Hibernate

  1. 上手速度

就开发速度而言,Hibernate要比Mybatis上手难度大。换言之Mybatis对新手比较友好。当然实际使用中要结合具体需求进行使用,比如:一个项目中复杂查询几乎没有,都是常规的CURD操作,这种场景下就比较适合使用Hibernate了,基于数据库的ORM框架已经帮你将基本的SQL语句进行了封装,无需再去写SQL语句。反之,开发的是一个复杂查询操作较多的需求项目,这个时候Hibernate的短板就出现了,这个时候采用Mybatis便会加快开发速度,你可以自定义SQL,进行高效的复杂查询操作。

  1. 开发工作量

Hibernate和MyBatis都有相应的代码生成工具。可以生成简单基本的DAO层方法。针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。

  1. SQL优化

Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗。Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。而Mybatis的SQL是手动编写的,所以可以按需求指定查询的字段。

  1. 对象管理

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


敲黑板记笔记:这个地方要着重说一下ORM(对象关系映射)框架,Hibernate自然不必多说,O/R映射能力强,但是Mybatis也被称作ORM框架?这是为何?

关键字:Hibernate POJO DBTable
Hibernate对数据库结构提供了较为完整的封装,Hibernate的O/R Mapping实现了POJO和数据库表之间的映射,以及SQL的自动生成和执行。程序员往往只需定义好了POJO到数据库表的映射关系,即可通过Hibernate提供的方法完成持久层操作。程序员甚至不需要对SQL的熟练掌握,Hibernate/OJB会根据制定的存储逻辑,自动生成对应的SQL并调用JDBC接口加以执行。

关键字:Mybatis POJO SQL
Mybatis的着力点,则在于POJO与SQL之间的映射关系。也就是说,Mybatis并不会为程序员在运行期自动生成SQL执行。具体的SQL需要程序员编写,然后通过映射配置文件,将SQL所需的参数,以及返回的结果字段映射到指定POJO。使用Mybatis提供的ORM机制,对业务逻辑实现人员而言,面对的是纯粹的Java对象,这一层与通过Hibernate 实现ORM而言基本一致,而对于具体的数据操作,Hibernate会自动生成SQL语句,而Mybatis则要求开发者编写具体的SQL语句。相对Hibernate而言,Mybatis以SQL开发的工作量和数据库移植性上的让步,为系统设计提供了更大的自由空间。

一句话总结:Hibernate是POJO与数据库表的完整映射对应,Mybatis是对SQL返回ResultSet集的POJO映射。

角度不同,自然适用的场景便不同。无论如何,在数据框操作的上层,我们都希望操作的最小单元是Object,这样便于业务逻辑的开发,以及对象的管理。

Mybatis作者曾说过:

If you are starting a new project and you’re in full control of your object model and database design, Hibernate is a good choice of O/R tool.
If you are accessing any 3rd party databases (e.g. vendor supplied), or you’re working with a legacy database, or even just a really poorly designed database, then an O/R mapper might not be capable of handling the situation. That’s were an SQL Mapper comes in handy.

如果你开始一个新的项目,你完全控制你的对象模型和数据库设计,Hibernate O/R工具是一个不错的选择。
如果你访问任何第三方的数据库(如供应商提供的),或者你有一个传统的数据库工作,甚至只是一个很糟糕的数据库设计,然后O/R映射器可能无法处理的情况。这是一个SQL映射器就派上用场了。


两者都很优秀,用什么看自己了。此外,Mybatis-plus也是一个非常不错的选择哦。

MyBatis-Plus(简称 MP)是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程小透明

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值