1. 单个参数
<select id="getStudent" resultType="com.mybatis.student.Student">
select * from student where stu_id = #{id}
</select>
- mybatis不会做特殊处理
- 单个参数只要不为空都行
2. 多个参数
Java 代码
Map<String,Object> getStuByIdAndName( Integer id, String name);
映射配置
<select id="getStuByIdAndName" resultType="map">
SELECT * FROM student s WHERE s.stu_id = #{id} and s.stu_name = #{name}
</select>
- 多个参数时 mybatis 会将多个参数封装成一个map, 其中 key: param1…paramN 或索引, value: 传入的参数值.
- 如果是
Collection
类型或者是数组, mybatis 也会将其封装在Map
中. 其中Collection
类型的的key
是:collection
(List也可以使用list); 数组类型的key
为:array
- 直接使用参数名接收参数会出现异常:
org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [arg1, arg0, param1, param2]
解决方式:
1.注解方式
使用
@Param("id")
注解标记方法的参数
Map<String,Object> getStuByIdAndName(@Param("id") Integer id,@Param("name") String name);
<select id="getStuByIdAndName" resultType="map">
SELECT * FROM student s WHERE s.stu_id = #{id} and s.stu_name = #{name}
</select>
使用
@Param("id")
标记后就可以使用指定的参数名来接收参数
2.POJO 方式
传入一个 POJO 用其属性取值
例如:
Java代码
int count(Student student);
映射配置
<select id="count" resultType="int">
SELECT COUNT(*) FROM student s WHERE s.stu_id = #{stu_id}
</select>
- 在映射文件直接用 POJO 的属性值即可
3.Map 键值对
将要传入的参数封装成一个
Map
类型的传入
Map<String,Object> getStuByIdAndName(Map<String,Object> map);
- 取值时使用
#{key}
其中的key
为Map
中对应的key
示例:
Student getStudent(@Param("id") Integer id,String name)
取值: id —>#{id}/#{param1}
name —>#{param2}
Student getStudent(Integer id,@Param("stu") Student stu)
取值: id —>#{param1}
name —>#{stu.name}/#{param2.name}
Student getStudent(List<Integer> ids)
取值: 若取第一个值 :#{list[0]}