久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

Hibernate 與 Mybatis 如何共存,?打破你的認(rèn)知!

 昵稱10087950 2022-07-28 發(fā)布于江蘇

圖片

Java技術(shù)棧

www.javastack.cn

關(guān)注閱讀更多優(yōu)質(zhì)文章


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

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

圖片

作為一個(gè)開發(fā)者,,沒有必要花費(fèi)過多的時(shí)間去證明技術(shù)無用論,當(dāng)你開始指責(zé)某個(gè)框架垃圾,,另外一個(gè)框架最好時(shí),,隱性的暴露出你對某個(gè)框架沒有深入的研究,無知的指責(zé)對于技術(shù)的提升沒有任何的幫助,。
框架本身沒有對錯(cuò)一說,,只有適合和更適合項(xiàng)目的選擇,。任何框架都有自身的能力范圍,就拿Hibernate和Mybatis這兩個(gè)ORM框架來說,。
Hibernate封裝了很多有用的API給開發(fā)者,,降低了操作數(shù)據(jù)庫的難度和復(fù)雜度,,同時(shí)也減少了模板代碼的數(shù)量,但Hibernate留給開發(fā)者可操作的空間相對Mybatis少了很多。
Mybatis框架使用起來很靈活,,開發(fā)者可以自定義查詢語句,,但增加了模板代碼的數(shù)量,看起來沒有Hibernate那么便捷,。
兩種框架在便捷與靈活兩個(gè)指標(biāo)上做出了取舍與妥協(xié),這不能說是框架的錯(cuò),。對于一個(gè)框架而言,,需要有自身專注的領(lǐng)域和設(shè)計(jì)愿景,不可能面面俱到,。
使用任何一種技術(shù)框架,都需要貼合現(xiàn)實(shí)的業(yè)務(wù)需求以及自身的技術(shù)能力,。當(dāng)你還沒有深入的去了解一門技術(shù)或者當(dāng)前業(yè)務(wù)需求無法與框架契合時(shí),,不要盲目的批判框架的好壞。
今天,我不再去對比Hibernate與Mybatis兩者之間的優(yōu)劣,,而是給出一個(gè)比較中庸的放方案,,將兩個(gè)ORM框架同時(shí)整合在一個(gè)項(xiàng)目中。

一,、準(zhǔn)備開發(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ù)庫系統(tǒng),。筆者在本文中使用的是MySQL 5.1.x版本的數(shù)據(jù)庫系統(tǒng)

二、搭建項(xiàng)目

2-1,、引入依賴

為了快速構(gòu)建項(xiàng)目,,筆者采用Spring Boot來構(gòu)建項(xiàng)目,同時(shí)使用加入Spring Data JPA和Mybatis兩個(gè)ORM框架的依賴包,。關(guān)注Java技術(shù)棧公眾號在后臺回復(fù)boot可以獲取系列Spring Boot教程,。
在此需要特別說明,Hibernate是一個(gè)JPA標(biāo)準(zhǔn)的實(shí)現(xiàn),,而Spring Data JPA是一個(gè)JPA數(shù)據(jù)訪問抽象,,通過Spring Data JPA,可以輕松使用Hibernate框架,。
你可以通過Spring Initializer來初始化項(xiàng)目,,也可以通過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ù)庫,需要提供一個(gè)實(shí)體類User.java,,代碼如下所示:

圖片

說明:

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

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

在本次課程中,,將使用Spring Data JPA來完成寫操作,如新增,、修改,、刪除;使用Mybatis來完成讀操作,,如根據(jù)用戶ID查詢,、查詢所有的用戶等。
Spring Data JPA和MyBatis的持久化接口都位于com.ramostear.hm.orm包下,,Spring Data JPA的持久化接口相對比較簡單,,之間繼承JpaRepository類即可,代碼如下:

圖片

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

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

圖片

說明:

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

定義完Mybatis 映射接口后,,需要提供一個(gè)進(jìn)行數(shù)據(jù)庫查詢的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ù)的方式來注入這兩個(gè)依賴,。代碼如下:

圖片

說明:

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

2-5、定義控制器

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

圖片

說明:

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

三、配置Hibernate和Mybatis

網(wǎng)絡(luò)上有很多關(guān)于在Spring Boot項(xiàng)目中配置Hibernate和Mybatis的教程,,但同時(shí)配置Hibernate和Mybatis的文章很少,有一些是通過Java代碼的方式對這兩個(gè)ORM框架進(jìn)行配置,,采用的是多數(shù)據(jù)源的方法來整合兩個(gè)框架,。
其實(shí)整合這兩個(gè)框架沒有想象中的那么難,,只需要在application.yml或者application.properties配置文件中加入幾行代碼,,就可以完成兩個(gè)框架的整合。
以application.yml配置文件為例,配置代碼如下:

圖片

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

四,、測試

通過以上的幾個(gè)步驟,整個(gè)項(xiàng)目已經(jīng)搭建完畢,,接下來將使用Postman測試工具對Controller的三個(gè)方法進(jìn)行測試,,驗(yàn)證兩個(gè)ORM框架在同一個(gè)項(xiàng)目中是否能共存。
首先測試 POST http://localhost/users ,,驗(yàn)證Hibernate是否能夠成功將用戶信息持久化,。打開Postman工具,在地址欄輸入http://localhost/users請求地址,,請求方式選擇POST,在Body欄輸入如下的信息:
  1. {

  2. "username":"譚朝紅",

  3. "alias":"ramostear",

  4. "age":28

  5. }

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

圖片

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

圖片

通過測試,,服務(wù)端成功返回了用戶ID=3的用戶信息:
  1. {

  2. "id": 3,

  3. "username": "譚朝紅",

  4. "alias": "ramostear",

  5. "age": 28

  6. }

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

五,、總結(jié)

本次課程驗(yàn)證了同時(shí)使用Hibernate和Mybatis兩個(gè)ORM框架的方案可行,,且采用了一種比較簡單的方式來整合兩個(gè)框架,摒棄了多數(shù)據(jù)源的復(fù)雜配置,,快速實(shí)現(xiàn)兩個(gè)框架并用的需求,。
在一個(gè)項(xiàng)目中同時(shí)使用兩個(gè)ORM框架有沒有實(shí)際的意義呢?
我的答案是肯定的,。同時(shí)使用兩個(gè)ORM框架,,兩者之間可以相互彌補(bǔ)自身的不足,以達(dá)到靈活性和便捷性同時(shí)兼顧,,另外一方面,,在單獨(dú)使用Mybatis時(shí),開發(fā)者需要手動(dòng)或者借助其他的工具生成數(shù)據(jù)庫表信息,,而采用本文的整合方案,,Mybatis可以借助JPA自動(dòng)生成數(shù)據(jù)庫表的能力,從而簡化使用Mybatis的步驟,。
最后,,對于一些讀多于寫的系統(tǒng),,完全可以將這兩個(gè)框架同時(shí)使用,寫操作少的模塊,,可以使用Spring Data JPA快速完成相關(guān)功能的實(shí)現(xiàn),,對于讀操作部分,則可以利用Mybatis來優(yōu)化查詢語句,。兩者之間的優(yōu)勢互補(bǔ),,能進(jìn)一步的提升開發(fā)效率和系統(tǒng)性能。

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

來源:segmentfault.com/a/1190000019476544

    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多