ibatis(1)ibatis的理念
生活随笔
收集整理的這篇文章主要介紹了
ibatis(1)ibatis的理念
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
【0】README
1)本文部分內容轉自 “ibatis in action”,旨在 review?“ibatis的理念”?的相關知識;
【1】結合所有優秀思想的混合型解決方案 在現實世界中,混合型解決方案隨處可見。將兩個看上去相悖的思想在中間處巧妙結合,被證明是一種有效的方法,它往往能夠恰到好處地解決問題,在某些case下甚至會導致一些新興行業的誕生;
汽車工業就是一個最典型的荔枝: 運輸工具大部分的設計革新都來自于對不同思想的混合。將小轎車與大蓬貨車結合最終形成了我們現在的家用房車。把卡車和越野車相結合,于是就有了現代城市人身份的象征——運動型多功能車(sport utility vehicle,SUV);將高速汽車與旅行汽車相結合,于是就有了駕駛起來很舒服的家用轎車。在汽油引擎旁邊安裝一個電力引擎,于是目前北美很多環境問題就都可以迎刃而解了;
ibatis 就是這樣一種混合型解決方案;
【1.1】探索ibatis的根源 1)ibatis從目前最流行的關系數據庫訪問方法中吸收了大量的優秀idea,并找出其中的協同增效作用;
【1.2】理解 ibatis的優勢 1)下表總結了 ibatis 所吸取的idea;
Attention)ibatis持久層所具有的兩個最重要的特性: 外部化sql 和 封裝 sql;(干貨——ibatis最重要的兩個特性——外部化sql 和 封裝 sql;)
【1.2.1】外部化的SQL 1)problem+solution: 1.1)problem: 看如下sql, SELECT PRODUCTID, NAME, DESCRIPTION, CATEGORY FROM PRODUCT WHERE CATEGORY = ? -- 再看 sql 的字符串拼接,使得原本很簡單的sql 變得難以管理; String s = "SELECT" + " PRODUCTID," + " NAME," + " DESCRIPTION," + " CATEGORY" + " FROM PRODUCT" + " WHERE CATEGORY = ?"; 1.2)solution:使用ibatis你就可以按照最自然的方式書寫sql,如下: SELECTPRODUCTID,NAME,DESCRIPTION,CATEGORY FROM PRODUCT WHERE CATEGORY = #categoryId#
【1.2.2】封裝SQL 1)intro:ibatis 使用 XML 來封裝 SQL,選擇XML 是因為它有很好的跨平臺性,得到行業內廣泛使用; 2)ibatis 允許你將輸入輸出參數映射為某些對象的特性,如下所示: <select id="categoryById"parameterClass="string" resultClass="category">SELECT CATEGORYID, NAME, DESCRIPTIONFROM CATEGORYWHERE CATEGORYID = #categoryId# </select>Attention)注意包圍在 SQL 語句周圍的xml 元素這就是對 SQL 的封裝;
【2】ibatis 適合用在何處 1)下圖給出了一個典型的分層策略的高級視圖:(箭頭讀作依賴或使用)
對上圖的分析(Analysis): A1)這種分層設計:來源于 德米特法則,該法則的另一種表達方式是:每一層都應該只對那些與自己緊密相關的層有優先的了解; A2)每一層都與自己 的直接下層打交道:這就保證了依賴流只有一個方向,從而避免了 那種在沒有分層設計的應用程序中非常普遍的 意大利面 式的代碼;
【2.4】持久層 1)intro:持久層是 使用ibatis的地方; 2)持久層要關注: 對象的存取 + 抽象; 3)持久層分為三層:抽象層, 持久化框架, 驅動程序/接口層, 如下圖所示;
3.1)抽象層:目的在于為持久層提供一致且有意義的接口; 3.2)持久化框架:負責與數據庫驅動程序(或接口)的交互;且持久化框架通常只針對一類存儲設施,如你可能會找到專用于處理 XML 文件的數據存儲的持久化 API; 3.3)驅動程序/接口層: 在底層與 存儲設施通信以交互數據;數據庫驅動程序總是非常 ?complicated,所以就需要由持久化框架來與 這些驅動程序通信,從而將它們之間的不同簡化并降低到最低點;
Attention)ibatis 支持將關系數據映射為 java 基本類型,map 實例,xml 還有用戶定義類; ?
【1】結合所有優秀思想的混合型解決方案 在現實世界中,混合型解決方案隨處可見。將兩個看上去相悖的思想在中間處巧妙結合,被證明是一種有效的方法,它往往能夠恰到好處地解決問題,在某些case下甚至會導致一些新興行業的誕生;
汽車工業就是一個最典型的荔枝: 運輸工具大部分的設計革新都來自于對不同思想的混合。將小轎車與大蓬貨車結合最終形成了我們現在的家用房車。把卡車和越野車相結合,于是就有了現代城市人身份的象征——運動型多功能車(sport utility vehicle,SUV);將高速汽車與旅行汽車相結合,于是就有了駕駛起來很舒服的家用轎車。在汽油引擎旁邊安裝一個電力引擎,于是目前北美很多環境問題就都可以迎刃而解了;
ibatis 就是這樣一種混合型解決方案;
【1.1】探索ibatis的根源 1)ibatis從目前最流行的關系數據庫訪問方法中吸收了大量的優秀idea,并找出其中的協同增效作用;
【1.2】理解 ibatis的優勢 1)下表總結了 ibatis 所吸取的idea;
Attention)ibatis持久層所具有的兩個最重要的特性: 外部化sql 和 封裝 sql;(干貨——ibatis最重要的兩個特性——外部化sql 和 封裝 sql;)
【1.2.1】外部化的SQL 1)problem+solution: 1.1)problem: 看如下sql, SELECT PRODUCTID, NAME, DESCRIPTION, CATEGORY FROM PRODUCT WHERE CATEGORY = ? -- 再看 sql 的字符串拼接,使得原本很簡單的sql 變得難以管理; String s = "SELECT" + " PRODUCTID," + " NAME," + " DESCRIPTION," + " CATEGORY" + " FROM PRODUCT" + " WHERE CATEGORY = ?"; 1.2)solution:使用ibatis你就可以按照最自然的方式書寫sql,如下: SELECTPRODUCTID,NAME,DESCRIPTION,CATEGORY FROM PRODUCT WHERE CATEGORY = #categoryId#
【1.2.2】封裝SQL 1)intro:ibatis 使用 XML 來封裝 SQL,選擇XML 是因為它有很好的跨平臺性,得到行業內廣泛使用; 2)ibatis 允許你將輸入輸出參數映射為某些對象的特性,如下所示: <select id="categoryById"parameterClass="string" resultClass="category">SELECT CATEGORYID, NAME, DESCRIPTIONFROM CATEGORYWHERE CATEGORYID = #categoryId# </select>Attention)注意包圍在 SQL 語句周圍的xml 元素這就是對 SQL 的封裝;
【2】ibatis 適合用在何處 1)下圖給出了一個典型的分層策略的高級視圖:(箭頭讀作依賴或使用)
對上圖的分析(Analysis): A1)這種分層設計:來源于 德米特法則,該法則的另一種表達方式是:每一層都應該只對那些與自己緊密相關的層有優先的了解; A2)每一層都與自己 的直接下層打交道:這就保證了依賴流只有一個方向,從而避免了 那種在沒有分層設計的應用程序中非常普遍的 意大利面 式的代碼;
【2.4】持久層 1)intro:持久層是 使用ibatis的地方; 2)持久層要關注: 對象的存取 + 抽象; 3)持久層分為三層:抽象層, 持久化框架, 驅動程序/接口層, 如下圖所示;
3.1)抽象層:目的在于為持久層提供一致且有意義的接口; 3.2)持久化框架:負責與數據庫驅動程序(或接口)的交互;且持久化框架通常只針對一類存儲設施,如你可能會找到專用于處理 XML 文件的數據存儲的持久化 API; 3.3)驅動程序/接口層: 在底層與 存儲設施通信以交互數據;數據庫驅動程序總是非常 ?complicated,所以就需要由持久化框架來與 這些驅動程序通信,從而將它們之間的不同簡化并降低到最低點;
Attention)ibatis 支持將關系數據映射為 java 基本類型,map 實例,xml 還有用戶定義類; ?
總結
以上是生活随笔為你收集整理的ibatis(1)ibatis的理念的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快喵加速器安卓下载官网(快喵加速器安卓)
- 下一篇: ibatis(2)ibatis是什么