單個引數:mybatis不會做特殊處理,
#:取出引數值。
多個引數:mybatis會做特殊處理。
多個引數會被封裝成 乙個map,
key:param1...paramn,或者引數的索引也可以
value:傳入的引數值
#{}就是從map中獲取指定的key的值;
命名引數:明確指定封裝引數時map的key;@param("id")
多個引數會被封裝成 乙個map,
key:使用@param註解指定的值
value:引數值
#取出對應的引數值
pojo:
如果多個引數正好是我們業務邏輯的資料模型,我們就可以直接傳入pojo;
#:取出傳入的pojo的屬性值
map:
如果多個引數不是業務模型中的資料,沒有對應的pojo,不經常使用,為了方便,我們也可以傳入map
#:取出map中對應的值
to:
如果多個引數不是業務模型中的資料,但是經常要使用,推薦來編寫乙個to(transfer object)資料傳輸物件
page
********************====思考******************************==
public employee getemp(@param("id")integer id,string lastname);
取值:id==># lastname==>#
public employee getemp(integer id,@param("e")employee emp);
取值:id==># lastname===>#
##特別注意:如果是collection(list、set)型別或者是陣列,
也會特殊處理。也是把傳入的list或者陣列封裝在map中。
key:collection(collection),如果是list還可以使用這個key(list)
陣列(array)
public employee getempbyid(listids);
取值:取出第乙個id的值: #
********************====結合原始碼,mybatis怎麼處理引數*************************=總結:引數多時會封裝map,為了不混亂,我們可以使用@param來指定封裝時使用的key;#就可以取出map中的值;
(@param("id")integer id,@param("lastname")string lastname);
paramnameresolver解析引數封裝map的;
//1、names:;構造器的時候就確定好了
確定流程:
1.獲取每個標了param註解的引數的@param的值:id,lastname; 賦值給name;
2.每次解析乙個引數給map中儲存資訊:(key:引數索引,value:name的值)
name的值:
標註了param註解:註解的值
沒有標註:
1.全域性配置:useactualparamname(jdk1.8):name=引數名
2.name=map.size();相當於當前元素的索引
args【1,"tom",'hello'】:
public
object getnamedparams(object args)
else
if (!hasparamannotation && paramcount == 1)
else
for (map.entryentry : names.entryset())
param.put(entry.getvalue(), args[entry.getkey()]);
//add generic param names (param1, param2, ...)param
//額外的將每乙個引數也儲存到map中,使用新的key:param1...paramn
//效果:有param註解可以#,或者#
final string genericparamname = generic_name_prefix + string.valueof(i + 1);
//ensure not to overwrite parameter named with @param
if (!names.containsvalue(genericparamname))
i++;
}return
param;
}}}
MyBatis 3 的批量刪除
目前專案組持久層用的是 mybatis 3 v 3.0.4 很多頁面涉及到批量刪除,查閱了一下mybatis 官方文件,文當中提到需要在mybatis 的實體配置檔案中配置乙個元素,就是該元素。下面給出文件中關於該元素的介紹 另外乙個動態sql通用的必要操作是迭代乙個集合,通常是構建在in條件中的。...
關於Mybatis3的更新操作
第一種 update users user name user addr where user id 第二種 update users set user name user addr where user id 個人認為有時候還是有需要將字段值設定為null的,比如清空日期字段。因此,針對只更新某一...
mybatis3原始碼2 查詢
查詢舉例 public class main finally defaultsqlsessionfactory override public sqlsession opensession private sqlsession opensessionfromdatasource executorty...