写法一:
@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);