91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

什么是iBatis

發布時間:2021-12-01 09:25:54 來源:億速云 閱讀:233 作者:小新 欄目:編程語言

這篇文章主要為大家展示了“什么是iBatis”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“什么是iBatis”這篇文章吧。

什么是iBatis:

使用ibatis 提供的ORM機制,對業務邏輯實現人員而言,面對的是純粹的Java對象, 這一層與通過Hibernate 實現ORM 而言基本一致,而對于具體的數據操作,Hibernate 會自動生成SQL 語句,而ibatis 則要求開發者編寫具體的SQL 語句。相對Hibernate等 “全自動”ORM機制而言,ibatis 以SQL開發的工作量和數據庫移植性上的讓步,為系統 設計提供了更大的自由空間。作為“全自動”ORM 實現的一種有益補充,ibatis 的出現顯 得別具意義。

使用iBatis開發項目工作量比較大,因為每個sql語句都必須自己寫。一般的CRUD sql都是sql 92規范,基本上都通用所有數據庫。我想如果可以通過hack ibatis源代碼實現自動生成iql(ibatis sql)可以簡化多少開發量啊。(最開始有這個想法是因為ibatis for .net實現了這個功能,而ibatis for java沒有)

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

查看了相關dtd后,發現《parameter》節點沒有column定義,《parameterMap》節點沒有extends定義,《result》和《resultMap》這倒是有。于是修改dtd定義和BasicParameterMapping類,使其支持column。并且修改SqlMapParser類,使其初始化的時候支持column和extends。加入column的目的是為了支持java屬性對應到不同的字段上。加入extends的目的是為了重用parametermap。

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

dtd文檔定義修改完成后,就可以修改ibatis加載類,使其支持generate。這個切入點比較難找,因為要仔細分析他的源代碼。經過仔細思考后,發現ibatis和sql-map支持《include》,決定在include后面加入generate的解析代碼。這樣比較方便的找到了切入點。

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

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

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

且末县| 古浪县| 信阳市| 芮城县| 长岛县| 蓬莱市| 万全县| 丹巴县| 额尔古纳市| 信丰县| 呼图壁县| 社旗县| 扎鲁特旗| 华坪县| 尖扎县| 苍南县| 贵港市| 昭通市| 东乡族自治县| 连城县| 东安县| 兴业县| 桂阳县| 双柏县| 望谟县| 安化县| 南溪县| 邹城市| 林周县| 全州县| 佳木斯市| 无棣县| 鄂伦春自治旗| 冷水江市| 武平县| 龙山县| 瓦房店市| 阳城县| 高陵县| 喜德县| 望城县|