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...