单个参数
mybatis不会做特殊处理 ,查询时名字是不影响的(sql语句中的参数名和接口中方法的参数名可以不同)
#{}:取出参数值
多个参数
mybatis 会做特殊处理;多个参数会被分装成一个map
key: param1….paramN,或者参数的索引也可以(0,1,2,,,,N)
value:传入的参数值
#{}就是从 map中获取指定的key的值
方法: Employee getEmpById(Integer id,String name);
映射文件中的sql:
错误的sql:select * from employee where id = #{id} and name = #{name}
正确的sql:select * from employee where id = #{param1} and name=#{param2}
大家可以试一下错误sql,看看是什么原因。
命名参数
明确指定封装参数时的map的key ;可以不需要使用param1,param2了。
@Param(“id”)
多个参数会被封装成一个map,
key:使用@param()注解指定的值
value:参数值
#{指定的key}取出对应的参数值
方法: Employee getEmpById(@Param(“id”)Integer id,@Param(“name”)String name);
映射文件中的sql:select * from employee where id = #{id} and name=#{name}
POJO
如果多个参数正好是我们业务逻辑的数据类型,我们就可以直接传入pojo;
#{属性名}:取出传入的pojo的属性值
Map
如果多个参数不是业务模型中 的数据,没有对应的pojo,为了方便,传入map
方法:public void getMap(Map(Stirng ,object) map);
#{key}: 取出map中对应的值
TO
如果多个参数不是业务模型中 的数据,但是经常使用,推荐编写一个TO(Transfer object) 数据传输对象
分页:
Page{
int index;
int size;
}
#特别注意:
如果是Collection(list,set)类型或者是数组,
即使是单一参数,也会被特殊处理,也是把传入的值封装在map中
如果是List ,那么就是#{list[0]}
方法:Employee getEmpById(List<Integer> ids);
取值:#{list[0]} (取出第一个id的值)
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/16878.html