Mybatis的几种传参方式详解

网友投稿 274 2022-11-20


Mybatis的几种传参方式详解

前言

前几天恰好面试一个应届生,问了一个很简单的问题:你了解过Mybatis中有几种传参方式吗?

没想到其他问题回答的很好,唯独这个问题一知半解,勉强回答了其中两种方式。

于是这篇文章就http://来说一说Mybatis传参的几种常见方式,给正在面试或者准备面试的朋友巩固一下。

单个参数

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

Mapper如下:

UserInfo selectByUserId(String userId);

XML如下:

select * from user_info where user_id=#{userId} and status=1

多个参数

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

使用索引【不推荐】

多个参数可以使用类似于索引的方式传值,比如#{param1}对应第一个参数,#{param2}对应第二个参数.......

Mapper方法如下:

UserInfo selectByUserIdAndStatus(String userId,Integer status);

XML如下:

select * from user_info where user_id=#{param1} and status=#{param2}

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

使用@Param

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

Mapper方法如下:

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

XML如下:

select * from user_info where user_id=#{userId} and status=#{status}

使用Map

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

Mapper中的方法如下:

UserInfo selectByUserIdAndStatusMap(Map map);

XML如下:

select * from user_info where user_id=#{userId} and status=#{status}

测试如下:

@Test

void contextLoads() {

Map 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 * from user_info DlQHrnwhere user_id=#{userId} and status=#{status}

实体类如下:

@Data

public class UserInfoReq {

private String userId;

private Integer status;

}

List传参

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

Mapper方法如下:

List selectList( List userIds);

XML如下:

select * from user_info where status=1

and user_id in

#{item}

数组传参

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

Mapper方法如下:

List selectList( String[] userIds);

XML如下:

select * from user_info where status=1

and user_id in

#{item}

总结


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:SpringBoot使用Spring Security实现登录注销功能
下一篇:JAVA String.valueOf()方法的用法说明
相关文章

 发表评论

暂时没有评论,来抢沙发吧~