1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        jSqlBoxJava 持久層工具

        聯(lián)合創(chuàng)作 · 2023-09-30 02:01

        jSqlBox是一個(gè)全功能數(shù)據(jù)庫持久層工具,有Java6和Java8兩個(gè)版本。采用Apache2.0開源協(xié)議。  

        優(yōu)點(diǎn) | Advantages

        • 架構(gòu)優(yōu)良:模塊式架構(gòu),各個(gè)模塊都可以脫離jSqlBox單獨(dú)存在。

        • 跨數(shù)據(jù)庫:基于jDialects,支持80多種數(shù)據(jù)庫的分頁、DDL生成、實(shí)體源碼生成、函數(shù)變換。

        • 與DbUtils兼容:繼承于DbUtils, 原有基于DbUtils的項(xiàng)目可以無縫移植到j(luò)SqlBox。

        • 多種SQL寫法:Inline方法、模板方法、DataMapper、ActiveRecord、鏈?zhǔn)綄懛ǖ取?/p>

        • 多項(xiàng)技術(shù)創(chuàng)新:Inline寫法、多行文本支持、ORM越級(jí)查詢、樹結(jié)構(gòu)查詢等。

        • 動(dòng)態(tài)配置:除了支持實(shí)體Bean注解式配置,jSqlBox還支持在運(yùn)行期動(dòng)態(tài)更改配置。

        • 無會(huì)話設(shè)計(jì):無會(huì)話設(shè)計(jì)(Sessionless),是真正的輕量級(jí)工具,可以隨用隨棄。

        • 自帶聲明式事務(wù):基于獨(dú)立的聲明式事務(wù)工具jTransactions,并可配置成使用Spring事務(wù)。

        • 學(xué)習(xí)曲線平滑:模塊化學(xué)習(xí),了解了各個(gè)子模塊,就掌握了jSqlBox,jSqlBox主體只有20多個(gè)類。

        文檔 | Documentation

        中文 | English | JavaDoc

        與其它DAO工具對(duì)比 | Features

        下表是jSqlBox在各個(gè)方面與一些其它DAO工具的對(duì)比, 內(nèi)容僅為個(gè)人看法,而且隨時(shí)更新,因?yàn)榭赡苡姓f錯(cuò)的地方,或是其它DAO工具有了新版本發(fā)布,表中的MP為MyBatis-Plus的縮寫:

        對(duì)比內(nèi)容 MP BeetlSql JFinal jSqlBox 打分理由(僅參考官網(wǎng)文檔,純屬個(gè)人看法)
        總體架構(gòu) 3.5 4 3.5 5 jSqlBox模塊式架構(gòu)更合理,各個(gè)模塊可以抽取出來使用。MP內(nèi)核基于MyBatis,這個(gè)內(nèi)核比較大,本身固有的問題(如XML配置復(fù)雜)不能通過插件來解決。JFinal:1)從DAO選型角度看,它捆綁發(fā)布的Web層代碼是多余的。2)基于Map的實(shí)體類不規(guī)范,不是標(biāo)準(zhǔn)POJO,對(duì)項(xiàng)目有侵入性
        易學(xué)、易用、易維護(hù) 4 4 5 5 jSqlBox的配置和代碼量在所有ORM工具中最少,見DaoBenchMark項(xiàng)目對(duì)比(缺JFinal)
        從實(shí)體類生成DDL腳本 0 0 0 5 jSqlBox支持從實(shí)體創(chuàng)建跨數(shù)據(jù)庫(80種方言)的DDL腳本,更方便原型開發(fā)和單元測(cè)試
        從數(shù)據(jù)庫生成實(shí)體源碼 5 5 5 5 代碼生成器在項(xiàng)目后期作用有限,例如當(dāng)實(shí)體類字段名重構(gòu),還是必須在IDE里打開源碼手工重構(gòu),代碼生成器幫不上忙。
        分頁 4 4 4 5 jSqlBox的分頁方式侵入性最少,任意SQL和CRUD方法中都可以傳入分頁攔截器
        事務(wù) 4 4 5 5 都兼容Spring事務(wù),Jfinal和jSqlBox都自帶聲明式事務(wù),可以甩掉笨重的Spring。jSqlBox的聲明式事務(wù)有獨(dú)立發(fā)布版,可以提供給其它工具使用。
        動(dòng)態(tài)SQL 4 4 4 5 jSqlBox首創(chuàng)參數(shù)內(nèi)嵌(Inline)式寫法,方便拼接SQL,任意SQL和CRUD方法中都可以將SQL文本、參數(shù)、分頁攔截器、緩存選項(xiàng)、分庫分表選項(xiàng)等當(dāng)作參數(shù)傳遞。其它DAO工具則主要依賴模板實(shí)現(xiàn)動(dòng)態(tài)SQL,多繞了一層。
        DBA友好(多行SQL存放) 3.5 4.5 5 5 BeetlSql不能切換模板。MyBatis的XML太繁瑣,Sql注解又不適用于多行SQL。jSqlBox缺省模板無語法功能,扣分,但它首創(chuàng)用注釋存放多行SQL,支持IDE定位,加分。
        支持重構(gòu)的SQL 4 4 4 4.5 jSqlBox利用Lambda可以寫出支持重構(gòu)的SQL(Java8版),而且沒有重新發(fā)明新的SQL語法。BeetlSql中的Lambda查詢器和MP中的條件構(gòu)造器支持重構(gòu),但個(gè)人認(rèn)為是重新發(fā)明SQL的反模式,意義不大。jFinal沒有發(fā)明反模式,但也沒有什么創(chuàng)新,所以打分不高。jSqlBox沒有打滿分是因?yàn)槭躂ava語言限制,Lambda不能直接當(dāng)參數(shù)傳遞,使用起來繁瑣。
        ORM關(guān)聯(lián)查詢 5 3 3 5 BeetlSql和JFinal實(shí)體關(guān)聯(lián)查詢有缺陷,例如dept=user.get(“department“)這種寫法不支持重構(gòu),也沒有自動(dòng)裝配POJO中的字段屬性。JFinal中Blog.dao.find(“select * from blog where user_id=?“,get(“id“));這種方式隱含1+N問題
        DataMapper模式 5 5 0 5 即類似dao.save(user)寫法。JFinal不支持標(biāo)準(zhǔn)POJO的持久化,不利于與其它工具集成使用。
        ActiveRecord模式 5 0 5 5 ActiveRecord實(shí)現(xiàn)起來很簡單,它是DataMapper模式的鏡像,在jSqlBox中只有不到300行代碼,但是從文檔中看不出BeetlSql有這個(gè)功能,希望改進(jìn)。jSqlBox的Java8版只需要聲明ActiveEntity接口,不占用單繼承。
        接口代理模式 5 5 0 0 只需要寫出接口,SQL用注釋加在接口方法上,在運(yùn)行時(shí)生成代理實(shí)例方法,這可能是個(gè)反模式,因?yàn)槭褂盟枰日{(diào)用dao.getMapper(User.class)生成一個(gè)特殊的代理實(shí)例,不如ActiveRecord模式簡單明了。在jSqlBox中,簡單的SQL和邏輯復(fù)雜的SQL,直接在Java方法里拼接就可以了,大段的SQL可以利用/-/注釋來存放,支持IDE定位
        混合模型 ? 5 5 5 即同時(shí)支持利用POJO和數(shù)據(jù)庫字段存取,如user.setName(“Tom“).putTail(“usr_age“,10).save()。BeetlSql利用@Tail或TailBean實(shí)現(xiàn),jSqlBox中的ActiveRecord支持混合模型,jFinal中的Model支持混合模型。MP不清楚,先打個(gè)問號(hào)。
        Record/Map模式 ? 5 5 5 實(shí)體類不存在時(shí),JFinal可以用Record類來直接存取數(shù)據(jù)庫,jSqlBox用Tail類實(shí)現(xiàn)(是ActiveRecord的子類,源碼只有兩行),BeetlSql還支持直接用Map來存取數(shù)據(jù)庫。Tail/Record/Map這種方式不支持重構(gòu),所以不建議在項(xiàng)目中大量使用。
        主從支持 2 5 2 5 jSqlBox的主從選擇可以精細(xì)控制到任意一個(gè)CURD或SQL,jFinal需要手工選擇主從庫,不具備自動(dòng)切換主從功能。MyBatis本身不支持主從,要利用AOP等第三方手段實(shí)現(xiàn)。
        分庫分表 2 2 2 4.5 只要使用了Sharding,對(duì)SQL寫法就有侵入。jSqlBox自帶基本的Sharding支持,支持原生SQL和所有數(shù)據(jù)庫。其它DAO工具本身不具備sharding功能,需要第三方Sharding工具支持,限制較多。
        批處理 4 4 4 5 除了通常的JDBC批處理方法外,jSqlBox還提供批處理開關(guān)模式。
        緩存 5 5 5 5 都有,都是針對(duì)SQL查詢結(jié)果而不是實(shí)體容器緩存
        攔截器 5 5 5 5 都有
        Sql日志 5 5 5 5 都有
        鎖及版本控制 5 5 0 0 不常用,JFinal和jSqlBox需手工實(shí)現(xiàn)鎖及版本
        列名到實(shí)體字段映射 5 5 5 5 數(shù)據(jù)表與Java字段命名不符時(shí),jSqlBox用@Column注解來更正,符合JPA慣例。jFina推薦Java字段命名與數(shù)據(jù)表一致。MP和BeetlSql有幾種映射策略選擇。
        Java6/Java8支持 5 5 5 5 都支持。jSqlBox的Java8版只由3個(gè)類組成,反映了它的架構(gòu)可擴(kuò)展性好,用戶可以模仿這3個(gè)文件開發(fā)自已的Java8版。
        性能 4 5 ? 5 對(duì)于持久層,易用性為王,不用多考慮性能。性能測(cè)試詳見閑大賦的DaoBenchMark
        文檔 4 4 3 4 JFinal需要官網(wǎng)注冊(cè)才能下載Demo
        知名度、成熟度 4 4 5 0 用的人越多,Bug就越少。成熟度反映了軟件本身的質(zhì)量,但它與軟件的架構(gòu)、功能、易用性無關(guān)。

        上表中未加入Hibernate和MyBatis,是因?yàn)镠iberante太復(fù)雜、MyBatis不提供CRUD,缺點(diǎn)太明顯。已經(jīng)被很多人用腳投票了。
        不加入EBean的原因是它的功能相對(duì)單調(diào)一些,設(shè)計(jì)思路與Hibernate相似,復(fù)雜性依然存在。
        國產(chǎn)的Nutz DAO功能也挺全的,而且也支持DDL腳本的生成,架構(gòu)上沒有大問題,待下次更新時(shí)加入作對(duì)比。它的主要缺點(diǎn)是沒提供ActiveRecord和實(shí)體關(guān)聯(lián)有點(diǎn)復(fù)雜化。
        JdbcTemplate和DbUtils等DAO工具因?yàn)楣δ軉伪。膊患尤胱鲗?duì)比。

        jSqlBox示例 | Demo

        • jsqlbox-in-actframework 演示jSqlBox與ActFramework框架的整合,分別展示利用jBeanBox和Guice來實(shí)現(xiàn)聲明式事務(wù)。 

        • jsqlbox-in-jfinal 演示jSqlBox與jFinal的整合,用jSqlBox替換掉jFinal自帶的DAO工具。 

        • jSqlBox-in-Spring 這是一個(gè)MVC Web項(xiàng)目,演示jSqlBox在Spring+Tomcat環(huán)境下的配置和使用, IOC、AOP和聲明式事務(wù)均使用Spring的。 

        • jsqlbox-in-springboot 演示jSqlBox在SpringBoot環(huán)境下的配置和使用。

        • jsqlbox-in-springboot-mybatis 演示在SpringBoot環(huán)境下jSqlBox和MyBatis的混合使用。

        • jsqlbox-java8-demo 主要演示jSqlBox-Java8版的兩個(gè)特點(diǎn):實(shí)體類只需要聲明接口、利用Lambda來寫SQL。 

        配置方式 | Configuration

        在pom.xml中添加:

          com.github.drinkjava2
          jsqlbox
          2.0.4
         

        作者其它開源項(xiàng)目 | Other Proje

        期望 | Futures

        歡迎發(fā)issue提出更好的意見或提交PR,幫助完善jSqlBox

        版權(quán) | License

        Apache 2.0

        關(guān)注我 | About Me

        Github 
        碼云 

        瀏覽 26
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        編輯 分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            精品无人区一区二区三区软件下载 | 一边喂奶一边被男人 | 日本无码乱伦 | 成人无码区免费AV片 | 天天操夜夜爱 | 亚洲最大成人 | 做爱www | 午夜啪啪视频 | 日韩精品在线看 | 黄色网址在线免费观看 |