sqltoy-orm 4.13.12.1 發版,增加 DTO 和 POJO 互轉工具方法

2020-12-23 開源中國

致謝:

  • 感謝網絡用戶的積極反饋和參與,使得sqltoy快速完善、可靠,支持的更加全面場景更加充分!
  • 一路走來,我只是用我的努力將大家好的idea融合在sqltoy中,希望看到這篇文章的讀者能夠真正的了解sqltoy並幫助到你們!
  • 請不要見xml就反,說實在的在2010年之前crud就已經是沒有sql和xml了(如果有興趣可以了解一下sqltoy的update跟其它ORM的異同,也可以了解一下sqltoy中什麼是updateFetch,相信會看到另類的思考),不提crud是默認大家已經跨越了crud已經面對複雜查詢問題(難道默認值設高了?),所以突出xml和sql是為了講解複雜查詢和後期需求變更、維護的優勢,其實查詢才是充滿變數和挑戰的!
  • 隨著sqltoy的完善,後續發版頻率會降低,更多的將完善文檔和提供一些線上支持!再次感謝網絡用戶的反饋和參與!

開源地址:

更新內容

1、增加DTO和POJO互轉工具,在SqlToyCRUDService、SqlToyLazyDao、SqlToySupportDao中都可調用

/** * @TODO 實現VO和POJO之間屬性值的複製,如名稱不一致,在VO中欄位上使用@SqlToyFieldAlias 註解來處理 * @param <T> * @param source * @param resultType * @return * @throws Exception */public <T extends Serializable> T convertType(Serializable source, Class<T> resultType) throws Exception;public <T extends Serializable> List<T> convertType(List<Serializable> sourceList, Class<T> resultType) throws Exception;

2、優化代碼中Translate內部定義,增加內部類,減少開發調用時出現過多get方法,對選擇形成幹擾

快速了解 sqltoy-orm:

  • sqltoy是全新一代的ORM框架,兼顧jpa對象式操作的優勢,同時極大增強了查詢功能,輔以科學的sql編寫模式、巧妙的緩存翻譯集成、極致的分頁優化以及針對大規模數據下的分庫分表、超複雜場景下的mongodb、elastic、clickhouse組合應用!
  • sqltoy給你帶來了多種主鍵策略,除常規的UUID、sequence、identity外,還包含雪花算法和基於redis產生有規則的業務主鍵等。
  • sqltoy還提供了針對統計分析的:數據旋轉、無限級分組計算、同比環比等來減少開發者寫複雜sql。
  • sqltoy在很多方面提供了極為實用的方法,如:樹形表處理、isUnique、findTop、getRandomResult、updateFetch等等
  • sqltoy不走jooq全對象式、mybatis全sql式這種不是天就是地的極端路子,緊貼項目實戰發展起來的框架,讓各自技術以合理的方式應用於合理的地方!

簡要舉例介紹(因篇幅問題部分舉例):

  • JPA式的CRUD,但規避了其不足,提供了默認的SqlToyCRUDService(簡單的則無需寫service方法) 和 SqlToyLazyDao(開發無需自己寫Dao,只需要寫Service業務邏輯),可以了解類似於update、updateAll、saveOrUpdate等內在邏輯,減少了資料庫交互,考慮了高並發和業務對象變更的特徵!

 @Autowired private SqlToyCRUDService sqlToyCRUDService; //基於對象保存  sqlToyCRUDService.save(staffInfo); //基於對象更新(欄位值為null的不會參與變更)  sqlToyCRUDService.update(staffInfo); //深度變更,全部欄位都參與變更 sqlToyCRUDService.updateDeeply(staffInfo); //基於對象更新(制定強制修改的欄位)  sqlToyCRUDService.update(staffInfo,new String[]{"staffName","onDuty"}); //基於對象更新  sqlToyCRUDService.saveOrUpdate(staffInfo); //加載對象 sqlToyCRUDService.load(new StaffInfoVO("S190715009")); //加鎖獲取對象 sqlToyCRUDService.load(new StaffInfoVO("S190715009"),LockMode.UPGRADE); //判斷對象是否唯一 sqlToyCRUDService.isUnique(staffInfo, "staffCode"); //delete\deleteAll\updateAll\loadAll 等等不一一寫完

//單表對象查詢,直接傳參模式List<StaffInfoVO> staffVOs = sqlToyLazyDao.findEntity(StaffInfoVO.class, EntityQuery.create().where("#[staffName like ?] #[ and status=?]").values("陳", 1).lock(LockMode.UPGRADE) .orderBy("staffName").orderByDesc("createTime"));//單表查詢,對象傳參模式List<StaffInfoVO> staffVOs = sqlToyLazyDao.findEntity(StaffInfoVO.class, EntityQuery.create().where("#[staffName like :staffName] #[ and status=:status]") .values(new StaffInfoVO().setStatus(1).setEmail("test3@aliyun.com")));//代碼中鏈式查詢並刪除Long deleteCount = sqlToyLazyDao.deleteByQuery(StaffInfoVO.class, EntityQuery.create().where("status=:status").values(new StaffInfoVO().setStatus(1)));//鏈式變更Long updateCount = sqlToyLazyDao.updateByQuery(StaffInfoVO.class, EntityUpdate.create().set("staffName", "張三").where("staffName like ? and status=?").values("陳", 1));

  • 更強大的查詢,sqltoy強調複雜查詢建議放置於xml中跟代碼分離(但是可以寫在代碼中的),不要見xml就反,請深入了解之後再反!

//sqltoy統一的規則就是直接傳遞sql語句或者對應的sqlId,並不是說sql只能寫在xml中(推薦但不絕對)findBySql(final String sqlOrSqlId, final String[] paramsNamed, final Object[] paramsValue, final Class<T> voClass)//嫌棄上面的格式化傳參也可以使用這樣鏈式查詢sqlToyLazyDao.findByQuery(new QueryExecutor("sqltoy_order_search").names("orderId", "authedOrganIds") .values(null, authedOrgans).resultType(DeviceOrderInfoVO.class));

我們對比一下mybatis的實現(很簡單的sql寫的如此讓人不願意寫!)

  • 緩存翻譯,利用緩存減少關聯查詢,簡化sql同時大幅提升效率

相關焦點

  • sqltoy-orm 4.13.8 發版 - OSCHINA - 中文開源技術交流社區
    2、升級spring和springboot的版本依賴到5.2.8 和 2.3.2 版本3、quickvo增加一個min版本,不支持yml配置,減少文件大小快速了解 sqltoy-orm: sqltoy是全新一代的ORM框架,兼顧jpa對象式操作的優勢,同時極大增強了查詢功能,輔以科學的sql
  • sagacity-sqltoy 4.17.8 發布,Java ORM 框架
    sagacity-sqltoy 4.17.8 已經發布,此版本更新內容包括:1、支持緩存翻譯未匹配模板設置為空白或空字符串: uncached-template=""(之前空白當成無效設置
  • sqltoy-orm-4.16.16 發版,並行查詢場景增強、級聯增加排序
    開源地址:更新內容1、增加級聯加載排序功能,quickvo裡面增加配置 <cascade>   <table name="SQLTOY_DICT_DETAIL" orderBy="showIndex desc"
  • 極致查詢性能 sqltoy-orm-4.12.8 發版增加對國產達夢資料庫支持
    更新內容1、主要增加對國產達夢資料庫的支持(目前除updateFetch
  • sqltoy-orm-4.16.11 發版,部分功能優化
    開源地址:更新內容1、修復#[and @loop(:params,' status=':params[i]'','or')] 處理後#[]中沒有參數導致被整體剔除的缺陷2、增加convertType(pageModel
  • 極致性能 sqltoy-orm-4.12.9 發版 - OSCHINA - 中文開源技術交流...
    初步支持tidb,建議可以初步試用2、針對elastic升級fastjson到1.2.70版本,修復安全漏洞,同時升級spring依賴版本3、優化少量代碼4、初步增加guassdb、oceanbase的方言支持,希望有相關使用者協助測試!
  • sqltoy-orm-4.17.6 發版,支持 Greenplum、並行查詢可設置並行數量
    開源地址:更新內容1、支持greenplum olap資料庫2、並行查詢支持自行定義並行數量和最大等待時長
  • BeetlSQL 3.1.2 發布,Java 資料庫訪問工具
    </artifactId> <version>3.1.2-RELEASE</version></dependency>BeetlSQL的目標是提供開發高效,維護高效,運行高效的資料庫訪問框架,在一個系統多個庫的情況下,提供一致的編寫代碼方式。
  • BeetlSQL 3.0.0-M1 第一個版本發布 - OSCHINA - 中文開源技術交流...
    經過8個月的重構,BeetlSQL3裡程碑1已經完成BeetlSQL是一款資料庫訪問工具庫,廣泛應用到企業應用,網際網路項目。相比於BeetlSQL2,新版支持更多數據來源,包括支持JDBC的傳統資料庫,大數據NOSQL,以及大數據SQL查詢引擎,在易用性何擴展性也做了大幅度修改。
  • Mybatis的sql組裝詳解
    上一篇分析了SqlSession執行sql的過程,其中並沒有分析sql是從哪裡來的,今天就來仔細分析下。Sql來源從上一篇的最後一步執行sql那裡倒推sql的來源,源碼主要過程如下圖:可以看到最後是通過BoundSql直接獲取的sql,然後往前倒推最後發現是通過MappedStatement的getBoundSql方法返回的。
  • 怎麼把mp3轉mp4?分享1個音、視頻格式互轉的好辦法
    「把mp3轉mp4?」乍一看,小夥伴們還以為自己看錯了,心想著怎麼還有把音頻轉視頻的操作呢。還真有,(除了把mp3轉mp4)現在自媒體行業還經常會從視頻中給提取音頻出來的,對音、視頻進行格式轉換的操作,給大家帶來了很多學習、工作上的便利。
  • 使用explain和show profile來分析SQL語句實現優化SQL語句
    SQL語句優化是建立在慢查詢分析的基礎上,通過慢查詢定位有問題的SQL語句,關於慢查詢的介紹及其分析工具,可以參考[mysql慢查詢及慢查詢日誌分析工具]一、通過explain查詢1 用法:explain sql2 作用:用於分析sql語句(1)、id:執行explain的一個編號(沒有實際意義)(2)、
  • 在線工具大全,編程必備
    時間戳轉換功能簡介:Unix時間戳和北京時間互轉、獲取時間戳方法地址:http://www.matools.com/timestamp代碼對比/歸併功能簡介:在線檢測/比較兩個文件文本的不同地址:http://www.matools.com/compareLESS編譯器功能簡介
  • 13個靠譜有料的免費外貿/跨境工具(含谷歌、阿里隱秘神器)
    分別是: 1)全站英文拼寫檢查工具 2)根據關鍵詞生成可註冊的.com 域名工具 3)谷歌的另一款神秘零售類目趨勢分析工具 4)可抓取亞馬遜當前頁面所有 Asins的 插件 5)一款低調有內涵的亞馬遜選品工具 6)亞馬遜各市場TOP賣家排行榜查詢網站 7)eBay Top 賣家列表&上升趨勢賣家列表
  • MySQL優化:定位慢查詢的兩種方法以及使用explain分析SQL
    定位慢查詢SQL在平時工作中,我想你肯定遇到過一條sql發出去了,但是等了好久才出現了返回值,這不僅僅影響了測試速度也大大降低了開發效率。所以我們有必要學習sql慢查詢定位。EXLPAIN分析慢查詢分析 SQL 執行效率是優化 SQL 的重要手段,通過上面講的兩種方法,定位到慢查詢語句後,我們就要開始分析 SQL 執行效率了,子曾經曰過:「工欲善其事,必先利其器」,我們可以通過 explain、show profile 和 trace 等診斷工具來分析慢查詢。
  • Oracle DBA之常用SQL
    下面咱可以整幾條SQL了,這是俺比較常用的,「常用」這個詞很好,猶如吃飯喝水一般,它不是萬能的,更不是「武林秘籍」。10,2),'12',1,0)),'999') "12",     TO_CHAR(SUM(DECODE(SUBSTR(TO_CHAR(FIRST_TIME, 'MM-DD-YY hh24:MI:SS'),10,2),'13',1,0)),'999') "13",      TO_CHAR(SUM(DECODE(SUBSTR(TO_CHAR(FIRST_TIME, 'MM-DD-YY
  • Sql注入攻擊基本原理
    本文將帶你從介紹 Web 應用運行原理開始,一步一步理解 Sql 注入的由來、原理和攻擊方式。注入可以藉助資料庫的存儲過程進行提權等操作4、判斷Sql注入點4.1 判斷是否存在sql注入漏洞通常情況下,可能存在 Sql 注入漏洞的 Url 是類似這種形式 :http://xxx.xxx.xxx/abcd.php?id=XX對 Sql 注入的判斷,主要有兩個方面:判斷該帶參數的 Url 是否存在 Sql 注入?
  • SQL SERVER 2016中開啟xp_cmdshell運行cmd命令的方法
    下面介紹在SQL中如何開啟使用xp_cmdshell1.打開SSMS管理工具,連接SQL SERVER伺服器,輸入下面的腳本語句SELECT * FROM sys.configurations WHERE name='xp_cmdshell' OR name='show advanced options'
  • iOS13.5越獄工具再更新,和蘋果鬥到底!
    但和蘋果有關的事情就是這麼奇怪,好比那些吐槽iPhone這裡不好,那裡不好的人,在iPhone降價後依然購買一樣,雖然大家對iOS越獄前景不看好,但之前iOS13.5越獄工具一發出的時候,官網曾一度被擠爆,就連小智給大家整理好的工具都創了本人網盤下載數量新記錄。