1. 程式人生 > >傳參在mybatis的sql對映檔案中正確獲取

傳參在mybatis的sql對映檔案中正確獲取

 

1、單個引數:
非自定義物件
傳參:getStuById(Integer id);
取值:#{id}
單個基本型別引數,隨便取值都行;#{ok}
物件:
傳參:saveStudent(Student student)
取值:#{屬性名}

2、多個引數:
傳參:getStudentByLastNameAndAge(String lastName,Integer age)
取值:#{引數名}不好使;報錯提示可用的引數是[0,1,param1,param2]
可用的取值方式:
1)#{引數索引} #{0} #{1}
2)#{param引數第幾個} #{param1} #{param2}
原因:一但方法傳入了多個引數以後,mybatis會進行一個處理;把這些引數全部放在一個map中;
map中的key就是引數的索引,或者是param1...N

3、命名引數:我們可以使用@Param註解來指定mybatis在給多個引數封裝map的時候,這個引數使用的key;預設引數索引或者paramx
傳參:public Student getStudentByLastNameAndAge(@Param("lastName")String lastName,@Param("age")Integer age);
取值:#{命名的引數名}或者#{paramx}


什麼時候用基本型別傳參:不將引數封裝成pojo直接傳給mybatis;很少用到;
有些方法的引數是業務無關的;



4、POJO:我們這麼建議;如果我們傳遞的引數正好是業務邏輯定義的pojo,就用pojo;
傳參:saveStudent(Student student);
取值:#{屬性名}

5、Map(集合);
傳參:public Student getStuByLastNameAndAge(Map<String, Object> map);
取值:#{key}

不管傳什麼?如果單個引數,mybatis直接就拿來用,如果多個引數,mybatis會將多個引數封裝進一個map中,
封裝引數用的key預設是0,1,paramx。。。,我們可以使用@Param("key")為這個引數指定一個新的key

傳參: getStudent(@Param("stu")Student stu,@Param("map")Map<String,Object> hahamap,@Param("lastName")String lastName);
取值:
取值student物件中的age值:#{param1.age}===#{stu.age}
取值hahamap中的email:#{param2.email}===#{map.email}
取值lastName:#{param3}===#{lastName}

 

POJO,Map怎麼選擇?
業務邏輯中定義的POJO我們就使用它,有比較多臨時的引數,並不是某個javaBean的,可以為了方便將其封裝一個map傳遞。

TO:(Transfer Object)(專門用它來傳遞資料的)
POJO:(普通的java類)
DO:(Domain Object)物件模型
DTO:Data Transfer Object:資料傳輸物件
DAO:Data Access Object:資料訪問物件
VO:Value Object:值物件;

因為追求卓越,成功在不經意間追上了你