1 #{} 传入值时,sql解析时,参数是带引号的,而${}传入值,sql解析时,参数是不带引号的
2 执行一个 #{ } 被解析为一个参数占位符 ${}: 仅仅为一个纯碎的 string 替换,在动态 SQL 解析阶段将会进行变量替换
3 最后mybatis中交给PreparedStatement执行
4 PreparedStatement在进行参数设置时,对存在依赖注入风险的参数值进行了特殊处理,如输入: cjcj' or '1'='1 ,它会处理成 cjcj\' or \'1\'=\'1 ,从而最后拼装成sql时,变成了 select * from web_user where name='cjcj\' or \'1\'=\'1', 除了第一个和最后一个' 其他的会进行转义处理 如果${}拼接直接写死 没有占位符 也无法做转义处理 会存在sql注入