Hibernate 与 Mybatis 如何共存?打破你的认知!
很长一段时间,网上有很多关于Hibernate与Mybatis孰优孰劣的争论,两个阵营的人谁也不能说服谁,每个人的理由都很有道理。
今天,我分享的主题是:在一个项目中同时使用Hibernate和Mybatis两个ORM框架。
作为一个开发者,没有必要花费过多的时间去证明技术无用论,当你开始指责某个框架垃圾,另外一个框架最好时,隐性的暴露出你对某个框架没有深入的研究,无知的指责对于技术的提升没有任何的帮助。
框架本身没有对错一说,只有适合和更适合项目的选择。任何框架都有自身的能力范围,就拿Hibernate和Mybatis这两个ORM框架来说。
Hibernate封装了很多有用的API给开发者,降低了操作数据库的难度和复杂度,同时也减少了模板代码的数量,但Hibernate留给开发者可操作的空间相对Mybatis少了很多。
Mybatis框架使用起来很灵活,开发者可以自定义查询语句,但增加了模板代码的数量,看起来没有Hibernate那么便捷。
两种框架在便捷与灵活两个指标上做出了取舍与妥协,这不能说是框架的错。对于一个框架而言,需要有自身专注的领域和设计愿景,不可能面面俱到。
使用任何一种技术框架,都需要贴合现实的业务需求以及自身的技术能力。当你还没有深入的去了解一门技术或者当前业务需求无法与框架契合时,不要盲目的批判框架的好坏。
今天,我不再去对比Hibernate与Mybatis两者之间的优劣,而是给出一个比较中庸的放方案,将两个ORM框架同时整合在一个项目中。
一、准备开发环境
如果你想成功运行本文中的源代码,需要满足一下的几个条件:
1、JDK : JDK 1.8.x及以上版本
2、Maven : Maven 3.x或更高版本
3、Git:版本控制工具,选择一个你喜欢的
4、IDE : 选择你比较喜欢的一个代码编辑器,如STS、IntelliJ IDEA。笔者使用的是IntelliJ IDEA
5、Databases : 选择一个你熟练使用的数据库系统。笔者在本文中使用的是MySQL 5.1.x版本的数据库系统
二、搭建项目
2-1、引入依赖
为了快速构建项目,笔者采用Spring Boot来构建项目,同时使用加入Spring Data JPA和Mybatis两个ORM框架的依赖包。关注互联网架构师公众号在后台回复2T可以获取系列Spring Boot教程。
在此需要特别说明,Hibernate是一个JPA标准的实现,而Spring Data JPA是一个JPA数据访问抽象,通过Spring Data JPA,可以轻松使用Hibernate框架。
你可以通过Spring Initializer来初始化项目,也可以通过IDEA自带的Spring Initializer功能构建项目,项目构建完成之后,pom.xml文件中的配置如下(包含但不限于文中给出的依赖项):
2-2、定义实体类-User.java
为了演示同时使用Hibernate和Mybatis操作数据库,需要提供一个实体类User.java,代码如下所示:
说明:
在本次演示的项目中,使用到了Lombok插件,它可以让开发者减少模板代码的书写,提高开发速度。@Data注解可以自动生成类属性的getter、setter和toString方法。@NoArgsConstructor会自动为类生成无参构造函数,@AllArgsConstructor则会生成带全部属性的构造函数。
2-3、定义数据持久化接口
在本次课程中,将使用Spring Data JPA来完成写操作,如新增、修改、删除;使用Mybatis来完成读操作,如根据用户ID查询、查询所有的用户等。
Spring Data JPA和MyBatis的持久化接口都位于com.ramostear.hm.orm包下,Spring Data JPA的持久化接口相对比较简单,之间继承JpaRepository类即可,代码如下:
说明:因为JPA只负责写操作,所以直接继承并使用JpaRepository提供的API即可,不需要额外的定义其他的接口方法。
下面是Mybatis的映射接口,定义了两个方法:根据ID查询用户信息和查询所有的用户信息。代码如下所示:
说明:
此接口需要注意的地方是@Component和@Mapper注解,@Component注解标注此接口后,Spring会自动扫描并配置此类;@Mapper注解是把这个mapper的DAO交由Spring进行管理。
定义完Mybatis 映射接口后,需要提供一个进行数据库查询的xml配置文件。该文件位于resources/mapper文件夹中,UserMapper.xml完整代码如下:
2-4、定义UserService
在UserService接口中,提供三个方法:保存用户信息、根据ID查询用户、查询所有的用户。UserService接口代码如下:
在UserService接口的实现类中,需要同时注入UserRepository和UserMapper两个依赖。我们使用构造函数的方式来注入这两个依赖。代码如下:
说明:
@Transactional注解用于设置每个方法的事务控制方式。@Service注解声明该类是一个服务提供类,且设置了该类被Spring初始化时Bean对象的名称为“userService”。
2-5、定义控制器
最后,提供一个控制器,用于处理客户端的相关请求。在控制器中,提供了三个请求处理方法,分别处理客户端新增用户、根据ID查询用户和查询所有用户的请求。控制器代码如下:
说明:
在本次教程中,为了编码IDEA报警告,所有的依赖注入都采用构造函数的方式注入相关的依赖。
三、配置Hibernate和Mybatis
网络上有很多关于在Spring Boot项目中配置Hibernate和Mybatis的教程,但同时配置Hibernate和Mybatis的文章很少,有一些是通过Java代码的方式对这两个ORM框架进行配置,采用的是多数据源的方法来整合两个框架。
其实整合这两个框架没有想象中的那么难,只需要在application.yml或者application.properties配置文件中加入几行代码,就可以完成两个框架的整合。
以application.yml配置文件为例,配置代码如下:
是不是很简单,并为没有太多复杂的配置,这是一种较为简单的整合方式。Hibernate和Mybatis共用一个数据源,如果是JPA的忠实粉丝,现在想要使用Mybatis,只需要额外加入mybatis的配置即可。
四、测试
通过以上的几个步骤,整个项目已经搭建完毕,接下来将使用Postman测试工具对Controller的三个方法进行测试,验证两个ORM框架在同一个项目中是否能共存。
首先测试 POST http://localhost/users ,验证Hibernate是否能够成功将用户信息持久化。打开Postman工具,在地址栏输入http://localhost/users请求地址,请求方式选择POST,在Body栏输入如下的信息:
{
"username":"谭朝红",
"alias":"ramostear",
"age":28
}
点击“Send”按钮发送请求,观察服务端响应信息,测试结果如下图所示:
可以看到,服务端成功返回用户信息,且用户ID=3。接下来,我们请求 GET http://localhost/users/3 ,验证Mybatis是否能够成功查询出用户信息,测试结果如下:
通过测试,服务端成功返回了用户ID=3的用户信息:
{
"id": 3,
"username": "谭朝红",
"alias": "ramostear",
"age": 28
}
由此证明,在同一个项目中,Hibernate和Mybatis均能正常工作,整合方案有效,解决了在同一项目中Hibernate与Mybatis共存的问题。
五、总结
本次课程验证了同时使用Hibernate和Mybatis两个ORM框架的方案可行,且采用了一种比较简单的方式来整合两个框架,摒弃了多数据源的复杂配置,快速实现两个框架并用的需求。
在一个项目中同时使用两个ORM框架有没有实际的意义呢?
我的答案是肯定的。同时使用两个ORM框架,两者之间可以相互弥补自身的不足,以达到灵活性和便捷性同时兼顾,另外一方面,在单独使用Mybatis时,开发者需要手动或者借助其他的工具生成数据库表信息,而采用本文的整合方案,Mybatis可以借助JPA自动生成数据库表的能力,从而简化使用Mybatis的步骤。
最后,对于一些读多于写的系统,完全可以将这两个框架同时使用,写操作少的模块,可以使用Spring Data JPA快速完成相关功能的实现,对于读操作部分,则可以利用Mybatis来优化查询语句。两者之间的优势互补,能进一步的提升开发效率和系统性能。
作者:谭朝红
来源:segmentfault.com/a/1190000019476544
关微信公众号:互联网架构师,在后台回复:2T,可以获取我整理的教程,都是干货。
猜你喜欢
1、GitHub 标星 3.2w!史上最全技术人员面试手册!FackBoo发起和总结
2、如何才能成为优秀的架构师?
3、从零开始搭建创业公司后台技术栈
4、程序员一般可以从什么平台接私活?
5、37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...
6、滴滴业务中台构建实践,首次曝光
7、不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事
8、15张图看懂瞎忙和高效的区别
9、2T架构师学习资料干货分享
http://www.taodudu.cc/news/show-1750027.html
相关文章:
- Oracle用户可要顶住了:准备好大规模补丁工作!以修补多达 433 个的新安全漏洞...
- Mybatis trim 标签的 2 个妙用!
- 震惊!Redis 的字符串居然是这样实现的…
- 别在网上乱找代码了,找了一段代码突然爆了!!!
- 看图说话,FastJson 并没有那么流行!
- GitLab 内置了 CI/CD 工具,强大啊!!
- 推荐:Windows平台上三款提高工作效率的免费神器!
- 怒爬某 Hub 资源就为撸了一个鉴黄平台
- 被Redis击穿的一次面试经历
- 彻底搞懂“红黑树”......
- 我们公司不会用分布式事务!
- 看看华为 Java 编程的军规...
- 我的天!你竟然没有在SpringBoot中使用过异步请求和异步调用...
- Spring Cloud 微服务下的权限解决方案
- DataGrip 上手体验,真香!
- 又整理了一批可以拿去做副业的开源项目...
- 为什么我劝你放弃了Restful API?
- 因为一条SQL,我差点被祭天......
- 40+ 张最全 Linux / C / C++ 思维导图,收藏!
- 权威!盘点 100 个最受欢迎的 Java 库!绝对经典
- 一起围观下我们CTO写的代码,巧妙使用枚举干掉if-else!
- 要注意了!这样使用MyBatis框架,被攻击了!
- 曲线救国:提高github下载速度到2MB/s
- Spring Boot 2.3.3 正式发布!2.4.0 正式版即将发布!
- 日志框架选型,Logback 还是 Log4j2?
- SpringBoot项目优雅的http客户端工具,太香了!
- 知乎高赞:当update修改数据与原数据相同时会再次执行吗?
- 写出一手烂代码的 19 条准则!
- 半吊子架构师,一来就想干掉RabbitMQ
- DDD 到底什么鬼?
Hibernate 与 Mybatis 如何共存?打破你的认知!相关推荐
- hibernate的查询条件lt_鱼与熊掌得兼:Hibernate与Mybatis共存
架构师(JiaGouX)我们都是架构师! 架构未来,你来不来? 很长一段时间,网上有很多关于Hibernate与Mybatis孰优孰劣的争论,两个阵营的人谁也不能说服谁,每个人的理由都很有道理.今天, ...
- hibernate 和 mybatis 的区别
[转载]:JAVA面试中问及HIBERNATE与 MYBATIS的对比,在这里做一下总结 转载于:https://www.cnblogs.com/virgosnail/p/10054987.html
- (转)HIBERNATE与 MYBATIS的对比
第一方面:开发速度的对比 就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些.Mybatis框架相对简单很容易上手,但也相对简陋些.个人觉得要用好Mybatis还是首先要先理解好H ...
- Hibernate与 MyBatis的比较
2019独角兽企业重金招聘Python工程师标准>>> 第一章 Hibernate与MyBatis Hibernate 是当前最流行的O/R mapping框架,它出身 ...
- 【Java框架】 Hibernate与Mybatis对比
Hibernate与Mybatis对比 今天同事跟我说现在的小规模公司很少用hibernate,大部分都用mybatis.平时也经常接触这两方面,正好最近不怎么忙,查看网上其他相关技术文档 ,梳理下M ...
- 说实话,Hibernate 和 MyBatis 哪个更好用?
作者:SylvanasSun郑沐兴 来源:https://zhuanlan.zhihu.com/p/21966051 前言 由于编程思想与数据库的设计模式不同,生出了一些ORM框架.核心都是将关系型数 ...
- 框架:Hibernate和Mybatis的区别
Mybatis和hibernate不同, Mybatis不完全是一个ORM框架,因为MyBatis需要程序员自己编写Sql语句,不过mybatis可以通过XML或注解方式灵活配置要运行的sql语句,并 ...
- 面试官问的hibernate和mybatis常见面试题
点击上方"好好学java",选择"置顶公众号" 优秀学习资源.干货第一时间送达! 精彩内容 java实战练习项目教程 2018微服务资源springboot.s ...
- “面试不败计划“:hibernate和mybatis比较
文章有不当之处,欢迎指正,如果喜欢微信阅读,你也可以关注我的微信公众号:好好学java,获取优质学习资源. 我是一名java开发人员,hibernate以及mybatis都有过学习,在java面试中也 ...
- JAVA面试中问及Hibernate与 Mybatis的对比
我是一名java开发人员,hibernate以及mybatis都有过学习,在java面试中也被提及问道过,在项目实践中也应用过,现在对hibernate和mybatis做一下对比,便于大家更好的理解和 ...
最新文章
- java调用项目中的文件_详解eclipse项目中.classpath文件的使用
- 创建表名作为参数的mysq存储过程【procedure】
- token 过期刷新令牌_OkHttp实现全局过期token自动刷新
- 2020年第十一届蓝桥杯 - 省赛 - CC++大学A组 - B.既约分数
- SAP Spartacus Org Unit明细页面的工具栏按钮设计
- Kafka集群部署详细步骤(包含zookeeper安装步骤)
- AlfaLaval公司采用低速通风技术冷却数据中心
- 计算机中央处理器cpu_中央处理器(CPU)| 计算机科学组织
- MySQL SQL 优化命令行问题 SQL 抓取方式
- datepick二格式 化时间_同样是持久化,竟然有这么大的差别
- 什么是DDD开发模式
- nbu备份oracle兼容性,NBU备份ORACLE的问题
- 5G灯杆基站建设前景分析(简单介绍)
- 计算机硬盘显示ntfs,电脑硬盘显示NTFS
- Spyder中不能输入中文注释
- BUU-MISC-你能看懂音符码
- u-boot之u-boot-2009.11启动过程分析
- LiteOS | 基于LiteOS的智慧农业案例实验分享
- matlab画平行板电场,MATLAB静电场电场电势
- RDSDRDSPolarDBPolarDB-X的区别