~~~
1.当传递的参数只有一个的时候,mybatis不会做特殊处理。
2.当传递多个参数的时候,mybatis会封装一个Map,当前map的key 默认是param1...paramN,取的时候使用key拿到value,也可以通过索引。可以在接口方法中使用@Param注解来直接封装map的key...如果多个参数的话推荐传入POJO,通过#{属性名}来取出。也可以直接在接口声明位置传入一个map集合。如果经常使用可以创建一个TO对象,封装数据信息。(transfer object)
public Employee getEmp(@Param("id")Integer id,String lastName);
取值:id==>#{id/param1/0} lastName==>#{param2/1}
public Employee getEmp(Integer id,@Param("e")Employee emp);
取值:id==>#{param1/0} lastName===>#{param2.lastName/e.lastName/1}
##特别注意:如果是Collection(List、Set)类型或者是数组,
也会特殊处理。也是把传入的list或者数组封装在map中。
key:Collection(collection),如果是List还可以使用这个key(list)
数组(array)
public Employee getEmpById(List ids);
取值:取出第一个id的值: #{list[0]}
~~~
通俗讲四种方法
一:
~~~
select * from
employee where name=#{0} and gender=#{1};
~~~
二:
~~~
where name=#{param1} and gender=#{param2};
~~~
三:
~~~
employee where name=#{name} and gender=#{gender};
//@Param是在传递多个参数的时候,指定map集合中这个key的封装规则
Employee selEmpByNameAndGender(@Param("name") String name,@Param("gender") char gender);
~~~
四:
~~~
Employee selEmpByMap(Map map);
employee where
name=#{aa} and gender=#{bb};
EmployeeDao employeeDao=sqlSession.getMapper(EmployeeDao.class);
Map map=new HashMap<>();
map.put("aa", "周杰伦");
map.put("bb", '1');
Employee emp=employeeDao.selEmpByMap(map);
~~~