溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

什么是iBatis

發(fā)布時(shí)間:2021-12-01 09:25:54 來源:億速云 閱讀:225 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“什么是iBatis”,內(nèi)容簡(jiǎn)而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領(lǐng)大家一起研究并學(xué)習(xí)一下“什么是iBatis”這篇文章吧。

什么是iBatis:

使用ibatis 提供的ORM機(jī)制,對(duì)業(yè)務(wù)邏輯實(shí)現(xiàn)人員而言,面對(duì)的是純粹的Java對(duì)象, 這一層與通過Hibernate 實(shí)現(xiàn)ORM 而言基本一致,而對(duì)于具體的數(shù)據(jù)操作,Hibernate 會(huì)自動(dòng)生成SQL 語句,而ibatis 則要求開發(fā)者編寫具體的SQL 語句。相對(duì)Hibernate等 “全自動(dòng)”O(jiān)RM機(jī)制而言,ibatis 以SQL開發(fā)的工作量和數(shù)據(jù)庫移植性上的讓步,為系統(tǒng) 設(shè)計(jì)提供了更大的自由空間。作為“全自動(dòng)”O(jiān)RM 實(shí)現(xiàn)的一種有益補(bǔ)充,ibatis 的出現(xiàn)顯 得別具意義。

使用iBatis開發(fā)項(xiàng)目工作量比較大,因?yàn)槊總€(gè)sql語句都必須自己寫。一般的CRUD sql都是sql 92規(guī)范,基本上都通用所有數(shù)據(jù)庫。我想如果可以通過hack ibatis源代碼實(shí)現(xiàn)自動(dòng)生成iql(ibatis sql)可以簡(jiǎn)化多少開發(fā)量啊。(最開始有這個(gè)想法是因?yàn)閕batis for .net實(shí)現(xiàn)了這個(gè)功能,而ibatis for java沒有)

說干就干,決定依照ibatis for .net的實(shí)現(xiàn)方式來實(shí)現(xiàn),通過sql-map的parametermap來實(shí)現(xiàn)。以最小代碼來實(shí)現(xiàn)該功能。

查看了相關(guān)dtd后,發(fā)現(xiàn)《parameter》節(jié)點(diǎn)沒有column定義,《parameterMap》節(jié)點(diǎn)沒有extends定義,《result》和《resultMap》這倒是有。于是修改dtd定義和BasicParameterMapping類,使其支持column。并且修改SqlMapParser類,使其初始化的時(shí)候支持column和extends。加入column的目的是為了支持java屬性對(duì)應(yīng)到不同的字段上。加入extends的目的是為了重用parametermap。

parameter修改完成后,就要修改dtd文檔定義,使其支持《generate》節(jié)點(diǎn),我們只需要《insert》、《update》、《delete》、《select》這四個(gè)節(jié)點(diǎn)支持就行,《statement》和《sql》節(jié)點(diǎn)考慮在下一版支持。generate需要三個(gè)屬性,分別是table、where、excludes。其中table表示是對(duì)應(yīng)的表,適用于所有;where表示查詢條件字段,適用于select、update、delete;excludes表示要排除哪些parameter,適用于select、update。

dtd文檔定義修改完成后,就可以修改ibatis加載類,使其支持generate。這個(gè)切入點(diǎn)比較難找,因?yàn)橐屑?xì)分析他的源代碼。經(jīng)過仔細(xì)思考后,發(fā)現(xiàn)ibatis和sql-map支持《include》,決定在include后面加入generate的解析代碼。這樣比較方便的找到了切入點(diǎn)。

找到SqlStatementParser類,找到了parseDynamicTags方法,里面就有include的解析。這里面的判斷代碼是else if,我再加入一個(gè)generate的else if 就OK啦。經(jīng)過一天的修改,完成。工作量也不是太大。

以上是“什么是iBatis”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對(duì)大家有所幫助,如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI