最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

mybatis直接執(zhí)行完整sql及踩坑解決

 更新時(shí)間:2025年09月27日 14:15:08   作者:StrongerB  
MyBatis可通過(guò)select標(biāo)簽執(zhí)行動(dòng)態(tài)SQL,DQL用List<LinkedHashMap>接收結(jié)果,DML用int處理,注意防御SQL注入,優(yōu)先使用#{}參數(shù),資源目錄需規(guī)范路徑,避免綁定異常;數(shù)據(jù)庫(kù)字段避免關(guān)鍵字,防止轉(zhuǎn)義問(wèn)題

mybatis直接執(zhí)行完整sql及踩坑

開(kāi)發(fā)中有時(shí)遇到將表名或者完整sql作為參數(shù)去執(zhí)行,與一般情況下的增刪改查傳參數(shù)或者對(duì)象不同,mybatis也是可以直接執(zhí)行sql語(yǔ)句的,這個(gè)時(shí)候如何sql的返回值不太好處理,大致分為DQL和DML兩種情況。

select語(yǔ)句采用

List<LinkedHashMap<String , Object>>接收,這樣可以保證查詢結(jié)果的字段有序輸出,查詢結(jié)果如果是空會(huì)返回'[]'

List<LinkedHashMap<String , Object>> executeQuerySql(@Param("sql") String sql);

count、insert、update等語(yǔ)句用int接收即可

int executeCountSql(@Param("sql") String sql);

在xml中的標(biāo)簽統(tǒng)一用select即可

如下:

<select id="executeQuerySql" resultType="java.util.LinkedHashMap" parameterType="String">
        ${sql}
    </select>
    <select id="executeCountSql" resultType="java.lang.Integer" parameterType="String">
        ${sql}
    </select>

這時(shí)要注意預(yù)防sql注入

#{}拼接參數(shù)可以很大程度上的防止sql注入,${}卻不行,做法可以使用PrepareStateMent預(yù)編譯進(jìn)行防范,或者簡(jiǎn)單粗暴的對(duì)sql進(jìn)行識(shí)別過(guò)濾一下

例如:

public static boolean sqlValidate(String sql) {
        String badStr = "'|and|exec|execute|insert|select|delete|update|count|drop|*|%|chr|mid|master|truncate|" +
                "char|declare|sitename|net user|xp_cmdshell|;|or|-|+|,|like'|and|exec|execute|insert|create|drop|" +
                "table|from|grant|use|group_concat|column_name|" +
                "information_schema.columns|table_schema|union|where|select|delete|update|order|by|count|*|" +
                "chr|mid|master|truncate|char|declare|or|;|-|--|+|,|like|//|/|%|#";//過(guò)濾掉的sql關(guān)鍵字,可以手動(dòng)添加
        String[] badSplit = badStr.split("\\|");
        for (String s : badSplit) {
            if (sql.contains(s)) {
                return true;
            }
        }
        return false;
    }
}

踩坑環(huán)節(jié)

1、resources目錄下的文件夾

一定要一步一步創(chuàng)建或者包中間用/符號(hào)分隔,否則就會(huì)造成看上去沒(méi)毛病,但是報(bào)錯(cuò):

org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)

圖中user是用mybatis/user創(chuàng)建的,user1是用mybatis.user1創(chuàng)建的,根本看不出來(lái),一不小心就得找bug一小時(shí)。。。

2、數(shù)據(jù)庫(kù)字段一定不要用關(guān)鍵字

否則在xml中就算用上各種轉(zhuǎn)義符累半天不說(shuō),還不一定好使。。。

總結(jié)

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

相關(guān)文章

  • java反射之獲取類的信息方法(推薦)

    java反射之獲取類的信息方法(推薦)

    下面小編就為大家?guī)?lái)一篇java反射之獲取類的信息方法(推薦)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-06-06
  • SpringBoot2.0解決Long型數(shù)據(jù)轉(zhuǎn)換成json格式時(shí)丟失精度問(wèn)題

    SpringBoot2.0解決Long型數(shù)據(jù)轉(zhuǎn)換成json格式時(shí)丟失精度問(wèn)題

    這篇文章主要介紹了SpringBoot2.0解決Long型數(shù)據(jù)轉(zhuǎn)換成json格式時(shí)丟失精度問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • @Autowired注解在抽象類中失效的原因及解決

    @Autowired注解在抽象類中失效的原因及解決

    這篇文章主要介紹了@Autowired注解在抽象類中失效的原因及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08
  • SpringBoot整合Mybatis實(shí)現(xiàn)多數(shù)據(jù)源配置與跨數(shù)據(jù)源事務(wù)實(shí)例

    SpringBoot整合Mybatis實(shí)現(xiàn)多數(shù)據(jù)源配置與跨數(shù)據(jù)源事務(wù)實(shí)例

    開(kāi)發(fā)中經(jīng)常有這樣的需要: 讀寫(xiě)分離。微服務(wù)環(huán)境下可以實(shí)現(xiàn)一個(gè)服務(wù)讀取一個(gè)數(shù)據(jù)庫(kù),另一個(gè)服務(wù)寫(xiě)庫(kù)。但是在實(shí)際應(yīng)用中有時(shí)也需要在一個(gè)服務(wù)中讀寫(xiě)不同的數(shù)據(jù)庫(kù)??梢栽谝粋€(gè)SpringBoot單體項(xiàng)目中配置多個(gè)數(shù)據(jù)源解決讀寫(xiě)庫(kù)分離
    2022-11-11
  • springboot+angular4前后端分離 跨域問(wèn)題解決詳解

    springboot+angular4前后端分離 跨域問(wèn)題解決詳解

    這篇文章主要介紹了springboot+angular4前后端分離 跨域問(wèn)題解決詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Java?Bluetooth?藍(lán)牙通訊?BlueCove?掃描附近的藍(lán)牙設(shè)備(測(cè)試代碼)

    Java?Bluetooth?藍(lán)牙通訊?BlueCove?掃描附近的藍(lán)牙設(shè)備(測(cè)試代碼)

    BlueCove是一個(gè)開(kāi)源的藍(lán)牙協(xié)議棧實(shí)現(xiàn),旨在為Java開(kāi)發(fā)者提供一個(gè)全面的、易于使用的API,從而在應(yīng)用程序中實(shí)現(xiàn)藍(lán)牙功能,該項(xiàng)目支持多種操作系統(tǒng),這篇文章主要介紹了Java?Bluetooth?藍(lán)牙通訊?BlueCove?掃描附近的藍(lán)牙設(shè)備,需要的朋友可以參考下
    2025-01-01
  • json如何解析混合數(shù)組對(duì)象到實(shí)體類的list集合里去

    json如何解析混合數(shù)組對(duì)象到實(shí)體類的list集合里去

    這篇文章主要介紹了json解析混合數(shù)組對(duì)象到實(shí)體類的list集合里去的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-06-06
  • Java多線程之多種鎖和阻塞隊(duì)列

    Java多線程之多種鎖和阻塞隊(duì)列

    今天帶大家學(xué)習(xí)的是Java多線程的相關(guān)知識(shí),文章圍繞著java多種鎖和阻塞隊(duì)列展開(kāi),文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06
  • Java IO和NIO的基本概念和API詳解

    Java IO和NIO的基本概念和API詳解

    JavaIO是基于流的阻塞式I/O,適用于低并發(fā)場(chǎng)景;JavaNIO是基于通道和緩沖區(qū)的非阻塞式I/O,適用于高并發(fā)場(chǎng)景
    2025-03-03
  • java實(shí)現(xiàn)md5加密示例

    java實(shí)現(xiàn)md5加密示例

    這篇文章主要介紹了java實(shí)現(xiàn)md5加密示例,需要的朋友可以參考下
    2014-05-05

最新評(píng)論

清镇市| 洮南市| 巧家县| 雷州市| 永登县| 宣汉县| 甘洛县| 张家港市| 福贡县| 芦溪县| 清徐县| 车险| 巢湖市| 金塔县| 加查县| 焦作市| 易门县| 巢湖市| 大英县| 邮箱| 淮安市| 乌兰浩特市| 大城县| 印江| 乌拉特中旗| 江安县| 浪卡子县| 霍州市| 大英县| 大新县| 陆川县| 娄底市| 运城市| 湖南省| 五寨县| 辰溪县| 嘉善县| 白水县| 新郑市| 久治县| 韶山市|