MyBatis: Mapper文件中@Select 注解,条件为IN时,多个值的List参数如何传递进SQL

3 篇文章 1 订阅

写法一:

@Select("<script>" 
		+"select \"batterySN\",\"sequenceNo\" from INQ15_AFS_ORDERMODEL 
where \"batterySN\" IN("
		+"<foreach collection='SNList' item='sn' separator=','>" 
		+ "#{sn}"
		+ "</foreach>"
		+")</script>")
List<Map<String,String>> checkRepeatSN(@Param("SNList")List SNList); 

写法二:

@Select({"<script>",
        "select \"batterySN\",\"sequenceNo\" from INQ15_AFS_ORDERMODEL where \"batterySN\" IN(",
        "<foreach collection='SNList' item='sn' separator=','>" ,
        "#{sn}",
        "</foreach>",
        ")</script>"})
List<Map<String,String>> checkRepeatSN(@Param("SNList")List SNList); 

写法二注意:
1.@Select后面的括号包含大括号。
2.@Select后面大括号中的代码,每行后面使用 逗号 结束。

刚开始了解使用这个方法时,传入了list参数,查询无结果,实际应该有返回结果。

后面发现是因为前端传入的JSON数组字符串(SNListStr)转换有问题,后面使用JSONArray.parseArray(字符串)转换了一下前端传入的这个JSON数组字符串,就正常了。

前端代码:

body : JSON.stringify(tempArray) 为发送到后台的参数,即后端代码中的 SNListStr,内容格式:["a","b","c"]

await fetch(bisUrl,{
    method: 'POST',
    headers: {
        'Authorization' : AuthorizationText,
        'Content-Type': 'application/json;charset=utf-8'
    },
    body : JSON.stringify(tempArray),
    mode: "cors"
}).then((response)=> {
    debugger;
    console.log("response",response);
    return response.json();
}).then((resultBody) => {
    debugger;
    console.log(resultBody);
    //获取返回数据主要部分
    let result = resultBody["Data"];
    feacbackData = result;
}).catch((error) => {
    debugger;
    console.log("BIS请求失败信息",error);
    errorMessage = error;
    return;
});

后端代码:

//把 JSON字符串 转成 JSONArray 
JSONArray SNList= JSONArray.parseArray(SNListStr);
//请求数据库
List repeatSNList= afsService.checkRepeatSN(SNList);

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值