Mybatis的几种传参方式详解

发布时间:2020-10-08 08:04:45 作者:爱撒谎的男孩
来源:脚本之家 阅读:200

前言

单个参数

单个参数的传参比较简单,可以是任意形式的,比如#{a}#{b}或者#{param1},但是为了开发规范,尽量使用和入参时一样。

Mapper如下:

UserInfo selectByUserId(String userId);

XML如下:

<select id="selectByUserId" resultType="cn.cb.demo.domain.UserInfo">
  select * from user_info where user_id=#{userId} and status=1
 </select>

多个参数

多个参数的情况下有很多种传参的方式,下面一一介绍。

使用索引【不推荐】

UserInfo selectByUserIdAndStatus(String userId,Integer status);

XML如下:

<select id="selectByUserIdAndStatus" resultType="cn.cb.demo.domain.UserInfo">
  select * from user_info where user_id=#{param1} and status=#{param2}
 </select>

注意:由于开发规范,此种方式不推荐开发中使用。

使用@Param

@Param这个注解用于指定key,一旦指定了key,在SQL中即可对应的key入参。

Mapper方法如下:

UserInfo selectByUserIdAndStatus(@Param("userId") String userId,@Param("status") Integer status);

XML如下:

<select id="selectByUserIdAndStatus" resultType="cn.cb.demo.domain.UserInfo">
  select * from user_info where user_id=#{userId} and status=#{status}
 </select>

使用Map

Mybatis底层就是将入参转换成Map,入参传Map当然也行,此时#{key}中的key就对应Map中的key。

Mapper中的方法如下:

UserInfo selectByUserIdAndStatusMap(Map<String,Object> map);

XML如下:

<select id="selectByUserIdAndStatusMap" resultType="cn.cb.demo.domain.UserInfo">
  select * from user_info where user_id=#{userId} and status=#{status}
 </select>

测试如下:

@Test
 void contextLoads() {
  Map<String,Object> map=new HashMap<>();
  map.put("userId","1222");
  map.put("status",1);
  UserInfo userInfo = userMapper.selectByUserIdAndStatusMap(map);
  System.out.println(userInfo);
 }

POJO【推荐】

多个参数可以使用实体类封装,此时对应的key就是属性名称,注意一定要有get方法。

Mapper方法如下:

UserInfo selectByEntity(UserInfoReq userInfoReq);

XML如下:

<select id="selectByEntity" resultType="cn.cb.demo.domain.UserInfo">
  select * from user_info where user_id=#{userId} and status=#{status}
 </select>

实体类如下:

@Data
public class UserInfoReq {
 private String userId;
 private Integer status;
}

List传参

List传参也是比较常见的,通常是SQL中的in。

Mapper方法如下:

List<UserInfo> selectList( List<String> userIds);

XML如下:

<select id="selectList" resultMap="userResultMap">
  select * from user_info where status=1
  and user_id in
  <foreach collection="list" item="item" open="(" separator="," close=")" >
   #{item}
  </foreach>
 </select>

数组传参

这种方式类似List传参,依旧使用foreach语法。

Mapper方法如下:

List<UserInfo> selectList( String[] userIds);

XML如下:

<select id="selectList" resultMap="userResultMap">
  select * from user_info where status=1
  and user_id in
  <foreach collection="array" item="item" open="(" separator="," close=")" >
   #{item}
  </foreach>
 </select>

总结

到此这篇关于Mybatis的几种传参方式详解的文章就介绍到这了,更多相关Mybatis传参方式内容请搜索亿速云以前的文章或继续浏览下面的相关文章希望大家以后多多支持亿速云!

推荐阅读:
  1. C++中的传参方式
  2. java有几种传值方式

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

mybatis 传参 传参方式

上一篇:C# JavaScriptSerializer序列化时的时间处理详解

下一篇:vue响应式更新机制及不使用框架实现简单的数据双向绑定问题

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》