Mybatis 傳入參數作爲查詢語句的情況

1、情形

    剛接到一個新加需求,需要加一個分組查詢功能。大概就是有一個下拉框,選中其中一個,那麼頁面上的列表要根據選中的分組顯示,並顯示分組的名字和條數。

2、處理

    使用group by語句就可以解決問題。好,先來一個我第一次寫的sql:

select count(defectCode) as groupNum,#{groupName} as groupName  
    	from bugbasefields 
    	GROUP BY  #{groupName} 

但是查詢結果卻不是我想要的:

我去這是什麼情況,分組和查詢結果都不對。在我一遍遍的嘗試無果下,打開了萬能的度娘。度娘告訴我:你,回去看看mybatis的#和$的區別,再來找我。於是我又找另一個度娘(打開了另一個頁面)仔細看了看mybatis下#和$的區別:
1、#{}將傳入的參數當成一個字符串,會給傳入的參數加一個雙引號;

2、${}將傳入的參數直接顯示生成在sql中,不會添加引號;

3、#{}能夠很大程度上防止sql注入,${}無法防止sql注入;

嗯,那改改吧:

select count(defectCode) as groupNum,${groupName} as groupName  
    	from bugbasefields 
    	GROUP BY  ${groupName} 

結果:

嗯,數據是對了,但是 分組後有null和空字符串,這要是給前端小姐姐,惹她不高興,我那幫男同事不會給我好果子吃。。。爲了不捱揍,那在處理一下。

select count(defectCode) as groupNum,
		 CASE  
			WHEN  (${groupName} is not null and ${groupName} != '')
			THEN  ${groupName} 
	        ELSE  '其它'
	     END  as groupName
		from bugbasefields GROUP BY  groupName 

結果:

空的,空字符串的都統統去"其它"裏,這多好,前端好我也好,,嘿嘿。

在這裏我發現了一個新大陸,可能是我知識的盲點,group by 後面是可以跟別名的。

這個是數據表字段,分組但是有問題 沒出現了3個其他。

但我稍微改了下,分組別名就達到了預期結果:

這就說明group by 語句一定是在查詢之後才執行的。。。由此看來我的sql之路還很長。。。。。

最後 ,還是那句希望在編程路上熱情不減,一起加油!

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章