欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

mybatis中關(guān)于in的使用方法及說明

 更新時(shí)間:2023年02月27日 09:46:44   作者:等櫻花的龍貓  
這篇文章主要介紹了mybatis中關(guān)于in的使用方法及說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教

mybatis in的使用方法

很多人都想著拼接字符串用比如in(‘1’,‘2’)這樣的方式去獲取數(shù)據(jù),其實(shí)沒有這個(gè)必要,mybatis有foreach方法來自動(dòng)用這樣的數(shù)據(jù)

如下:

比如傳入的是roleIdList

//上面省略
xxxxx
WHERE ROLE_ID in
        <foreach collection="list" item="item" index="index" open="(" separator="," close=")">
            #{item}
        </foreach>

mybatis使用in做范圍查詢的坑

錯(cuò)誤展示

List<WmRecommendpic> selectPicListByMap(@Param("recommendIds")String recommendIds);
<select id="selectPicListByMap" resultType="xx.xx.WmRecommendpic" ? ? parameterType="java.util.Map">
?? ??? ?
?? ??? ?SELECT * FROM `WmRecommendpic`?
?? ??? ?WHERE type_id IN (
?? ??? ??? ?SELECT DISTINCT type_id FROM `wm_relationship`?
?? ??? ??? ?WHERE recommend_id IN (#{recommendIds})
?? ??? ??? ?AND is_valid=TRUE)
?? ??? ?AND is_valid=TRUE
?? ??? ?ORDER BY id ASC
</select>

由于#是不能識別的 所以有兩種改法

改法1

<select id="selectPicListByMap" resultType="xx.xx.WmRecommendpic" ? ? parameterType="java.util.Map">
?? ??? ?
?? ??? ?SELECT * FROM `WmRecommendpic`?
?? ??? ?WHERE type_id IN (
?? ??? ??? ?SELECT DISTINCT type_id FROM `wm_relationship`?
?? ??? ??? ?WHERE recommend_id IN (${recommendIds})
?? ??? ??? ?AND is_valid=TRUE)
?? ??? ?AND is_valid=TRUE
?? ??? ?ORDER BY id ASC
</select>

為啥能這樣改?

當(dāng)參數(shù)采用:#{} : 解析為一個(gè) JDBC 預(yù)編譯語句(prepared statement)的參數(shù)標(biāo)記符,一個(gè) #{ } 被解析為一個(gè)參數(shù)占位符 。${}: 僅僅為一個(gè)純碎的 string 替換,在動(dòng)態(tài) SQL 解析階段將會(huì)進(jìn)行變量替換。

這種改法看似簡單,但是會(huì)有安全隱患,容易遭黑客跨腳本攻擊。

所以推薦第二種改法。

改法2

List<WmRecommendpic> selectPicListByMap(Map<String,Object> map);
Map<String,Object> map = new HashMap<>();
map.put("recommendIds", recommendId.split(","));
		
return this.dao.selectPicListByMap(map);
<select id="selectPicListByMap" resultType="cn.smarthse.modules.platform.entity.apps.WmRecommendpic" parameterType="java.util.Map">
		
		SELECT * FROM `wm_recommendpic` 
		WHERE type_id IN (
			SELECT DISTINCT type_id FROM `wm_relationship` 
			WHERE recommend_id IN 
			<foreach item="recommendId" index="index" collection="recommendIds"   open="(" separator="," close=")">  
	              #{recommendId}   
	    	</foreach> 
			AND is_valid=TRUE)
		AND is_valid=TRUE
		ORDER BY id ASC
</select>

這里還是使用#{},這樣就不會(huì)遭受跨腳本的攻擊了。

總結(jié)

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Java性能工具JMeter實(shí)現(xiàn)上傳與下載腳本編寫

    Java性能工具JMeter實(shí)現(xiàn)上傳與下載腳本編寫

    性能測試工作中,文件上傳也是經(jīng)常見的性能壓測場景之一,那么 JMeter 文件上傳下載腳本怎么做,本文詳細(xì)的來介紹一下,感興趣的可以了解一下
    2021-07-07
  • spring如何通過FactoryBean配置Bean

    spring如何通過FactoryBean配置Bean

    這篇文章主要介紹了spring如何通過FactoryBean配置Bean,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-01-01
  • Java中的構(gòu)造方法this、super的用法詳解

    Java中的構(gòu)造方法this、super的用法詳解

    這篇文章較詳細(xì)的給大家介紹了Java中的構(gòu)造方法this、super的用法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友參考下吧
    2018-07-07
  • 一文搞懂Spring中Bean的生命周期

    一文搞懂Spring中Bean的生命周期

    這篇文章主要為大家介紹了Spring中Bean生命周期的使用及控制,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)或工作有一定的參考價(jià)值,感興趣的可以學(xué)習(xí)一下
    2022-06-06
  • 詳解在Java中如何優(yōu)雅的停止線程

    詳解在Java中如何優(yōu)雅的停止線程

    線程,作為并發(fā)編程的基礎(chǔ)單元,允許程序同時(shí)執(zhí)行多個(gè)任務(wù),在Java中,線程可以理解為程序中的獨(dú)立執(zhí)行路徑,通過使用線程,開發(fā)者可以創(chuàng)建更加響應(yīng)靈敏、效率更高的應(yīng)用程序,本文小編將給大家介紹一下Java中如何優(yōu)雅的停止線程,需要的朋友可以參考下
    2023-11-11
  • Java 定時(shí)器的使用示例

    Java 定時(shí)器的使用示例

    這篇文章主要介紹了Java 定時(shí)器的使用,幫助大家更好的理解和使用Java time類,感興趣的朋友可以了解下
    2020-09-09
  • Spring Controller接收前端JSON數(shù)據(jù)請求方式

    Spring Controller接收前端JSON數(shù)據(jù)請求方式

    這篇文章主要為大家介紹了Spring Controller接收前端JSON數(shù)據(jù)請求方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-07-07
  • 為何HashSet中使用PRESENT而不是null作為value

    為何HashSet中使用PRESENT而不是null作為value

    這篇文章主要介紹了為何HashSet中使用PRESENT而不是null作為value,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Java Socket設(shè)置timeout的幾種常用方式說明

    Java Socket設(shè)置timeout的幾種常用方式說明

    這篇文章主要介紹了Java Socket設(shè)置timeout的幾種常用方式說明,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • Spring Security架構(gòu)以及源碼詳析

    Spring Security架構(gòu)以及源碼詳析

    這篇文章主要給大家介紹了關(guān)于Spring Security架構(gòu)以及源碼的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06

最新評論