原始碼分析 iBatis簡單動態SQL處理( )

2022-09-07 20:24:11 字數 1512 閱讀 6420

在ibatis中對於$param$的處理方法是怎麼樣的呢?下面將通過原始碼解讀具體的處理邏輯

public class ******dynamicsql implements sql 

// 獲取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$,param=的分詞結果是:

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這...