这真的是一个老生长谈的问题了 为了加深印象还是记录一下
首先 ${} 就是简单的拼接,就像我们写Java的时候 string s = “231” +“1231” 最后拼出来一个字符串一样
但是这个问题是 单纯的拼接就没办法 有效的检查合法性 你也不知道 它会拼什么东西,
所以这种就有sql注入的风险。
然后就是推荐使用的#{}
在 MyBatis 中,#{} 是用于参数绑定的占位符语法,它的主要作用有两个方面:
防止 SQL 注入:当使用 #{} 时,MyBatis 会将参数值按照预定义的规则进行转义和处理,将参数值安全地插入到 SQL 语句中,从而避免了 SQL 注入的风险。MyBatis 会自动将参数值进行参数化处理,保证参数值不会被误解为 SQL 语句的一部分,而是作为参数传递给数据库,这样就不会受到恶意输入的影响。
防止 SQL 注入之外的错误:使用 #{} 能够保证参数值的类型和格式正确,避免了因为参数值格式不正确而导致的 SQL 执行错误。例如,如果参数值是字符串类型,MyBatis 会自动在字符串两侧添加引号,确保 SQL 语句的语法正确。