有兩種使用方式:
- 使用#{data}
使用$就等同使用JDBC中的PreparedStatement方式設定參數,如下:
< select id="selectPerson" parametertype="int" resulttype="hashmap"> SELECT * FROM PERSON WHERE ID = #{id} </ select>
類似於我們直接使用以下的方式:
// Similar JDBC code, NOT MyBatis… String selectPerson = "SELECT * FROM PERSON WHERE ID=?"; PreparedStatement ps = conn.prepareStatement(selectPerson); ps.setInt(1,id);
此種方式最明顯的好處就是防止SQL injection - 使用${data}
此種方式等於簡單的字串相加,所以假設以上的ID是字串形態的參數,那麼我們就必須在前後加上單引號('):
< select id="selectPerson" parameterType="int" resultType="hashmap"> SELECT * FROM PERSON WHERE ID = '${id}' < /select>
所以上述的方式僅僅是組成SQL COMMAND:SELECT * FROM PERSON WHERE ID = 'iddata'直接送到sql去執行,
最明顯的問題就是SQL injection,因此在mybatis的官方說明上也標注僅可能避免使用此方式.
沒有留言:
張貼留言