Mybatis的几种传参方式详解
前言
- 前几天恰好面试一个应届生,问了一个很简单的问题:你了解过Mybatis中有几种传参方式吗?
- 没想到其他问题回答的很好,唯独这个问题一知半解,勉强回答了其中两种方式。
- 于是这篇文章就来说一说Mybatis传参的几种常见方式,给正在面试或者准备面试的朋友巩固一下。
单个参数
单个参数的传参比较简单,可以是任意形式的,比如#{a}、#{b}或者#{param1},但是为了开发规范,尽量使用和入参时一样。
Mapper如下:
UserInfoselectByUserId(StringuserId);
XML如下:
select*fromuser_infowhereuser_id=#{userId}andstatus=1
多个参数
多个参数的情况下有很多种传参的方式,下面一一介绍。
使用索引【不推荐】
- 多个参数可以使用类似于索引的方式传值,比如#{param1}对应第一个参数,#{param2}对应第二个参数.......
- Mapper方法如下:
UserInfoselectByUserIdAndStatus(StringuserId,Integerstatus);
XML如下:
select*fromuser_infowhereuser_id=#{param1}andstatus=#{param2}
注意:由于开发规范,此种方式不推荐开发中使用。
使用@Param
@Param这个注解用于指定key,一旦指定了key,在SQL中即可对应的key入参。
Mapper方法如下:
UserInfoselectByUserIdAndStatus(@Param("userId")StringuserId,@Param("status")Integerstatus);
XML如下:
select*fromuser_infowhereuser_id=#{userId}andstatus=#{status}
使用Map
Mybatis底层就是将入参转换成Map,入参传Map当然也行,此时#{key}中的key就对应Map中的key。
Mapper中的方法如下:
UserInfoselectByUserIdAndStatusMap(Mapmap);
XML如下:
select*fromuser_infowhereuser_id=#{userId}andstatus=#{status}
测试如下:
@Test voidcontextLoads(){ Mapmap=newHashMap<>(); map.put("userId","1222"); map.put("status",1); UserInfouserInfo=userMapper.selectByUserIdAndStatusMap(map); System.out.println(userInfo); }
POJO【推荐】
多个参数可以使用实体类封装,此时对应的key就是属性名称,注意一定要有get方法。
Mapper方法如下:
UserInfoselectByEntity(UserInfoRequserInfoReq);
XML如下:
select*fromuser_infowhereuser_id=#{userId}andstatus=#{status}
实体类如下:
@Data publicclassUserInfoReq{ privateStringuserId; privateIntegerstatus; }
List传参
List传参也是比较常见的,通常是SQL中的in。
Mapper方法如下:
ListselectList(List userIds);
XML如下:
select*fromuser_infowherestatus=1 anduser_idin #{item}
数组传参
这种方式类似List传参,依旧使用foreach语法。
Mapper方法如下:
ListselectList(String[]userIds);
XML如下:
select*fromuser_infowherestatus=1 anduser_idin #{item}
总结
到此这篇关于Mybatis的几种传参方式详解的文章就介绍到这了,更多相关Mybatis传参方式内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。