单个参数 mybatis不会做特殊处理
#{参数名}: 取出参数值.
多个参数 myabtis会做特殊处理
多个参数会被封装成一个map
key: arg0, arg1, param1, param2...
value: 传入的参数值
#{}就是从map中获取指定的key的值
异常:
org.apache.ibatis.exceptions.PersistenceException:
### Error querying database. Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [arg1, arg0, param1, param2]
### Cause: org.apache.ibatis.binding.BindingException: Parameter 'id' not found. Available parameters are [arg1, arg0, param1, param2]
操作:
方法:public Employee getEmployeeByIdAndLastNmae(Integer id, String lastName);
取值:
<select id="getEmployeeByIdAndLastNmae" resultType="com.ll.mybatis.entity.Employee">
select id, last_name, email, gender
from tbl_employee
where id = #{id} and last_name=#{lastName}
</select>
多个参数推荐使用以下方式:
1命名参数: 明确指定封装参数时map的key:
public Employee getEmployeeByIdAndLastNmae(@Param("id") Integer id, @Param("lastName") String lastName);
2.POJO:
如果多个参数正好是我们业务逻辑的数据模型,我们就可以直接传入pojo(Employee类的对象)
#{属性名}: 取出传入的pojo的属性值
3.map:
如果多个参数不是业务模型中的数据,不经常使用,没有对应的pojo,为了方便,我们也可以传入map
public Employee getEmployeeByIdAndLastNmae(Map<String, Object> map);
#{
key}: 取出map中对应的值
4.TO:
如果多个参数不是业务模型中的数据,但是经常使用,推荐来编写一个TO(Transfer Object)数据传输对象
练习
public Employee getEmp(@param("id") Inte