单个参数:mybatis不会做特殊处理,
#{参数名/任意名}:取出参数值。
在接口EmployeeMapper.java
中有
public Employee getEmpById(Integer id);
EmployeeMapper.xml
中用#{id}
取出参数值,因为只有一个,用任意名也可以
<select id="getEmpById" resultType="com.atguigu.mybatis.bean.Employee">
select * from tbl_employee where id = #{abcde}
</select>
多个参数:mybatis会做特殊处理。
我们在接口EmployeeMapper.java
中新加一个方法:
方法:public Employee getEmpByIdAndLastName(Integer id,String lastName);
取值方法:用#{id},#{lastName}
这种方式取出参数
<select id="getEmpByIdAndLastName" resultType="com.atguigu.mybatis.bean.Employee">
select * from tbl_employee where id = #{id} and last_name=#{lastName}
</select>
结果出异常了:
org.apache.ibatis.binding.BindingException:
Parameter 'id' not found.
Available parameters are [1, 0, param1, param2]
多个参数会被封装成 一个map
,
key
:param1...paramN
,或者参数的索引也可以.索引从零开始
value
:传入的参数值
#{}就是从map
中获取指定的key
的值;
所以我们的取值方法换成这样:用#{param1},#{param2}
这种方式取出参数
<select id="getEmpByIdAndLastName" resultType="com.atguigu.mybatis.bean.Employee">
select * from tbl_employee where id = #{param1} and last_name=#{param2}
</select>
这样子就可以正确查询了
但是这样太难看了,如果我们一定要用#{id},#{lastName}
这种方式取出参数呢?可以这样
【命名参数】:明确指定封装参数时map
的key
:@Param("id")
多个参数会被封装成 一个map
,
key
:使用@Param注解指定的值
value
:参数值
#{指定的key
}取出对应的参数值
public Employee getEmpByIdAndLastName(@Param("id")Integer id,@Param("lastName")String lastName);
这样就用#{id},#{lastName}
这种方式取出参数了
<select id="getEmpByIdAndLastName" resultType="com.atguigu.mybatis.bean.Employee">
select * from tbl_employee where id = #{id} and last_name=#{lastName}
</select>