1. 程式人生 > >批量查詢時出現的小問題 總結(注意一下即可,可繞路!!!)

批量查詢時出現的小問題 總結(注意一下即可,可繞路!!!)

業務需求: 前端傳入批量查詢的陣列引數,後端接收並處理(兩個小知識點隨記,注意一下即可,可繞路!!!)

過程再現:

$(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. ${}中間的變數就是直接替換成字串值,相當於字串拼接,而#{}相當於是某種型別的變數;

相關推薦

批量查詢出現問題 總結注意一下即可

業務需求: 前端傳入批量查詢的陣列引數,後端接收並處理(兩個小知識點隨記,注意一下即可,可繞路!!!) 過程再現: $(function(){ alert(); var arr = new Array(2); arr[0] = "1100456324"; ar

微服務寫的最全的一篇文章內容較多先收藏後慢慢研磨

  今年有人提出了2018年微服務將瘋狂至死,可見微服務的爭論從未停止過。在這我將自己對微服務的理解整理了一下,希望對大家有所幫助。   1.什麼是微服務 1)一組小的服務(大小沒有特別的標準,只要同一團隊的工程師理解服務的標識一致即可) 2)獨立的

salesforce零基礎學習七十二項目中的零碎知識點總結

gin 不同 grant dmi ima -m ron 角色 com 項目終於告一段落,雖然比較苦逼,不過也學到了好多知識,總結一下,以後當作參考。 一.visualforce標簽中使用html相關的屬性使用 曾經看文檔沒有看得仔細,導致開發的時候走了一些彎路。還好得到

c++的const總結2

通過 con 其他 綁定 strong col 指針和引用 兩個 tle c++的const小總結(1) http://www.cnblogs.com/MyNameIsPc/p/7091631.html 頂層const和底層cnost 先憑經驗區分一下兩者的區別?

Mycat查詢出現:Error Code: 1064. can't find any valid datanode

arc mysql查詢 根據 .cn .com pos log archive 理解 說明:這個錯誤是查詢時條件字段超過了範圍導致的。 解釋: 為什麽會出現範圍問題? 一般在MySQL查詢時不會因為字段的值超過了範圍而導致的,但是在Mycat中卻不是這樣認為的,Myc

Yii 訪問 Gii(腳手架)出現 403 錯誤非本地訪問

Yii 訪問 Gii(腳手架)403錯誤今天配置好了服務器(win server + upupw(nginx+mysql))內的 Yii framework 2,測試項目的Gii設置,結果出現#403錯誤頁面: Error 403 You are not allowed to access this pag

linux4.11內核設備編譯出現的問題參考博客並更改的

作文 成了 內核啟動參數 inf 編譯 下載 bin span console AllWinnerH3 linux4.11版本的bsp下載: https://pan.baidu.com/s/1mhU4a8K 密碼: b375 H3-linux4.11_bsp目錄就是所需

C++ 在容器A中查詢最後出現的容器B中的元素並返回iteratorfind_end

  #include <iostream> // cout #include <algorithm> // find_end #include <vector> // vector using namespace std; bo

【java專案】mybatis中的mapper查詢返回其他實體多用於多表查詢

<select id="selectUserorder" resultType="com.pojo.Orderdetail" parameterType="java.lang.Integer"> SELECT a.o_status, a.o_no, a.uid,

caffe 安裝問題總結make pycaffe

caffe 安裝問題小總結(make pycaffe) 1\ Make pycaffe -j8編譯報錯 gedit ~/.bashrc開啟檔案,最後面加入 自己的路徑 export PYTHONPATH=/home/hyhuang/下載/caffe/python source ~/.ba

salesforce零基礎學習九十專案中的零碎知識點總結

本次的內容其實大部分人都遇到過,也知道解決方案。但是因為沒有牢記於心,導致問題再次出現還是花費了一點時間去排查了原因。在此記錄下來,好記性不如爛筆頭,爭取下次發現類似的現象可以直接就知道原因。廢話少說,進入正題。 我們在Goods__c表中有一個欄位型別為Picklist,欄位值有以下內容: 我們想要

python學習總結列表、元組、字典、集合、字符串

添加列 xtend 16px 指定 替換 需要 isa utf-8 head ---恢復內容開始--- 一、列表(list) 1.添加 append():追加,在列表末尾添加元素。 列表名.append(添加的元素) extend():擴展,在列表末尾添加元素。 列表名.e

性能測試總結 需求、設計

很快 頻繁 響應時間 定律 圖片 常用功能 inf com 其余 二、性能測試的需求 1.1 確定性能測試點 1)用戶常用功能 2)系統業務邏輯復雜、數據流轉頻繁的功能 3)與外部系統的接口處 2.2 確定性能指標 1.響應時間,2/5/8s 很快 還可以 很慢 ,

######SQL多count查詢不用子查詢條件加對了就行注意:條件位置變化。》分析領導的實現過程。心得筆記。

===》分析領導的實現過程。心得筆記。 #業務場景:不同企業下有各自的角色。角色下有許可權(角色:許可權=多對多,有中間表)和使用者(角色:使用者=一對多,使用者表有個角色id) #表結構:看檔案。 #需求:登入使用者所屬企業id, #1 SELECT a.PB_R

stm32串列埠通訊的一個總結從底層進行理解

從底層理解stm32USART串列埠通訊 以前學串列埠通訊踩過很多坑,過了一段時間又有些忘了,現在問了幾個很強很強的人差不多弄懂了,現在寫一寫總結,免得以後又忘了。 基本知識: 1、TDR和RDR都是USART_DR暫存器的緩衝區,指的是USART_DR的0到8位,TD

maven匯入包出現的異常pom檔案中project處紅線

在pom檔案中新增依賴的時候,不小心斷網了,然後就在pom檔案中project處紅線---異常; 可能是先前下載的標記存入了本地庫的一個位置,阻止了重新匯入的過程; 找到本地倉庫的包的位置,檢視對應匯入失敗的包的位置,發現果然已經有一個檔案被建立...但是裡面沒有相應

各種集合如:Vector & ArrayList 等,總結區別

Vector & ArrayList 的主要區別  1) 同步性:Vector是執行緒安全的,也就是說是同步的 ,而ArrayList 是執行緒序不安全的,不是同步的 數2。   2)資料增長:當需要增長時,Vector預設增長為原來一倍 ,而ArrayList卻

python庫os的總結保持更新...

os庫裡面提供了豐富的方法來處理檔案和目錄,自己在進行一些專案時經常用到,故記錄在下: 1. 返回當前的工作目錄     使用os.getcwd()函式,返回的是絕對路徑      2. 返回指定的資料夾包含的檔案或資料夾的名字的列表,這個列

自學JAVA程式設計的總結

本節主要寫的是陣列的定義及其陣列的簡單基本操作。 class ArrayDemo { //獲取陣列最大值 static int getMax(int[] nums) { int max = nums[0]; for (int in

自學JAVA程式設計的總結

本節主要寫如何定義方法,方法的過載和方法的遞迴操作 class WayDemo { //共同的200行程式碼的方法 static void doWork () { System.out.println("共同的200行程式碼"); }