為什麼項目中用了JOOQ後大家都不願再用Mybatis?

為什麼項目中用了JOOQ後大家都不願再用Mybatis?

前言:(文末有福利)

今天給大家介紹一個新的ORM框架->JOOQ,可能很多朋友還沒有聽說過這個框架.

之前也是一直在使用Mybatis框架作為Java工程中的持久層訪問框架,但是最近的一些項目採用JOOQ框架開發後,表示再也不想用Mybatis了!

為什麼這麼說呢?因為JOOQ在代碼層面要比Mybatis簡潔得多,而且性能也非常優異。

相信大家都有過這樣的體會,我們在項目工程中使用Mybatis進行數據庫相關代碼的編寫時.

為了提高工程效率,一般會在數據庫模型設計完成後,一次性使用Mybatis代碼插件

(如:mybatis-generator),來生成Mybatis數據庫訪問的實體類代碼以及XML、Mapper等映射代碼,從而儘量以面向對象的方式來操作和訪問數據庫。

而通過這樣的方式,雖然在工程效率上提高了很多,但是從代碼的簡潔和優雅性上來說就會讓人感覺特別的囉嗦.

因為自動生成的代碼並不完全都是你在項目中能夠用得到的.

所以,有些對代碼有追求的同學就會以比較簡潔的方式來手寫SQL代碼。

如在@Mapper接口中編寫這樣的代碼:

<code> @Select("select max(t.balance_id) from balance t where t.country=#{country}\\n") String selectMaxId(Map<string> paramMap); /<string>/<code>

而雖然這種方式可以減少很多無用的代碼量.

但是在業務邏輯比較複雜的場景下這種方式顯然又會大大降低開發的效率,因為通過這樣的方式不僅SQL編寫的通用層度需要我們花費額外的時間去考慮.

而且由於Java面向對象的編程方式,我們還需要花費很多的時間來將數據庫查詢結果映射成為實體對象,所以使用Mybatis進行持久層開發時有時候真的是讓人又愛又恨.

那麼有沒有一種新的ORM框架既能夠保持Mybatis的靈活性又不像Hibernate那樣重呢?

畢竟大家也都是從Hibernate的魔爪中逃離出來後才選擇使用Mybatis直到今天的!

在軟件工程領域就是這樣,有痛點的地方就一定會有人提供解決方案,JOOQ就是這樣一個產物!

JOOQ簡介

(如果覺得文章對你有益的話,記得點贊,關注,分享三連)

JOOQ是基於Java訪問關係型數據庫的工具包,它具有輕量、簡單、並且足夠靈活的特點,通過JOOQ我們可以輕鬆的使用Java面向對象的語法來實現各種複雜的SQL。

相比於傳統ORM框架,如Hibernate、Mybatis來說,JOOQ汲取了即汲取了它們操作數據的簡單性和安全性、同時也保留了原生SQL的靈活性,從某種程度上說JOOQ更像是介於ORM和JDBC的中間層。

JOOQ目前在國內相對來說還比較小眾.

對於大部分從SSH或者SSM成長起來的碼農朋友們來說,心裡估計會質疑“這玩意用的這麼少,到底靠不靠譜?

在這裡碼農哥可以很負責任的說JOOQ是靠譜的.

因為碼農哥已經在好幾個生產項目上實踐過了,而且是在比較核心的支付系統上完全使用了JOOQ來替代Mybatis作為持久層框架,並且這個支付系統的併發量也是非常高的.

所以JOOQ框架本身是能夠經受住真實業務場景的考驗的.

SpringBoot項目集成JOOQ

接下來我們就來一起看看,如何在SpringBoot的項目中集成和使用JOOQ吧.

首先,我們在項目中引入JOOQ的stater依賴包,如下:

<code><dependency> <groupid>org.springframework.boot/<groupid> <artifactid>spring-boot-starter-jooq/<artifactid> /<dependency> /<code>

因為JOOQ對Spring Boot有很好的支持,所以我們只需要引入相應的starter依賴即可.

而具體的版本則是與Spring Boot的版本關聯的,這裡並不需要我們去指定。

其次,我們需要在項目中配置JOOQ的代碼生成插件.

這樣JOOQ就可以自動在項目編譯的時候為我們生成所需要的數據庫以來對象了.

在項目的pom.xml中配置Maven插件,如下:

<code> <plugin> <groupid>org.jooq/<groupid> <artifactid>jooq-codegen-maven/<artifactid> <executions> <execution> default <phase>generate-sources/<phase> <goals> <goal>generate/<goal> /<goals> <configuration> <jdbc> <driver>com.mysql.jdbc.Driver/<driver> jdbc:mysql://127.0.0.1:3306 <user>root/<user> <password> /<jdbc> <generator> <name>org.jooq.util.DefaultGenerator/<name> <generate> <instancefields>true/<instancefields> <pojos>true/<pojos> <daos>true/<daos> /<generate> <database> 

為什麼項目中用了JOOQ後大家都不願再用Mybatis?

為什麼項目中用了JOOQ後大家都不願再用Mybatis?

為什麼項目中用了JOOQ後大家都不願再用Mybatis?

源碼分析專題部分課程:

為什麼項目中用了JOOQ後大家都不願再用Mybatis?

為什麼項目中用了JOOQ後大家都不願再用Mybatis?

獲取方式

點贊,收藏並轉發文章後點擊小編頭像或暱稱,關注後私信回覆:【11】 即可

舉手之勞,非常感謝!!!


分享到:


相關文章: