例如,sqlMap中的以下sql語句
select * from user where name = # { name };
解析為:
select * from用戶名=?;
# {}被解析為參數占位符?。
$ {}只替換為壹個純斷字符串,變量替換將在動態SQL解析階段進行。
例如,sqlMap中的以下sql
select * from用戶,其中name =“$ { name }”;
當我們傳遞的參數是“ruhua”時,上面的sql被解析為:
select * from user其中name =“ruhua“;
預編譯前的SQL語句不再包含變量名。
綜上所述,$ {}的變量替換階段是在動態SQL解析階段,而# {}的變量替換是在DBMS中。
註意:$ {}在預編譯前已被變量替換,這將導致sql註入問題。