mybatis中mapper配置詳解

2021-09-11 20:38:20 字數 2571 閱讀 8107

mybatis 的真正強大在於它的對映語句,也是它的魔力所在。由於它的異常強大,對映器的 xml 檔案就顯得相對簡單。如果拿它跟具有相同功能的 jdbc **進行對比,你會立即發現省掉了將近 95% 的**。mybatis 就是針對 sql 構建的,並且比普通的方法做的更好。

1、select(查詢)

查詢語句是 mybatis 中最常用的元素之一,光能把資料存到資料庫中價值並不大,如果還能重新取出來才有用,多數應用也都是查詢比修改要頻繁。對每個插入、更新或刪除操作,通常對應多個查詢操作。這是 mybatis 的基本原則之一,也是將焦點和努力放到查詢和結果對映的原因。簡單查詢的 select 元素是非常簡單的。比如:

select * from person where id = # 

這個語句被稱作 selectperson,接受乙個 int(或 integer)型別的引數,並返回乙個 hashmap 型別的物件,其中的鍵是列名,值便是結果行中的對應值。

注意引數符號: #

這就告訴 mybatis 建立乙個預處理語句引數,通過 jdbc,這樣的乙個引數在 sql 中會由乙個"?"來標識,並被傳遞到乙個新的預處理語句中,就像這樣:

string selectperson = "select * from person where id=?"; 

preparedstatement ps = conn.preparestatement(selectperson);

ps.setint(1,id);

當然,這需要很多單獨的 jdbc 的**來提取結果並將它們對映到物件例項中,這就是 mybatis 節省你時間的地方。

select 元素有很多屬性允許你配置,來決定每條語句的作用細節:

這個元素可以被用來定義可重用的 sql **段,可以包含在其他語句中。它可以被靜態地(在載入引數) 引數化. 不同的屬性值通過包含的例項變化.,比如:

$.id,$.username,$.password
這個 sql 片段可以被包含在其他語句中,例如:

select 

,

from some_table t1

cross join some_table t2

屬性值可以用於包含的refid屬性或者包含的字句裡面的屬性值,例如:

$table 

from

select

field1, field2, field3

3、引數(parameters)

前面的所有語句中你所見到的都是簡單引數的例子,實際上引數是 mybatis 非常強大的元素,對於簡單的做法,大概 90% 的情況引數都很少,比如:

select id, username, password 

from users

where id = #

上面的這個示例說明了乙個非常簡單的命名引數對映。引數型別被設定為 int,這樣這個引數就可以被設定成任何內容。原生的型別或簡單資料型別(比如整型和字串)因為沒有相關屬性,它會完全用引數值來替代。然而,如果傳入乙個複雜的物件,行為就會有一點不同了。比如:

insert into users (id, username, password) 

values (#, #, #)

如果 user 型別的引數物件傳遞到了語句中,id、username 和 password 屬性將會被查詢,然後將它們的值傳入預處理語句的引數中。

4、多引數傳遞

mybatis中的對映語句有乙個parametertype屬性來制定輸入引數的型別。如果我們想給對映語句傳入多個引數的話,我們可以將所有的輸入引數放到hashmap中,將hashmap傳遞給對映語句。mybatis 還提供了另外一種傳遞多個輸入引數給對映語句的方法。假設我們想通過給定的name和email資訊查詢學生資訊,定義查詢介面如下:

mybatis 支援將多個輸入引數傳遞給對映語句,並以#的語法形式引用它們:

select stud_id, name,email, phone from students 

where name=# and email=#

這裡#引用第乙個引數name,而#引用了第二個引數email

還可以使用 @param 註解來給引數命名,定義查詢介面如下:

mybatis 配置檔案可以直接使用命名的引數,如下配置:

select stud_id, name,email, phone from students 

where name=# and email=#

mybatis中的mapper例項化

很多人用過mybatis,或者使用過springdata,那麼和傳統的jdbc相比,差別在 呢?傳統的dao層,介面需要有實現,需要連線發出sql,需要接收返回值,但是mybatis只需要實現介面,而不需要實現類,而且神奇的是,可以通過spring的註解,直接把介面的實現物件給取出,大家都知道,介面...

Mybatis中為Mapper中傳入多個值

1.通過順序 select from user where name and dept 在 中的數字代表了傳遞引數的順序,一般不建議使用 2.通過 param public user selecttest param username string name,param deptid int dep...

Mybatis在mapper中如何傳遞多個引數

第1種 使用佔位符的思想,在對映檔案中使用 代表傳遞進來的第幾個引數。使用 param註解 來命名引數 對應的xml,代表接收的是dao層中的第乙個引數,代表dao層中第二引數,更多引數一致往後加即可。select from user where user name and user passwor...