相對hibernate等orm實現而言,ibatis的對映配置更為簡潔直接,以下是乙個典型的配置檔案。
<?xml version="1.0" encoding="utf-8"?>
insert into user values(#id#,#name#,#age#)
update user set name = #name# where id = #id#
能夠看到,對映檔案主要分為兩個部分:模組配置和statement配置
一、模組配置包含:
typealias節點:
定義了本對映檔案裡的別名,以避免過長變數值的反覆書寫,此例中通過typealias節點為類"com.itmyhome.user"定義了乙個別
名"user",這樣在本配置檔案的其它部分,須要引用"com.itmyhome.user"類時,僅僅需以其別名替代就可以。
cachemodel節點
定義了本對映檔案裡使用的cache機制
這裡宣告了乙個名為"usercache"的cachemodel,之後能夠在statement宣告中對其進行引用
這表明對通過id為"getuser"的select statement獲取的資料,使用cachemodel"usercache"進行快取。
之後假設程式再次用此statement進行資料查詢,即直接從快取中讀取查詢結果,而無需再去資料庫查詢。
cachemodel主要有以下幾個配置點:
flushinterval:設定快取有效期,假設超過此設定值,則將此cachemodel的快取清空。
size:本cachemodel中最大容納的資料物件數量。
flushonexecute:指定執行特定statement時,將快取清空。如updateuser操將更
新資料庫中的使用者資訊,這將導致快取中的資料物件與資料庫中的實際
資料發生偏差,因此必須將快取清空以避免髒資料的出現。
二、statement配置
statement配置包含了數個與sql statement相關的節點,分別為:
1)statement
2)insert
3)delete
4)update
5)select
6)procedure
當中,statement最為通用,它能夠替代其餘的全部節點。除statement之外的節點各自相應了sql中的
同名操作(procedure相應儲存過程).使用statement定義全部操作固然能夠達成目標,但缺乏直觀性,
建議在實際開發中依據操作目的,各自選用相應的節點名加以申明.一方面,使得配置檔案
更加直觀,還有一方面,也可借助dtd對節點申明進行更有針對性的檢查,以避免配置上的失誤。
基本的配置項例如以下:
select * from user where id = #id#
insert into user values(#id#,#name#,#age#)
update user set name = #name# where id = #id#
delete user where id = #id#
引數
描寫敘述
parameterclass
引數類.指定了引數的完整類名(包含包路徑).
可通過別名避免每次反覆書寫冗長的類名.
resultclass
結果類.指定結果型別的完整類名(包含包路徑)
可通過別名避免每次反覆書寫冗長的類名.
parametermap
引數對映,需結合parametermap節點對對映關係加以定義.
對於儲存過程之外的statement而言,建議使用
parameterclass作為引數配置方式,一方面避免了
引數對映配置工,還有一方面其效能表現也更加出色。
resultmap
結果對映,需結合resultmap節點對對映關係加以定義。
cachemodel
statement相應的cache模組。
對於引數定義而言,盡量使用parameterclass,即直接將pojo作為statement的呼叫引數,
這樣在sql中能夠直接將pojo的屬性作為引數加以設定,如:
alter table user set name = #name# where id = #id#
這裡將com.itmyhome.user類設定為updateuser的引數之後,我們就可以在sql中通過#name#
對pojo的屬性進行引用。例如以下:
set name = #name# where id = #id#
執行期,ibatis將通過呼叫user物件的getname,getid方法獲得相應的引數值,並將其作為sql的引數。
假設parameterclass中設定的是jdk的中的簡單物件型別,如string、integer,ibatis會直接將其作為sql中的引數值。
我們也能夠將包含了引數資料的map物件傳遞給statement如:
update user set name = #name# where id = #id#
mapmap = new hashmap();
map.put("id", "1");
map.put("name", "hello");
sqlmap.update("updateuser",map);
這裡傳入的引數就是乙個map物件,ibatis將以key "id"、"name"從中提取相應的引數值
在sql中設定引數名時,能夠同一時候指定引數型別,如:
update user set name = #name:varchar# where id = #id:numberic#
ibatis實戰之內聯結果對映
ibatis實戰之內聯結果對映 面blog,我們給出的示例中都沒有定義任何結果對映 result map 但確實定義了結果類 result class 這種方式所以可行是因為ibatis的自動結果對映機制,該機制會在對映語句第一次被執行時,迅速地自動建立乙個結果對映,然後將它應用於這條已對映語句。可...
ibatis 動態對映
在複雜查詢過程中,我們常常需要根據使用者的選擇決定查詢條件,這裡發生變化的並不只是sql 中的引數,包括select 語句中所包括的字段和限定條件,都可能發生變化。典型情況,如在乙個複雜的組合查詢頁面,我們必須根據使用者的選擇和輸入決定查詢的條件組合。乙個典型的頁面如下 對於這個組合查詢頁面,根據使...
ibatis 動態對映
在複雜查詢過程中,我們常常需要根據使用者的選擇決定查詢條件,這裡發生變化的並不只是sql 中的引數,包括select 語句中所包括的字段和限定條件,都可能發生變化。典型情況,如在乙個複雜的組合查詢頁面,我們必須根據使用者的選擇和輸入決定查詢的條件組合。乙個典型的頁面如下 對於這個組合查詢頁面,根據使...