在ibatis中對於$param$的處理方法是怎麼樣的呢?下面將通過原始碼解讀具體的處理邏輯
public class ******dynamicsql implements sql例如:select * from $a$,param=的分詞結果是:// 獲取sql
public string getsql(statementscope statementscope, object parameterobject)
public parametermap getparametermap(statementscope statementscope, object parameterobject)
public resultmap getresultmap(statementscope statementscope, object parameterobject)
public void cleanup(statementscope statementscope)
// 如果sql不為null且存在$則認為是簡單動態sql
public static boolean is******dynamicsql(string sql)
private string processdynamicelements(string sql, object parameterobject) else else
}if (value != null)
//獲取下乙個分詞,如果下乙個分詞不是$則丟擲異常
token = parser.nexttoken();
if (!element_token.equals(token))
token = null;
}// 如果最後乙個分詞物件不等於$
} else
// 如果當前分詞等於$則不做任何處理
}//將當前分詞賦值給最後一次分詞
lasttoken = token;
}return newsql.tostring();
}}
select * from $a
$第一次迴圈:
lasttoken=null,
token=select*from
lasttoken!=$
newsql=select* from
lasttoken=select*from
第二次迴圈
lasttoken=select * from
token=$
//donothing
lasttoken=$
第三次迴圈
lasttoken=$
token=a;
newsql=select * from tax_refund_info
第三次迴圈
lasttoken=a;
token=$
//donothing
newsql=select * from tax_refund_info
我們可以發現這樣的查詢完全無法防止sql注入攻擊。
ibatis快取的簡單使用和原始碼分析
配置 select from user limit 0,size 測試 mapmap new hashmap map.put size 8 first time no cache long starttime system.currenttimemillis listlist list sqlmap...
Redis原始碼分析二 Redis簡單動態字串
redis簡單動態字串 redis沒有直接使用c語言傳統的字串表示 以空字元結尾的字元陣列,以下簡稱c字串 而是自己構建了一種名為簡單動態字串 dynamic string,sds 的抽象型別,並將sds用作redis的預設字串表示。在redis裡面,c字串只會作為字串字面量 string lite...
HashMap原始碼簡單分析
1 還是老習慣,一邊看,一邊新增注釋,希望堅持下去,hashmap的基本原始碼進行了分析,內部一些介面和設計還沒來得及看23 一 成員 45 1 transient entry table 67 hashmap內部維護了乙個內部類 entry,用來存放鍵值對,這個entry實現了map.entry這...