1.總體描述
以Eclipse為例說明ibatis用法,資料庫為MSSQL2000,ibatis版本為2.0, jDK1.5, 以對一個使用者資訊表 user_info的插入、查詢(單條記錄),多記錄查詢為例說明itatis的用法。
說明:
本文适合初次接觸ibatis的讀者。
文章中如有不妥之處,歡迎指正。
如國引用,請說明出處,謝謝。
2. 準備工作
<!--[if !supportLists]-->1. <!--[endif]-->安裝Eclipse 3.0.1
<!--[if !supportLists]-->2. <!--[endif]-->安裝jdk1.5
<!--[if !supportLists]-->3. <!--[endif]-->下載下傳 ibatis 2.0 開發包http://www.ibatis.com/
<!--[if !supportLists]-->4. <!--[endif]-->下載下傳MS SQL 的JDBC驅動包, MSJDBC3.0SP3
<!--[if !supportLists]-->5. <!--[endif]-->下載下傳日志操作包 commons-logging.jar
3.開發步驟
<!--[if !supportLists]-->1. <!--[endif]-->建立J2EE工程 test
<!--[if !supportLists]-->2. <!--[endif]-->在test下建立包 cjs
<!--[if !supportLists]-->3. <!--[endif]-->建立檔案夾 sqlmap
<!--[if !supportLists]-->4. <!--[endif]-->建立檔案夾 sqlmap.map
<!--[if !supportLists]-->5. <!--[endif]-->在sqlmap.map 下建立三個檔案:
SqlMapConfigExample.properties
sql-map-config.xml
user.xml
檔案内容如下:
SqlMapConfigExample.properties
-----------------------------------------------------------------------------------------------------------
driver=com.microsoft.jdbc.sqlserver.SQLServerDriver
url=jdbc:microsoft:sqlserver://localhost:1433;
DatabaseName=java
username=sa
password=tn
-----------------------------------------------------------------------------------------------------------
sql-map-config.xml
-----------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMapConfig
PUBLIC "-//iBATIS.com//DTD SQL Map Config 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-config-2.dtd">
<sqlMapConfig>
<properties
resource="sqlmap/map/SqlMapConfigExample.properties" />
<settings
cacheModelsEnabled="true"
enhancementEnabled="true"
lazyLoadingEnabled="true"
maxRequests="32"
maxSessions="10"
maxTransactions="5"
useStatementNamespaces="false" />
<transactionManager type="JDBC" >
<dataSource type="SIMPLE">
<property name="JDBC.Driver" value="${driver}"/>
<property name="JDBC.ConnectionURL" value="${url}"/>
<property name="JDBC.Username" value="${username}"/>
<property name="JDBC.Password" value="${password}"/>
</dataSource>
</transactionManager>
<sqlMap resource="sqlmap/map/User.xml" />
</sqlMapConfig>
-----------------------------------------------------------------------------------------------------------
user.xml
-----------------------------------------------------------------------------------------------------------
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE sqlMap
PUBLIC "-//iBATIS.com//DTD SQL Map 2.0//EN"
"http://www.ibatis.com/dtd/sql-map-2.dtd">
<sqlMap namespace="User">
<select id="getUser" parameterClass="java.lang.Integer"
resultClass="cjs.User">
SELECT * FROM user_info WHERE uid=#uid#
</select>
<select id="getAllUser" resultClass="cjs.User">
select
*from user_info
wherename = #value#
</select>
<insertid="insertUser" parameterClass="cjs.User">
INSERTINTO
user_info(name, sex, age, addr,zipcode)
VALUES (#name#, #sex#, #age#,#addr#, #zipcode#)
</insert>
</sqlMap>
-----------------------------------------------------------------------------------------------------
<!--[if !supportLists]-->6. <!--[endif]-->在test上右鍵,點選導入,将
commonslogging.jar
ibatis-common-2.jar
ibatis-dao-2.jar
ibatis-sqlmap-2.jar
msbase.jar
mssqlserver.jar
msutil.jar
導入到Lib檔案夾中
<!--[if !supportLists]-->7. <!--[endif]-->在項目-》屬性-》建構路徑中添加外部 jar的引用, 也就是上面幾個 jar
<!--[if !supportLists]-->8. <!--[endif]-->建立一個資料庫 java,并執行下面腳本
Table.sql
-----------------------------------------------------------------------------------------------------
CREATE TABLE user_info
(
uid int identity(1,1) primary key,
name varchar(20),
sex int,
age int,
addr varchar(50),
zipcode varchar(6),
);
-----------------------------------------------------------------------------------------------------
<!--[if !supportLists]-->9. <!--[endif]-->在cjs包下面編寫類
Myapp.java
Operates.java
User.java
内容如下:
Myapp.java
-----------------------------------------------------------------------------------------------------------
package cjs;
importjava.io.Reader;
importcom.ibatis.common.resources.Resources;
importcom.ibatis.sqlmap.client.SqlMapClient;
importcom.ibatis.sqlmap.client.SqlMapClientBuilder;
public classMyapp {
private static final SqlMapClient sqlMap;
static {
try {
String resource ="sqlmap/map/sql-map-config.xml";
Reader reader =Resources.getResourceAsReader (resource);
sqlMap = SqlMapClientBuilder.buildSqlMapClient(reader);
}
catch (Exception e) {
e.printStackTrace();
throw new RuntimeException ("Errorinitializing MyApp class. Cause:"+e);
}
}
public static SqlMapClientgetSqlMapInstance () {
return sqlMap;
}
一、ibatis教程之ibatis介紹:
ibatis是什麼呢?相對于hibernate和apache ojb等“一站式”orm解決方案而言,ibatis是一種“半自動化”的orm實作。
這個架構将讓你能夠更好的在java應用中設計和實作實體層。這個架構有兩個主要的組成部分,一個是sql maps,另一個是data access objects。另外還包括一些可能很有用的工具。
sql maps:
sql maps是這個架構中最激動人心的部分,它是整個ibatis database layer的核心價值所在。通過使用sql maps你可以顯著的節約資料庫操作的代碼量。sql maps使用一個簡單的xml檔案來實作從javabean到sql statements的映射。跟其他的架構或者對象映射工具相比,sql maps最大的優勢是簡單。它需要學習的東西很少,在連接配接表或複雜查詢時也不需要複雜的scheme(怎麼翻complex scheme?),使用sql maps, 你可以自由的使用sql語句。
data access objects (dao)
當我們開發靈活的java應用時,有一個好主意就是通過一個通用api層把實體操作的細節封裝起來。data access objects允許你通過一個簡單接口的來操作資料,進而隐藏了實作的細節。使用dao,你可以動态配置你的應用程式來通路不同的實體存儲機制。如果你有 一個複雜的應用需要用到幾個不同的資料庫,dao可以讓你建立一個一緻的api,讓系統的其他部分來調用。
utilities
ibatis database layer包含一系列的有用的工具,比如simpledatasource,jdbc datasource 2.0(也包括3.0)的一個輕量級實作。scriptrunner也提供了從單元測試到自動釋出的資料庫準備工作。
工作流程:
sql maps提供一個簡單的架構,通過xml描述來映射javabeans,map implementations甚至原始類型的包裝(string,integer等)到jdbc preparedstatement。想法很簡單,基本的步驟如下:
1) 提供一個對象作為參數(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) 執行這個映射的statement,這一步是魔術發生的地方。sql maps架構将建立一個preparedstatement執行個體(instance),使用前面提供的對象的參數,執行statement,然後從resultset中建立一個傳回對象。
3) 如果是update,則傳回有多少行修改了,如果是查詢,則傳回一個對象或者對象的集合。跟參數一樣,傳回對象也可以是一個javabean,map或者一個primitive type wrapper。
二、ibatis教程之配置檔案的使用:
sql map的配置檔案。這個檔案是sql map實作的根配置,這不是本總結所要具體描述的。
配置檔案是xml檔案,我們用它來配置屬性,jdbc datasources 和 sql maps。它給我們一個便利的地方可以集中配置不同的datasource。這個架構支援ibatis simpledatasource, jakarta dbcp (commons),以及其他任何可以通過jndi context來通路的datasource。我們在以後将詳細讨論這個問題。現在我們用jakarta dbcp,結構很簡單,上面這個例子,它的配置檔案如下。
<properties>元素:
這sql map中的<properties>元素支援sql map xml配置檔案。配置檔案裡的元素符合data map規則。
<properties>所應用的檔案裡的元素必須和<datasource>裡的元素相對應。下面是sqlmapconfigexample.properties檔案的内容。裡面的元素和<datasource>裡的元素相對應。
<settings>元素
maxrequests:在同一時間内能執行sql語句的次數
maxsession:在同一時間内能起作用的session數
maxtransaction:在同一時間内能執行的事務。
statementcachesize:緩沖區的大小
三、ibatis教程之操作方法介紹:
注意:本總結适合有使用開發ibatis基礎的人員參考。由于本人的能力有限,不足之處請大家指出。
1. statement支援元素及支援的屬性:
1.1 id
id屬性是必須的,它表示這個語句的名稱,它在整個<sqlmap>元素内唯一的。在代碼通過id來引用相關語句。
1.2 parametermap
parametermap屬性定義了一個有序的值清單,分别有序的對應了标準參數化的sql語句中的?占位符。
1.3 parameterclass
在沒有指明parametermap屬性的情況下,你可以指定parameterclass屬性方法來替代parametermap屬性。parameterclass屬性的值可以使用類型的别名或者類型(類)全稱
1.4 resultmap
resultmap可以讓你控制你如何讓資料從查詢結果(resultmap)中提取出來存入java對象中。并且可以定義如何将字段映射到java bean的屬性裡。如下圖:
1.5 resultclass
在resultmap屬性沒有指定的情況下,可以采用resultclass方式,resultclass的屬性值可采用類型别名或者類型(class)全稱的方式。指定的類将根據資料庫的中繼資料自動的映射到查詢結果的字段值中。
2. parametermap元素屬性
2.1 id
id屬性是必須的,它提供了<parametermap>對元素data map裡的唯一表示符
2.2 class
class屬性是可選的,class屬性必須是javabean或map實列,class屬
性雖是可選的,但推薦大家指定,class屬性 可以用來驗證傳入的參數的合法性及優化查詢
3. 查詢語句
3.1 屏蔽特殊符 <![cdata[ ]]>
3.2 語句導入 <include>,可以是語句優化
使用<include>方法,上面的語句可以寫成:
4.自增長方法:<selectkey resultclass=”int”>,不管<selectkey resultclass=”int”>處于該語句的什麼部位,都先執行此自增長方法。注意:mysql和oracle的方法不一樣。
5. <insert>方法:
insert方法使用parametermap屬性,字段名要和<parametermap>方法裡的元素一一對應
6. <resultclass>屬性:
使用resultclass方法,類person裡必須id,firstname,lastname,birthdate,werghtkilograms,heightmeters這些屬性。
7. 使用xmlresultname:xml映射檔案
8. 使用<parametermap>方法:用來設定元素的屬性,其中nullvalue表示預設值
9. 如果傳入的參數隻有一個,用#value#來替代傳入的參數名。如果還傳來的是字段名,則ibatis不支援
10. 判斷傳入的參數是否存在:isnotnull,判斷傳入的參數值是否大于設定的值:isgreaterthan
11. 判斷傳入的參數是否為空:isempty和isnotemply
12. 如果進行模糊查詢,使用like方法
那麼ibatis教程的入門部分就向你介紹到這裡,希望上述的介紹使你對ibatis有了一定的認識。
本貼來自天極網群樂社群--file:///F:/Data/Ibatis/HT-Data/ibatis/iBATIS教程之入門淺析_%20Java.mht