亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Hibernate 與 Mybatis 的共存問(wèn)題,打破你的認(rèn)知!(兩個(gè)ORM框架)

 更新時(shí)間:2020年08月03日 11:33:44   作者:Java技術(shù)棧  
這篇文章主要介紹了Hibernate 與 Mybatis 如何共存?本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

很長(zhǎng)一段時(shí)間,網(wǎng)上有很多關(guān)于Hibernate與Mybatis孰優(yōu)孰劣的爭(zhēng)論,兩個(gè)陣營(yíng)的人誰(shuí)也不能說(shuō)服誰(shuí),每個(gè)人的理由都很有道理。

今天,我分享的主題是:在一個(gè)項(xiàng)目中同時(shí)使用Hibernate和Mybatis兩個(gè)ORM框架。

作為一個(gè)開(kāi)發(fā)者,沒(méi)有必要花費(fèi)過(guò)多的時(shí)間去證明技術(shù)無(wú)用論,當(dāng)你開(kāi)始指責(zé)某個(gè)框架垃圾,另外一個(gè)框架最好時(shí),隱性的暴露出你對(duì)某個(gè)框架沒(méi)有深入的研究,無(wú)知的指責(zé)對(duì)于技術(shù)的提升沒(méi)有任何的幫助。

框架本身沒(méi)有對(duì)錯(cuò)一說(shuō),只有適合和更適合項(xiàng)目的選擇。任何框架都有自身的能力范圍,就拿Hibernate和Mybatis這兩個(gè)ORM框架來(lái)說(shuō)。

Hibernate封裝了很多有用的API給開(kāi)發(fā)者,降低了操作數(shù)據(jù)庫(kù)的難度和復(fù)雜度,同時(shí)也減少了模板代碼的數(shù)量,但Hibernate留給開(kāi)發(fā)者可操作的空間相對(duì)Mybatis少了很多。

Mybatis框架使用起來(lái)很靈活,開(kāi)發(fā)者可以自定義查詢語(yǔ)句,但增加了模板代碼的數(shù)量,看起來(lái)沒(méi)有Hibernate那么便捷。

兩種框架在便捷與靈活兩個(gè)指標(biāo)上做出了取舍與妥協(xié),這不能說(shuō)是框架的錯(cuò)。對(duì)于一個(gè)框架而言,需要有自身專注的領(lǐng)域和設(shè)計(jì)愿景,不可能面面俱到。

使用任何一種技術(shù)框架,都需要貼合現(xiàn)實(shí)的業(yè)務(wù)需求以及自身的技術(shù)能力。當(dāng)你還沒(méi)有深入的去了解一門(mén)技術(shù)或者當(dāng)前業(yè)務(wù)需求無(wú)法與框架契合時(shí),不要盲目的批判框架的好壞。

今天,我不再去對(duì)比Hibernate與Mybatis兩者之間的優(yōu)劣,而是給出一個(gè)比較中庸的放方案,將兩個(gè)ORM框架同時(shí)整合在一個(gè)項(xiàng)目中。

一、準(zhǔn)備開(kāi)發(fā)環(huán)境

如果你想成功運(yùn)行本文中的源代碼,需要滿足一下的幾個(gè)條件:

  • 1、JDK : JDK 1.8.x及以上版本
  • 2、Maven : Maven 3.x或更高版本
  • 3、Git:版本控制工具,選擇一個(gè)你喜歡的
  • 4、IDE : 選擇你比較喜歡的一個(gè)代碼編輯器,如STS、IntelliJ IDEA。筆者使用的是IntelliJ IDEA
  • 5、Databases : 選擇一個(gè)你熟練使用的數(shù)據(jù)庫(kù)系統(tǒng)。筆者在本文中使用的是MySQL 5.1.x版本的數(shù)據(jù)庫(kù)系統(tǒng)

二、搭建項(xiàng)目

2-1、引入依賴

為了快速構(gòu)建項(xiàng)目,筆者采用Spring Boot來(lái)構(gòu)建項(xiàng)目,同時(shí)使用加入Spring Data JPA和Mybatis兩個(gè)ORM框架的依賴包。關(guān)注Java技術(shù)棧公眾號(hào)在后臺(tái)回復(fù)boot可以獲取系列Spring Boot教程。

在此需要特別說(shuō)明,Hibernate是一個(gè)JPA標(biāo)準(zhǔn)的實(shí)現(xiàn),而Spring Data JPA是一個(gè)JPA數(shù)據(jù)訪問(wèn)抽象,通過(guò)Spring Data JPA,可以輕松使用Hibernate框架。

你可以通過(guò)Spring Initializer來(lái)初始化項(xiàng)目,也可以通過(guò)IDEA自帶的Spring Initializer功能構(gòu)建項(xiàng)目,項(xiàng)目構(gòu)建完成之后,pom.xml文件中的配置如下(包含但不限于文中給出的依賴項(xiàng)):

2-2、定義實(shí)體類-User.java

為了演示同時(shí)使用Hibernate和Mybatis操作數(shù)據(jù)庫(kù),需要提供一個(gè)實(shí)體類User.java,代碼如下所示:

說(shuō)明:

在本次演示的項(xiàng)目中,使用到了Lombok插件,它可以讓開(kāi)發(fā)者減少模板代碼的書(shū)寫(xiě),提高開(kāi)發(fā)速度。@Data注解可以自動(dòng)生成類屬性的getter、setter和toString方法。@NoArgsConstructor會(huì)自動(dòng)為類生成無(wú)參構(gòu)造函數(shù),@AllArgsConstructor則會(huì)生成帶全部屬性的構(gòu)造函數(shù)。

2-3、定義數(shù)據(jù)持久化接口

在本次課程中,將使用Spring Data JPA來(lái)完成寫(xiě)操作,如新增、修改、刪除;使用Mybatis來(lái)完成讀操作,如根據(jù)用戶ID查詢、查詢所有的用戶等。

Spring Data JPA和MyBatis的持久化接口都位于com.ramostear.hm.orm包下,Spring Data JPA的持久化接口相對(duì)比較簡(jiǎn)單,之間繼承JpaRepository類即可,代碼如下:

說(shuō)明:因?yàn)镴PA只負(fù)責(zé)寫(xiě)操作,所以直接繼承并使用JpaRepository提供的API即可,不需要額外的定義其他的接口方法。

下面是Mybatis的映射接口,定義了兩個(gè)方法:根據(jù)ID查詢用戶信息和查詢所有的用戶信息。代碼如下所示:

說(shuō)明:

此接口需要注意的地方是@Component和@Mapper注解,@Component注解標(biāo)注此接口后,Spring會(huì)自動(dòng)掃描并配置此類;@Mapper注解是把這個(gè)mapper的DAO交由Spring進(jìn)行管理。

定義完Mybatis 映射接口后,需要提供一個(gè)進(jìn)行數(shù)據(jù)庫(kù)查詢的xml配置文件。該文件位于resources/mapper文件夾中,UserMapper.xml完整代碼如下:

2-4、定義UserService

在UserService接口中,提供三個(gè)方法:保存用戶信息、根據(jù)ID查詢用戶、查詢所有的用戶。UserService接口代碼如下:

在UserService接口的實(shí)現(xiàn)類中,需要同時(shí)注入U(xiǎn)serRepository和UserMapper兩個(gè)依賴。我們使用構(gòu)造函數(shù)的方式來(lái)注入這兩個(gè)依賴。代碼如下:

說(shuō)明:

@Transactional注解用于設(shè)置每個(gè)方法的事務(wù)控制方式。@Service注解聲明該類是一個(gè)服務(wù)提供類,且設(shè)置了該類被Spring初始化時(shí)Bean對(duì)象的名稱為“userService”。

2-5、定義控制器

最后,提供一個(gè)控制器,用于處理客戶端的相關(guān)請(qǐng)求。在控制器中,提供了三個(gè)請(qǐng)求處理方法,分別處理客戶端新增用戶、根據(jù)ID查詢用戶和查詢所有用戶的請(qǐng)求。控制器代碼如下:

說(shuō)明:

在本次教程中,為了編碼IDEA報(bào)警告,所有的依賴注入都采用構(gòu)造函數(shù)的方式注入相關(guān)的依賴。

三、配置Hibernate和Mybatis

網(wǎng)絡(luò)上有很多關(guān)于在Spring Boot項(xiàng)目中配置Hibernate和Mybatis的教程,但同時(shí)配置Hibernate和Mybatis的文章很少,有一些是通過(guò)Java代碼的方式對(duì)這兩個(gè)ORM框架進(jìn)行配置,采用的是多數(shù)據(jù)源的方法來(lái)整合兩個(gè)框架。

其實(shí)整合這兩個(gè)框架沒(méi)有想象中的那么難,只需要在application.yml或者application.properties配置文件中加入幾行代碼,就可以完成兩個(gè)框架的整合。

以application.yml配置文件為例,配置代碼如下:

是不是很簡(jiǎn)單,并為沒(méi)有太多復(fù)雜的配置,這是一種較為簡(jiǎn)單的整合方式。Hibernate和Mybatis共用一個(gè)數(shù)據(jù)源,如果是JPA的忠實(shí)粉絲,現(xiàn)在想要使用Mybatis,只需要額外加入mybatis的配置即可。

四、測(cè)試

通過(guò)以上的幾個(gè)步驟,整個(gè)項(xiàng)目已經(jīng)搭建完畢,接下來(lái)將使用Postman測(cè)試工具對(duì)Controller的三個(gè)方法進(jìn)行測(cè)試,驗(yàn)證兩個(gè)ORM框架在同一個(gè)項(xiàng)目中是否能共存。

首先測(cè)試 POST http://localhost/users ,驗(yàn)證Hibernate是否能夠成功將用戶信息持久化。打開(kāi)Postman工具,在地址欄輸入http://localhost/users請(qǐng)求地址,請(qǐng)求方式選擇POST,在Body欄輸入如下的信息:

{"username":"譚朝紅","alias":"ramostear","age":28}

點(diǎn)擊“Send”按鈕發(fā)送請(qǐng)求,觀察服務(wù)端響應(yīng)信息,測(cè)試結(jié)果如下圖所示:

可以看到,服務(wù)端成功返回用戶信息,且用戶ID=3。接下來(lái),我們請(qǐng)求 GET http://localhost/users/3 ,驗(yàn)證Mybatis是否能夠成功查詢出用戶信息,測(cè)試結(jié)果如下:

通過(guò)測(cè)試,服務(wù)端成功返回了用戶ID=3的用戶信息:

{"id": 3,"username": "譚朝紅","alias": "ramostear","age": 28}

由此證明,在同一個(gè)項(xiàng)目中,Hibernate和Mybatis均能正常工作,整合方案有效,解決了在同一項(xiàng)目中Hibernate與Mybatis共存的問(wèn)題。

五、總結(jié)

本次課程驗(yàn)證了同時(shí)使用Hibernate和Mybatis兩個(gè)ORM框架的方案可行,且采用了一種比較簡(jiǎn)單的方式來(lái)整合兩個(gè)框架,摒棄了多數(shù)據(jù)源的復(fù)雜配置,快速實(shí)現(xiàn)兩個(gè)框架并用的需求。

在一個(gè)項(xiàng)目中同時(shí)使用兩個(gè)ORM框架有沒(méi)有實(shí)際的意義呢?

**我的答案是肯定的。**同時(shí)使用兩個(gè)ORM框架,兩者之間可以相互彌補(bǔ)自身的不足,以達(dá)到靈活性和便捷性同時(shí)兼顧,另外一方面,在單獨(dú)使用Mybatis時(shí),開(kāi)發(fā)者需要手動(dòng)或者借助其他的工具生成數(shù)據(jù)庫(kù)表信息,而采用本文的整合方案,Mybatis可以借助JPA自動(dòng)生成數(shù)據(jù)庫(kù)表的能力,從而簡(jiǎn)化使用Mybatis的步驟。

最后,對(duì)于一些讀多于寫(xiě)的系統(tǒng),完全可以將這兩個(gè)框架同時(shí)使用,寫(xiě)操作少的模塊,可以使用Spring Data JPA快速完成相關(guān)功能的實(shí)現(xiàn),對(duì)于讀操作部分,則可以利用Mybatis來(lái)優(yōu)化查詢語(yǔ)句。兩者之間的優(yōu)勢(shì)互補(bǔ),能進(jìn)一步的提升開(kāi)發(fā)效率和系統(tǒng)性能。

版權(quán)申明:本作品系作者譚朝紅原創(chuàng) , 采用《署名-非商業(yè)性使用-禁止演繹 4.0 國(guó)際》許可協(xié)議來(lái)源:segmentfault.com/a/1190000019476544

推薦去我的博客閱讀更多:

1.Java JVM、集合、多線程、新特性系列教程

2.Spring MVC、Spring Boot、Spring Cloud 系列教程

3.Maven、Git、Eclipse、Intellij IDEA 系列工具教程

4.Java、后端、架構(gòu)、阿里巴巴等大廠最新面試題

到此這篇關(guān)于Hibernate 與 Mybatis 的共存問(wèn)題,打破你的認(rèn)知!(兩個(gè)ORM框架)的文章就介紹到這了,更多相關(guān)Hibernate 與 Mybatis 共存內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論