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