- 基于mybatis的预编译
“$”无法防止sql注入,”#”可以防止,因为“#“使用了预编译机制,而”$”未使用。
当出现表名之类的,需要预编译的参数时,则需要使用“$“,此时应注意表名不得从页面(客户端)传入,最好在java代码中自行获取。
当出现“in“关键词的时候,配合”#”使用应记得参数此时为多个,而非一个。
2.直接基于PreparedStatement的预编译
A: if (elements[k][1].equalsIgnoreCase(DataType.Float)) {
stmt.setFloat(k + 1, Float.parseFloat(elements[k][0]));
}
B:String m_Device7300ASAM_SQL = "select * from tab_multipolar_shelf where device_id=?";
String[][] elements ={{device_id,"STRING"}};
return (Map)JdbcUtils.query(m_DeviceInfo_SQL_Prepared,elements)
代替
String m_Device7300ASAM_SQL = "select * from tab_multipolar_shelf where device_id='";
return DataSetBean.getRecord(this.m_Device7300ASAM_SQL + device_id + "'");
本文介绍了MyBatis中预编译机制的重要性,强调了使用"#"来防止SQL注入,而避免使用"$"。讨论了在处理表名和"IN"关键字时的注意事项,并给出了基于PreparedStatement的预编译代码示例,演示了如何更安全地设置参数以防止SQL注入。
26万+

被折叠的 条评论
为什么被折叠?



