批量查询时出现的小问题 总结(注意一下即可,可绕路!!!)

业务需求: 前端传入批量查询的数组参数,后端接收并处理(两个小知识点随记,注意一下即可,可绕路!!!)

过程再现:

$(function(){
	alert();
	var arr = new Array(2); 
	arr[0] = "1100456324"; 
	arr[1] = "1100456304";
	console.info(arr.toString());
	console.info(String(arr));
	console.info(arr.join(","));
	
	console.info(JSON.stringify(arr));
	$.ajax({
		url: "/domestic/registerExpandController/findCYInfosOfService.do",
		data: {
			userIds: String(arr),
			userIds2:JSON.stringify(arr)
		},
		dataType: "json",
		type: "post",
		success: function (data) {
			
		}
	})
})

      此处转Json字符串,后台数组接收参数有误,多了个中括号"[ ]";正确的参数传入应该是如userIds接收的一样,

      总结如下:

             前台参数传入如格式 "1100456321,1100456326",在后台用 数组/List集合 类型进行参数接收时可自动

识别将其按索引接收;所以此处进行批量删除、批量查询时无需如上转Json后再剔除中括号"[ ]"。

             在前台可将数组Array通过String()、toString()或join(",")来将 js 的数组Array转字符串

"1100456321,1100456326"以应对后台的接收:

             全局函数String():将对象的值转换为字符串;

             Array.toString():把数组转换为字符串,并返回结果;

             Array.join():把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔;

在对应的mapper.xml中:

<select id="findCYInfosOfService" resultType="map">
	SELECT ZC.R2 r2,IFNULL(SUPPLY.R4,'') as head_img, ZC.USER_ID userId
	
	FROM 
	  usermanage.GCX_WS_USER_ZC ZC LEFT JOIN usermanage.GCX_WS_USER_SUPPLY SUPPLY 
	
	ON ZC.USER_ID = SUPPLY.USER_ID

	WHERE 1=1
	 AND ZC.USER_ID IN (${temp.userIds}) 
	 AND ZC.DELETE_FLAG != 1 
	 AND ZC.STATE='1'
	 AND SUPPLY.DELETE_FLAG != 1 
	 AND SUPPLY.FINDINGS_OF_AUDIT='已通过'
	 <if test="end != -1">
		limit #{start}, #{end}
	 </if>
</select>

 使用 (${temp.userIds}) 与 (#{temp.userIds,jdbcType=VARCHAR})的区别:

 使用前者,

 使用后者,

        使用前者$时查询结果正确,而使用后#时不正确,后经分析可能是因为IN之后的 (1100456324,1100456304)

被认为是一个整体,而使用#后进行了预编译处理,用?进行了占位,将1100456324,1100456304独立成了一个整体,

改变了本身 (1100456324,1100456304) 在sql语句中原本所表达的含义,所以查询失败。

        在Mybatis中#{ }与${ }的区别:

             1. #{}能够很大程度上防止sql注入,因为一个 #{ }将解析为一个 JDBC 预编译语句(prepared statement)

的参数标记符, 即被解析为一个?参数占位符,而${}不能;

             2. ${}中间的变量就是直接替换成字符串值,相当于字符串拼接,而#{}相当于是某种类型的变量;

发布了65 篇原创文章 · 获赞 21 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/qq_39028580/article/details/81567627
今日推荐