參數命名
POJO
如果多個參數,正好是業務邏輯的數據模型,那么我們就可以直接傳入POJO,這樣#{}中就可以直接使用屬性名
Map
如果多個參數不是業務邏輯的數據模型,沒有對應的POJO,為了方便,我們可以傳入一個map,此時#{key}就是取出map的值
在接口中創建一個新方法:
Employee getEmpByMap(Map<String,Object> map);
創建新的<select>標簽
-
<select id="getEmpByMap" resultType="com.figsprite.bean.Employee">
-
select id,last_name lastName,gender,email from tb_employee where id = #{id} and last_name = #{lastName}
-
</select>
然后我們再做測試
-
@Test
-
public void test7() throws IOException {
-
SqlSessionFactory sqlSessionFactory = getSqlSessionFactory();
-
SqlSession openSession = sqlSessionFactory.openSession();
-
try {
-
EmployeeMapper mapper = openSession.getMapper(EmployeeMapper.class);
-
Map<String,Object> map = new HashMap<>();
-
map.put("id",3);
-
map.put("lastName","Hello");
-
Employee e = mapper.getEmpByMap(map);
-
System.out.println(e);
-
}finally {
-
openSession.close();
-
}
-
}
TO
如果getEmpByMap方法調用頻率很高,每次調用都需要重新創建一個map,這樣的話,還是一件麻煩事,如果是這種情況,建議編寫一個TO(Transfer Object),比如我們在查找分頁記錄時,需要多項內容:
Page{
int index;
int size;
}
思考題:
public Employee getEmp(@Param("id") Integet id,String lastName)
取值:idè#{id/param1} lastNameè#{param2}
public Employee getEmp(Integer id,@Param("e") Employee emp)
取值:idè#{param1} lastNameè#{param2.lastName/e.lastName}
public Employee getEmpById(List<Integer> ids)
如果是Collection類型或者是數組,也會特殊處理,封裝在map,如果是Collection,那么key是Collection[i],如果是List,那么我們還可以使用list[i],至於數組,array[i]
取值:取第一個id值 idè#{list[0]}