mybatis中#和$的區別
阿新 • • 發佈:2017-08-21
blog con span execute cnblogs label state print 導致
簡單點來說就是 #相當於數據加上了雙引號,$相當於直接顯示數據。
比如 orde by #user_id#,如果傳入的是11,那麽會被解析為order by "111",如果傳入的是id,則解析成的sql 為 order by “id”,order by $user_id$,如果傳入的是111,那麽解析成 sql,則為 order by user_id,如果傳入的是id,則解析為 orderby id。
1.使用#{}格式的語法在mybatis中使用Preparement語句來安全的設置值,執行sql類似下面的:
PreparedStatement ps = conn.prepareStatement(sql); ps.setInt(1,id);
這樣做的好處是:更安全,更迅速,通常也是首選做法。
2. 不過有時你只是想直接在 SQL 語句中插入一個不改變的字符串。比如,像 ORDER BY,你可以這樣來使用:
ORDER BY ${columnName}
此時MyBatis 不會修改或轉義字符串。
這種方式類似於:
Statement st = conn.createStatement(); ResultSet rs = st.executeQuery(sql);
這種方式的缺點是: 以這種方式接受從用戶輸出的內容並提供給語句中不變的字符串是不安全的,會導致潛在的 SQL 註入攻擊,因此要麽不允許用戶輸入這些字段,要麽自行轉義並檢驗。
mybatis中#和$的區別