[mybatis]映射文件_参数处理
Posted 唐火
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了[mybatis]映射文件_参数处理相关的知识,希望对你有一定的参考价值。
参数处理
-
单个参数:mybatis不会做特殊处理
- #参数名:取出参数值
-
多个参数:mybatis会做特殊处理
- 多个参数会被封装成一个map
- key:param1…paramN,或者参数的索引
- value:传入的参数值
- #就是从map中获取指定的key的值;
- 多个参数会被封装成一个map
-
命名参数:明确指定封装参数时map的key:@Param(“id”)
- 多个参数会被封装成一个map
- key:使用@Param注解指定值
- value:参数值
- #指定的key取出对应的参数值
- 多个参数会被封装成一个map
-
pojo
- 如果多个参数正好是我们业务逻辑的数据模型,我们就可以直接传入pojo;
- #属性名:取出传入的pojo的属性值
-
如果多个参数不是业务模型中的数据,没有对应的pojo,为了方便,我们也可以传入map
- #key:取出map中对应的值
-
TO
- 如果多个参数不是业务模型中的数据,但是经常使用,推荐来编写一个TO(Transfer Object)数据传输对象
//TO
Page
int index;
int size;
public Employee getEmpByIdAndLastName(Integer id,String lastName);
<select id = "getEmpByIdAndLastName" resultType="com.atguigu.mybatis.bean.Employee">
select * from tb1_employee where id = #id and last_name = #lastName
</select>
Employee employee = mapper.getEmpByIdAndLastName(1, "Admin");
报错:
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]
正确写法:
<select id = "getEmpByIdAndLastName" resultType="com.atguigu.mybatis.bean.Employee">
select * from tb1_employee where id = #param1 and last_name = #param2
</select>
命名参数法:
public Employee getEmpByIdAndLastName(@Param("id") Integer id,@Param("lastName") String lastName);
<select id = "getEmpByIdAndLastName" resultType="com.atguigu.mybatis.bean.Employee">
select * from tb1_employee where id = #id and last_name = #lastName
</select>
map法:
public Employee getEmpByMap(Map<String ,Object> map);
<!--public Employee getEmpByMap(Map<String,Object> map);-->
<select id="getEmpByMap" resultType="com.atguigu.mybatis.bean.Employee">
select * from tb1_employee where id = #id and last_name = #lastName
</select>
Map<String,Object> map = new HashMap<>();
map.put("id",1);
map.put("lastName","Tom");
Employee employee = mapper.getEmpByMap(map);
扩展思考:
public Employee getEmp(@Param("id") Integer id,String lastName);
取值:
id -> #id/param1
lastName -> #param2
public Employee getEmp( Integer id,@Param("e") Employee emp);
取值:
id -> #param1
lastName -> #param2.lastName/e.lastName
- 特别注意:如果是Collection(List,Set)类型或者数组,也会特殊处理。也是把传入的list或者数组封装在map中
- key:Collection(collection),如果是List还可以使用这个key(list),数组(array)
public Employee getEmp(List<Integer> ids);
取值:
取出第一个id的值:
#list[0]
以上是关于[mybatis]映射文件_参数处理的主要内容,如果未能解决你的问题,请参考以下文章