参数命名
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]}