iBatis学习第一天
生活随笔
收集整理的這篇文章主要介紹了
iBatis学习第一天
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一、iBatis簡(jiǎn)單介紹
iBatis是又一個(gè)O/R Mapping解決方案,j2ee的O/R方案真是多,和Hibernate相比,iBatis最大的特點(diǎn)就是小巧,上手很快。如果你不需要太多復(fù)雜的功能,iBatis是能滿足你的要求又足夠靈活的最簡(jiǎn)單的解決方案。
iBatis簡(jiǎn)單靈活,上手容易,代碼很少,配置稍嫌復(fù)雜。不足之處一是沒有方便的工具來自動(dòng)生成xml配置文件,二是不管是query還是insert都只能傳入一個(gè)參數(shù),有時(shí)不得不把兩個(gè)參數(shù)包裝成一個(gè)類傳進(jìn)去。另外對(duì)常見的1:1,1:N關(guān)系的支持不如Hibernate。不過,大多數(shù)時(shí)候iBatis已經(jīng)完全可以滿足我們的需求。Spring很好的集成了iBatis,你可以參考Spring的JPetStore示例。需要注意的是使用iBatis 2.0和1.0有較大區(qū)別,主要體現(xiàn)在配置文件上,iBatis 2.0新增了DAO框架,不需要Spring提供的DAO也能很方便地實(shí)現(xiàn)DAO模式。
iBATIS與普通的OO/RM的不同:它不是直接把類映射為數(shù)據(jù)庫表或者說把類的字段映射為數(shù)據(jù)庫列,而是把SQL語句的參數(shù)與結(jié)果(也即輸入和輸出)映射為類。正如你在本書的剩余部分中將會(huì)學(xué)到的,iBATIS在類和數(shù)據(jù)庫表之間建立了一個(gè)額外的間接層,這就為如何在類和數(shù)據(jù)庫表之間建立映射關(guān)系帶來了更大的靈活性,使得在不用改變數(shù)據(jù)模型或者對(duì)象模型的情況下改變它們的映射關(guān)系成為可能。其實(shí)我們這里討論的這個(gè)間接層就是SQL。SQL這個(gè)額外的間接層使得iBATIS能夠更好地隔離數(shù)據(jù)庫設(shè)計(jì)和應(yīng)用中使用的對(duì)象模型。這就使得它們兩者之間的相關(guān)性能夠降至最少。圖2-2展示了iBATIS如何使用SQL映射數(shù)據(jù)。
[img]http://qingfeng825.iteye.com/upload/picture/pic/10994/b2621326-84c2-3aee-bd32-946fb5fe0881.gif [/img]
正如你在上圖中所看到的,iBATIS的映射層其實(shí)就是SQL。iBATIS讓你自己寫SQL語句,iBATIS負(fù)責(zé)在類的字段和數(shù)據(jù)庫表的列之間映射參數(shù)和結(jié)果?;谶@個(gè)原因,也考慮到與其他各種各樣的映射方式的區(qū)分,為避免混淆,iBATIS小組通常將所謂的“數(shù)據(jù)映射器”稱為SQL映射器(SQL mapper)
二、映射SQL語句
任何一條SQL語句都可以看作是一個(gè)函數(shù),有輸入輸出集合。輸入即參數(shù)(parameter),通??梢栽赟QL語句的WHERE子句中找到。輸出則是SELECT子句中指定的那些列。圖2-3描述了這個(gè)思想。
[img]http://qingfeng825.iteye.com/upload/picture/pic/10994/b2621326-84c2-3aee-bd32-946fb5fe0881.gif[/img]
圖2-3 SQL語句可以被看作一個(gè)包含輸入輸出的函數(shù)
這種方式的最大優(yōu)點(diǎn)就在于SQL語句使得開發(fā)者能夠自己把握巨大的靈活性。他可以在不改變數(shù)據(jù)模型的前提下輕易地操縱數(shù)據(jù)以適應(yīng)對(duì)象模型。甚至,開發(fā)者還可以通過數(shù)據(jù)庫內(nèi)建的函數(shù)和存儲(chǔ)過程引入多表和結(jié)果集??傊?#xff0c;他們可以隨心所欲地利用SQL的強(qiáng)大能力。
iBATIS使用一個(gè)簡(jiǎn)單的XML描述文件來映射SQL語句的輸入和輸出。代碼清單2-1給出了一個(gè)這樣的例子。
[img]http://qingfeng825.iteye.com/upload/picture/pic/10998/a1207e30-46ce-3944-b461-db7b851db237.gif[/img]
代碼清單2-1 一個(gè)SQL映射的例子
從以上代碼中我們看到了一條SELECT語句,它返回address表中的數(shù)據(jù)。從<select>元素的parameterClass屬性中我們可以看出該語句使用一個(gè)Integer對(duì)象作為參數(shù),該參數(shù)是通過WHERE子句中的#id#符號(hào)標(biāo)記的;從<select>元素的resultClass屬性我們還可以看出該語句的結(jié)果是一個(gè)Address類的實(shí)例,假設(shè)Address類的所有字段名與SELECT語句中指定的各個(gè)列的別名(通過as關(guān)鍵字)相同。例如,ADR_ID列別名為id,故會(huì)映射到Address類中名為id的字段上。不論你是否相信,要映射一個(gè)SQL語句使其接受一個(gè)Integer作為參數(shù)并返回一個(gè)Address對(duì)象作為結(jié)果,你要做的就是這些了。用于執(zhí)行以上語句的Java代碼如下:
Address address = (Address) sqlMap.queryForObject("getAddress",
new Integer(5));
SQL映射這個(gè)概念具有很好的可移植性,可應(yīng)用于任何一個(gè)功能完備的編程語言。例如,基于iBATIS.NET的C#代碼就與之前的Java代碼幾乎是一模一樣的:
Address address = (Address) sqlMap.QueryForObject("getAddress", 5);
當(dāng)然,iBATIS針對(duì)SQL映射還有許多高級(jí)選項(xiàng),特別是針對(duì)映射的返回結(jié)果。
三、配置iBATIS
最簡(jiǎn)單的iBATIS應(yīng)用中的SQL映射配
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>
<property name="JDBC.Username" value="root"/>
<property name="JDBC.Password" value="blah"/>
</dataSource>
</transactionManager>
<sqlMap resource="SqlMap.xml"/>
</sqlMapConfig>
由于這是一個(gè)XML文件,我們需要提供doctype和DTD用于驗(yàn)證(1)。SIMPLE是一個(gè)iBATIS內(nèi)置事務(wù)處理器的別名(2)。我們需要為這個(gè)事務(wù)處理器提供JDBC驅(qū)動(dòng)的名稱、JDBC URL、以及允許你連接到數(shù)據(jù)庫的用戶名(username)和密碼(password)。然后你將提供你的SQL映射文件(3)。
四、執(zhí)行SQL語句
String resource="SqlMapConfig.xml";
Reader reader=Resouces.getResouceAsReader(resource);
SqlMapClient sqlMap=SqlMapClentBuilder.builderSqlMapClient(reader);
List list=sqlMap.queryForList("getAllUsers","EMPLOYEE");
五、iBatis配置文件有了,指定的連接的數(shù)據(jù)庫URL,用戶名,密碼,指定的映射文件的地址;映射文件也說明了;怎么執(zhí)行SQL語句也有了;接下就少怎么構(gòu)造應(yīng)用了,很簡(jiǎn)單,只需
在classpath上添加兩個(gè)JAR文件:ibatis-common-2.jar和ibatis-sqlmap-2.jar
iBatis是又一個(gè)O/R Mapping解決方案,j2ee的O/R方案真是多,和Hibernate相比,iBatis最大的特點(diǎn)就是小巧,上手很快。如果你不需要太多復(fù)雜的功能,iBatis是能滿足你的要求又足夠靈活的最簡(jiǎn)單的解決方案。
iBatis簡(jiǎn)單靈活,上手容易,代碼很少,配置稍嫌復(fù)雜。不足之處一是沒有方便的工具來自動(dòng)生成xml配置文件,二是不管是query還是insert都只能傳入一個(gè)參數(shù),有時(shí)不得不把兩個(gè)參數(shù)包裝成一個(gè)類傳進(jìn)去。另外對(duì)常見的1:1,1:N關(guān)系的支持不如Hibernate。不過,大多數(shù)時(shí)候iBatis已經(jīng)完全可以滿足我們的需求。Spring很好的集成了iBatis,你可以參考Spring的JPetStore示例。需要注意的是使用iBatis 2.0和1.0有較大區(qū)別,主要體現(xiàn)在配置文件上,iBatis 2.0新增了DAO框架,不需要Spring提供的DAO也能很方便地實(shí)現(xiàn)DAO模式。
iBATIS與普通的OO/RM的不同:它不是直接把類映射為數(shù)據(jù)庫表或者說把類的字段映射為數(shù)據(jù)庫列,而是把SQL語句的參數(shù)與結(jié)果(也即輸入和輸出)映射為類。正如你在本書的剩余部分中將會(huì)學(xué)到的,iBATIS在類和數(shù)據(jù)庫表之間建立了一個(gè)額外的間接層,這就為如何在類和數(shù)據(jù)庫表之間建立映射關(guān)系帶來了更大的靈活性,使得在不用改變數(shù)據(jù)模型或者對(duì)象模型的情況下改變它們的映射關(guān)系成為可能。其實(shí)我們這里討論的這個(gè)間接層就是SQL。SQL這個(gè)額外的間接層使得iBATIS能夠更好地隔離數(shù)據(jù)庫設(shè)計(jì)和應(yīng)用中使用的對(duì)象模型。這就使得它們兩者之間的相關(guān)性能夠降至最少。圖2-2展示了iBATIS如何使用SQL映射數(shù)據(jù)。
[img]http://qingfeng825.iteye.com/upload/picture/pic/10994/b2621326-84c2-3aee-bd32-946fb5fe0881.gif [/img]
正如你在上圖中所看到的,iBATIS的映射層其實(shí)就是SQL。iBATIS讓你自己寫SQL語句,iBATIS負(fù)責(zé)在類的字段和數(shù)據(jù)庫表的列之間映射參數(shù)和結(jié)果?;谶@個(gè)原因,也考慮到與其他各種各樣的映射方式的區(qū)分,為避免混淆,iBATIS小組通常將所謂的“數(shù)據(jù)映射器”稱為SQL映射器(SQL mapper)
二、映射SQL語句
任何一條SQL語句都可以看作是一個(gè)函數(shù),有輸入輸出集合。輸入即參數(shù)(parameter),通??梢栽赟QL語句的WHERE子句中找到。輸出則是SELECT子句中指定的那些列。圖2-3描述了這個(gè)思想。
[img]http://qingfeng825.iteye.com/upload/picture/pic/10994/b2621326-84c2-3aee-bd32-946fb5fe0881.gif[/img]
圖2-3 SQL語句可以被看作一個(gè)包含輸入輸出的函數(shù)
這種方式的最大優(yōu)點(diǎn)就在于SQL語句使得開發(fā)者能夠自己把握巨大的靈活性。他可以在不改變數(shù)據(jù)模型的前提下輕易地操縱數(shù)據(jù)以適應(yīng)對(duì)象模型。甚至,開發(fā)者還可以通過數(shù)據(jù)庫內(nèi)建的函數(shù)和存儲(chǔ)過程引入多表和結(jié)果集??傊?#xff0c;他們可以隨心所欲地利用SQL的強(qiáng)大能力。
iBATIS使用一個(gè)簡(jiǎn)單的XML描述文件來映射SQL語句的輸入和輸出。代碼清單2-1給出了一個(gè)這樣的例子。
[img]http://qingfeng825.iteye.com/upload/picture/pic/10998/a1207e30-46ce-3944-b461-db7b851db237.gif[/img]
代碼清單2-1 一個(gè)SQL映射的例子
從以上代碼中我們看到了一條SELECT語句,它返回address表中的數(shù)據(jù)。從<select>元素的parameterClass屬性中我們可以看出該語句使用一個(gè)Integer對(duì)象作為參數(shù),該參數(shù)是通過WHERE子句中的#id#符號(hào)標(biāo)記的;從<select>元素的resultClass屬性我們還可以看出該語句的結(jié)果是一個(gè)Address類的實(shí)例,假設(shè)Address類的所有字段名與SELECT語句中指定的各個(gè)列的別名(通過as關(guān)鍵字)相同。例如,ADR_ID列別名為id,故會(huì)映射到Address類中名為id的字段上。不論你是否相信,要映射一個(gè)SQL語句使其接受一個(gè)Integer作為參數(shù)并返回一個(gè)Address對(duì)象作為結(jié)果,你要做的就是這些了。用于執(zhí)行以上語句的Java代碼如下:
Address address = (Address) sqlMap.queryForObject("getAddress",
new Integer(5));
SQL映射這個(gè)概念具有很好的可移植性,可應(yīng)用于任何一個(gè)功能完備的編程語言。例如,基于iBATIS.NET的C#代碼就與之前的Java代碼幾乎是一模一樣的:
Address address = (Address) sqlMap.QueryForObject("getAddress", 5);
當(dāng)然,iBATIS針對(duì)SQL映射還有許多高級(jí)選項(xiàng),特別是針對(duì)映射的返回結(jié)果。
三、配置iBATIS
最簡(jiǎn)單的iBATIS應(yīng)用中的SQL映射配
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig PUBLIC "-//ibatis.apache.org//DTD SQL Map Config 2.0//EN" "http://ibatis.apache.org/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<transactionManager type="JDBC">
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="com.mysql.jdbc.Driver"/>
<property name="JDBC.Username" value="root"/>
<property name="JDBC.Password" value="blah"/>
</dataSource>
</transactionManager>
<sqlMap resource="SqlMap.xml"/>
</sqlMapConfig>
由于這是一個(gè)XML文件,我們需要提供doctype和DTD用于驗(yàn)證(1)。SIMPLE是一個(gè)iBATIS內(nèi)置事務(wù)處理器的別名(2)。我們需要為這個(gè)事務(wù)處理器提供JDBC驅(qū)動(dòng)的名稱、JDBC URL、以及允許你連接到數(shù)據(jù)庫的用戶名(username)和密碼(password)。然后你將提供你的SQL映射文件(3)。
四、執(zhí)行SQL語句
String resource="SqlMapConfig.xml";
Reader reader=Resouces.getResouceAsReader(resource);
SqlMapClient sqlMap=SqlMapClentBuilder.builderSqlMapClient(reader);
List list=sqlMap.queryForList("getAllUsers","EMPLOYEE");
五、iBatis配置文件有了,指定的連接的數(shù)據(jù)庫URL,用戶名,密碼,指定的映射文件的地址;映射文件也說明了;怎么執(zhí)行SQL語句也有了;接下就少怎么構(gòu)造應(yīng)用了,很簡(jiǎn)單,只需
在classpath上添加兩個(gè)JAR文件:ibatis-common-2.jar和ibatis-sqlmap-2.jar
總結(jié)
以上是生活随笔為你收集整理的iBatis学习第一天的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Oracle Discover产品简介
- 下一篇: 内置的struts Action 类--