最近新学了Hibernate框架,发现跟Mybatis还是有很多不一样的地方,使用习惯也有所不同,于是就想专门梳理一下两者的一些异同点,如有错误遗漏,欢迎讨论指出。
什么是ORM框架
首先介绍一下什么是ORM框架,全称Object Relational Mapping,简称ORM或O/R Mapping,即对象关系映射。是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”(引用自百度百科)。个人认为其实与jdbc的连接是一个类似的模式,都是能够实现在面对不同对象访问时能够自行转换,从而使得开发者代码操作统一。而今天要介绍的两个框架都是属于ORM框架。
Mybatis与Hibernate
其实Mybatis是一个半ORM框架,半ORM指的是它的持久层封装不彻底,也就给了开发者更多的发挥空间去控制数据库操作的细节。而Hibernate是完全的ORM框架,他功能强大,具有完整流程,开发者只需要按照业务需求调用相应的接口方法即可完成数据库的调用操作,不需要开发者自己书写sql语句。但是缺点而是很明显的,就是sql语句由框架书写,那么当业务操作复杂的时候就会造成性能下降,因为他底层接口的方法是固定的,无法人为修改。
下面我们贴上一组操作对比:
Mybatis持久层接口方法:
持久层xml映射文件sql语句:Mybatis的特点就是需要自行书写sql语句,也算是有利有弊吧,可以自行优化sql语句,提升性能。当然也可以选择用Mybatis Plus,能直接使用部分简单的sql语句,不用开发者书写
service层则是正常的持久层方法调用:
我们再看下执行情况:可以看到不适用嵌套语句的情况下,只会有一条sql语句执行
而Hibernate中:
持久层接口:什么方法都可以不用写,只需要继承一个接口
实现类中:直接注入接口名,然后调用接口自带的方法就可以完成数据库操作
再来看下执行情况:
添加方法是执行了两条语句
删除方法我这里做了级联删除,但是也执行了四条语句
而与之相比,Mybatis只执行了一条语句就实现了同样的功能。
总结
经过工程结构,代码结构以及执行情况的对比,可以得到:
1、操作上Mybatis更多需要开发者手动编写但是易上手,HIbernate大部分为直接调用,开发者只需要编写注解和继承接口,新学者不易上手;
2、功能上Mybatis只执行书写的sql语句;而Hibernate会自动调用一系列辅助语句,共同完成业务需求。
3、应用场景上Mybatis支持高性能应用编写,能应对各种复杂的业务需求,适用于对应用比较高要求的互联网行业,而Hibernate sql语句固定,适用于业务需求简单固定的行业,比如erp等;