ibatis實戰之OR對映

2021-09-06 18:21:42 字數 3313 閱讀 6006

相對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 語句中所包括的字段和限定條件,都可能發生變化。典型情況,如在乙個複雜的組合查詢頁面,我們必須根據使用者的選擇和輸入決定查詢的條件組合。乙個典型的頁面如下 對於這個組合查詢頁面,根據使...