Mybatis 的几种传参方式

Mybatis 的几种传参方式

 

 

 

1、单个参数

单个参数的传参比较简单,可以是任意形式的,比如#{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>

 

2、多个参数

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

2.1、使用索引【不推荐】

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

Mapper方法如下:
 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>

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

2.2、使用@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>

 

2.3、使用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); }

 

2.4、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; }

 

2.5、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>

 

2.6、数组传参

这种方式类似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>

 

posted @ 2022-10-23 23:27  邓维-java  阅读(521)  评论(0编辑  收藏  举报