mybatise不同类型的参数的传递和接收

当传入的参数仅为一个参数的时候,参数的接收只需要写个占位符即可,名称写什么都无所谓。

<select id="getById" parameterType="java.lang.Integer" resultMap="userMap">
          select * from user where id=#{xxx}
  </select>

当传入的参数为多个的时候,参数的接收为为参数的索引,如果参数类型不一致则不必写parameterType。比较旧的版本参数索引的写法为#{0},但是我使用的版本为3.4.写法则为#{arg0}

UserEntity getByIdStatus(int id, int status);

<select id="getByIdStatus" resultMap="userMap">
         select * from user where id=#{arg0} and status=#{arg1}
 </select>

当传递多个参数,还可以使用mybatis的@Param注解,给参数起别名,达到接收参数更加的清晰,而且不需要注意参数顺序的目的

UserEntity getByIdStatus(@Param(value = "xxxx") int id, @Param(value = "oooo")int status);

<select id="getByIdStatus" resultMap="userMap">
         select * from user where id=#{xxxx} and status=#{oooo}
</select>

当传入的参数为集合的时候,参数的接收:

void removeByIds(List<Integer> ids);

<delete id="removeByIds" parameterType="java.util.List">
          delete from user where id in
          <foreach item="item" collection="list" open="(" separator="," close=")">
            #{item}
        </foreach>

</delete>

在没有mybatis中,参数传递使用map,首先是,parameterType设置为map类型。取值的话和对象传值是一样的,使用${key} 或者#{key}都可以,不过${}取值不安全,可能会有SQL注入的风险,所以一般建议使用#{}取值。判断map中是不是包含某个key,可以使用_parameter.containsKey('key') 来判断.如果map有值类型为对象的,则可以通过#{obj.attr}来获取属性值

UserEntity getByMap(Map<String, Object> map);

<select id="getByMap" parameterType="java.util.Map" resultMap="userMap">
          select * from user 
          <where>
              <if test="_parameter.containsKey('user')">
                  and name like '%' #{user.name} '%'
              </if>
              <if test="_parameter.containsKey('user')">
                  and id = ${user.id}
              </if>
          </where>
      </select>

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值