iBATIS教程之入門淺析
一、ibatis教程之ibatis介紹:
ibatis是什么呢?相對于hibernate和apache ojb等“一站式”orm解決方案而言,ibatis是一種“半自動化”的orm實現(xiàn)。
這個框架將讓你能夠更好的在java應(yīng)用中設(shè)計和實現(xiàn)實體層。這個框架有兩個主要的組成部分,一個是sql maps,另一個是data access objects。另外還包括一些可能很有用的工具。
sql maps:
sql maps是這個框架中最激動人心的部分,它是整個ibatis database layer的核心價值所在。通過使用sql maps你可以顯著的節(jié)約數(shù)據(jù)庫操作的代碼量。sql maps使用一個簡單的xml文件來實現(xiàn)從javabean到sql statements的映射。跟其他的框架或者對象映射工具相比,sql maps最大的優(yōu)勢是簡單。它需要學(xué)習(xí)的東西很少,在連接表或復(fù)雜查詢時也不需要復(fù)雜的scheme(怎么翻complex scheme?),使用sql maps, 你可以自由的使用sql語句。
data access objects (dao)
當(dāng)我們開發(fā)靈活的java應(yīng)用時,有一個好主意就是通過一個通用api層把實體操作的細(xì)節(jié)封裝起來。data access objects允許你通過一個簡單接口的來操作數(shù)據(jù),從而隱藏了實現(xiàn)的細(xì)節(jié)。使用dao,你可以動態(tài)配置你的應(yīng)用程序來訪問不同的實體存儲機(jī)制。如果你有 一個復(fù)雜的應(yīng)用需要用到幾個不同的數(shù)據(jù)庫,dao可以讓你建立一個一致的api,讓系統(tǒng)的其他部分來調(diào)用。
utilities
ibatis database layer包含一系列的有用的工具,比如simpledatasource,jdbc datasource 2.0(也包括3.0)的一個輕量級實現(xiàn)。scriptrunner也提供了從單元測試到自動發(fā)布的數(shù)據(jù)庫準(zhǔn)備工作。
工作流程:
sql maps提供一個簡單的框架,通過xml描述來映射javabeans,map implementations甚至原始類型的包裝(string,integer等)到j(luò)dbc preparedstatement。想法很簡單,基本的步驟如下:
1) 提供一個對象作為參數(shù)(either a javabean, map or primitive wrapper),the parameter object will be used setting input values in an update statement, or query values in a where clause (etc.).(感覺不譯為好,你說呢?)
2) 執(zhí)行這個映射的statement,這一步是魔術(shù)發(fā)生的地方。sql maps框架將建立一個preparedstatement實例(instance),使用前面提供的對象的參數(shù),執(zhí)行statement,然后從resultset中建立一個返回對象。
3) 如果是update,則返回有多少行修改了,如果是查詢,則返回一個對象或者對象的集合。跟參數(shù)一樣,返回對象也可以是一個javabean,map或者一個primitive type wrapper。
二、ibatis教程之配置文件的使用:
sql map的配置文件。這個文件是sql map實現(xiàn)的根配置,這不是本總結(jié)所要具體描述的。
配置文件是xml文件,我們用它來配置屬性,jdbc datasources 和 sql maps。它給我們一個便利的地方可以集中配置不同的datasource。這個框架支持ibatis simpledatasource, jakarta dbcp (commons),以及其他任何可以通過jndi context來訪問的datasource。我們在以后將詳細(xì)討論這個問題。現(xiàn)在我們用jakarta dbcp,結(jié)構(gòu)很簡單,上面這個例子,它的配置文件如下。
<properties>元素:
這sql map中的<properties>元素支持sql map xml配置文件。配置文件里的元素符合data map規(guī)則。
<properties>所應(yīng)用的文件里的元素必須和<datasource>里的元素相對應(yīng)。下面是sqlmapconfigexample.properties文件的內(nèi)容。里面的元素和<datasource>里的元素相對應(yīng)。
<settings>元素
maxrequests:在同一時間內(nèi)能執(zhí)行sql語句的次數(shù)
maxsession:在同一時間內(nèi)能起作用的session數(shù)
maxtransaction:在同一時間內(nèi)能執(zhí)行的事務(wù)。
statementcachesize:緩沖區(qū)的大小
三、ibatis教程之操作方法介紹:
注意:本總結(jié)適合有使用開發(fā)ibatis基礎(chǔ)的人員參考。由于本人的能力有限,不足之處請大家指出。
1. statement支持元素及支持的屬性:
1.1 id
id屬性是必須的,它表示這個語句的名稱,它在整個<sqlmap>元素內(nèi)唯一的。在代碼通過id來引用相關(guān)語句。
1.2 parametermap
parametermap屬性定義了一個有序的值列表,分別有序的對應(yīng)了標(biāo)準(zhǔn)參數(shù)化的sql語句中的?占位符。
1.3 parameterclass
在沒有指明parametermap屬性的情況下,你可以指定parameterclass屬性方法來替代parametermap屬性。parameterclass屬性的值可以使用類型的別名或者類型(類)全稱
1.4 resultmap
resultmap可以讓你控制你如何讓數(shù)據(jù)從查詢結(jié)果(resultmap)中提取出來存入java對象中。并且可以定義如何將字段映射到j(luò)ava bean的屬性里。如下圖:
1.5 resultclass
在resultmap屬性沒有指定的情況下,可以采用resultclass方式,resultclass的屬性值可采用類型別名或者類型(class)全稱的方式。指定的類將根據(jù)數(shù)據(jù)庫的元數(shù)據(jù)自動的映射到查詢結(jié)果的字段值中。
2. parametermap元素屬性
2.1 id
id屬性是必須的,它提供了<parametermap>對元素data map里的唯一表示符
2.2 class
class屬性是可選的,class屬性必須是javabean或map實列,class屬
性雖是可選的,但推薦大家指定,class屬性 可以用來驗證傳入的參數(shù)的合法性及優(yōu)化查詢
3. 查詢語句
3.1 屏蔽特殊符 <![cdata[ ]]>
3.2 語句導(dǎo)入 <include>,可以是語句優(yōu)化
使用<include>方法,上面的語句可以寫成:
4.自增長方法:<selectkey resultclass=”int”>,不管<selectkey resultclass=”int”>處于該語句的什么部位,都先執(zhí)行此自增長方法。注意:mysql和oracle的方法不一樣。
5. <insert>方法:
insert方法使用parametermap屬性,字段名要和<parametermap>方法里的元素一一對應(yīng)
6. <resultclass>屬性:
使用resultclass方法,類person里必須id,firstname,lastname,birthdate,werghtkilograms,heightmeters這些屬性。
7. 使用xmlresultname:xml映射文件
8. 使用<parametermap>方法:用來設(shè)置元素的屬性,其中nullvalue表示缺省值
9. 如果傳入的參數(shù)只有一個,用#value#來替代傳入的參數(shù)名。如果還傳來的是字段名,則ibatis不支持
10. 判斷傳入的參數(shù)是否存在:isnotnull,判斷傳入的參數(shù)值是否大于設(shè)定的值:isgreaterthan
11. 判斷傳入的參數(shù)是否為空:isempty和isnotemply
12. 如果進(jìn)行模糊查詢,使用like方法
那么ibatis教程的入門部分就向你介紹到這里,希望上述的介紹使你對ibatis有了一定的認(rèn)識。