HasorDB 介紹

2021-12-28 14:19 更新

HasorDB 是一個(gè)全功能數(shù)據(jù)庫(kù)訪問(wèn)工具,提供對(duì)象映射、豐富的類型處理、動(dòng)態(tài)SQL、存儲(chǔ)過(guò)程、 內(nèi)置分頁(yè)方言20+、 支持嵌套事務(wù)、多數(shù)據(jù)源、條件構(gòu)造器、INSERT 策略、多語(yǔ)句/多結(jié)果。并兼容 Spring 及 MyBatis 用法。 它不依賴任何其它框架,因此可以很方便的和任意一個(gè)框架整合在一起使用。

功能特性

  • 熟悉的方式JdbcTemplate 接口方式(高度兼容 Spring JDBC)Mapper 文件方式(高度兼容 MyBatis)LambdaTemplate (高度接近 MyBatis Plus、jOOQ 和 BeetlSQL)@Insert、@Update、@Delete、@Query、@Callable 注解(類似 JPA)
  • 事務(wù)支持支持 5 個(gè)事務(wù)隔離級(jí)別、7 個(gè)事務(wù)傳播行為(與 Spring tx 相同)提供 TransactionTemplate、TransactionManager 接口方式聲明式事務(wù)控制能力(用法與 Spring 相同)
  • 特色優(yōu)勢(shì)支持 分頁(yè)查詢 并且提供多種數(shù)據(jù)庫(kù)方言(20+)支持 INSERT 策略(INTO、UPDATE、IGNORE)更加豐富的 TypeHandler(MyBatis 40+,HasorDB 60+)Mapper XML 支持多語(yǔ)句、多結(jié)果提供獨(dú)特的規(guī)則機(jī)制,讓動(dòng)態(tài) SQL 更加簡(jiǎn)單支持 存儲(chǔ)過(guò)程支持 JDBC 4.2 和 Java8 中時(shí)間類型支持多數(shù)據(jù)源

同類工具

Hibernate 誕生于 2001 年,由 Gavin King 發(fā)布第一個(gè)版本。它是 ORM 領(lǐng)域的標(biāo)志性工具,在此之前 ORM 實(shí)踐均是通過(guò) EJB 來(lái)完成。 Hibernate 的價(jià)值在于它終結(jié)了由 EJB 所主導(dǎo)的 ORM 使用習(xí)慣,并開創(chuàng)了以 輕量化ORM 和 SpringJDBC 的新生態(tài)。同時(shí)它推動(dòng)了 EJB3、和 JPA 規(guī)范的建立。

SpringJDBC 從 Spring 框架推出就存在于 Spring 體系之內(nèi)至今如此。它比 Hibernate 更加輕量和敏捷,它獨(dú)特的通過(guò)編碼的方式將 SQL 和程序結(jié)合在一起,使用起來(lái)十分輕巧。 除此之外是SpringJDBC 第一個(gè)提出了 7 種事務(wù)傳播行為。

MyBatis 是一款非常棒的數(shù)據(jù)庫(kù)訪問(wèn)框架,它雖然不具備 Hibernate 強(qiáng)大的 ORM 能力。但別具風(fēng)格的 Mapper 文件,完美的解決了動(dòng)態(tài) SQL 編寫和管理上的難題。 本質(zhì)上來(lái)講 MyBatis 是 SpringJDBC 和 Hibernate 之間的一個(gè)折中方案。對(duì)于研發(fā)管理更加友好。

圍繞 MyBatis 涌現(xiàn)出了 MyBatisPlus、MyBatis-Spring 等家喻戶曉的工具,前者基于 MyBatis 進(jìn)行了更多擴(kuò)展的封裝、后者整合了 Spring 提供更加友好的開發(fā)體驗(yàn)。

ActiveRecord模式 簡(jiǎn)稱 AR。最早由 Rails 提出,也屬于ORM范疇,它巧妙的將單個(gè)表看作單一的對(duì)象并提供 CURD 的基本功能,這使得數(shù)據(jù)庫(kù)的開發(fā)變得十分輕松,在一些簡(jiǎn)單的 MVC 應(yīng)用中更是得心應(yīng)手。 雖然是 Ruby 社區(qū)的工具,但 ActiveRecord 在 Java 領(lǐng)域也有很多實(shí)現(xiàn)。比如 jOOQ,就是其中一種。

jOOQ 最有創(chuàng)造性的地方提供了特殊的 'DSL',這組 'DSL' 其實(shí)是一種語(yǔ)法糖。結(jié)合 Java8 Lambda 語(yǔ)法,這種語(yǔ)法糖風(fēng)格被很多后起之秀傳承下來(lái)并發(fā)揚(yáng)廣大。 通過(guò) jOOQ 的語(yǔ)法糖,可以編碼的方式來(lái)編寫 SQL。在感官上不亞于直接編寫 SQL,這對(duì)于有數(shù)據(jù)庫(kù)兼容需求的應(yīng)用來(lái)說(shuō)更加友好。

MyBatisPlus 它來(lái)自于中國(guó)的一款開源工具,它基于 MyBatis 提供的一組更高級(jí)的封裝和拓展。比如它提供了類似 jOOQ 的語(yǔ)法糖、分頁(yè)查詢。 其中 HasorDB 的 LambdaTemplate 就是參考了它的實(shí)現(xiàn)。

BeetlSQL 來(lái)自于中國(guó)的一名叫 李家智 的程序員開發(fā)的數(shù)據(jù)庫(kù)訪問(wèn)框架,和 MyBatisPlus 一樣它也提供了 Lambda 方式生成和執(zhí)行 SQL。HasorDB 的 LambdaTemplate 設(shè)計(jì)也同樣參考和移植了它的理念。 較為遺憾的是對(duì)于 存儲(chǔ)過(guò)程 沒有像 Spring 和 MyBatis 一樣提供直接支持,有這方面需求的需要依托更底層的 Connection 來(lái)實(shí)現(xiàn)。

這款框架最有趣的地方是 Mapper 文件的編寫是基于 markdown 語(yǔ)法為骨干,動(dòng)態(tài) SQL 則采用 Beetl 模版語(yǔ)言來(lái)編寫。作者還提供了 SQLTemplateEngine 接口可以方便更換 Mapper 語(yǔ)言引擎。

http://ibeetl.com/

sqltoy-orm 來(lái)自于中國(guó)的一款數(shù)據(jù)庫(kù)操作框架,作者在這個(gè)框架中傾注了很多心思。與大多數(shù) ORM 框架一樣它也提供了很多相似的功能及特色的 Mapper 文件。 這款框架最別具一格的地方是對(duì)于動(dòng)態(tài) SQL 拼接上,巧妙的提供了一種新型語(yǔ)法可以極大的減少類似 MyBatis 中 if,foreach 標(biāo)簽。 受到 sqltoy-orm 靈感的觸發(fā) HasorDB 提供了規(guī)則機(jī)制,并允許用戶自定義規(guī)則實(shí)現(xiàn)從而達(dá)成類似 sqltoy-orm 的效果。

另外最有趣的地方是 sqltoy-orm 中融入了很多業(yè)務(wù)場(chǎng)景的理解和抽象,例如:對(duì)結(jié)果集的行列轉(zhuǎn)換處理、結(jié)果集聚合計(jì)算。這是這款框架最具有新意的地方。

https://github.com/sagframe/sagacity-sqltoy

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)