mybatis的#{}和${}的具体使用场景
作者:smice分类:Java
日期:2021-09-13 10:04:002021-09-13阅读:93

在使用mybatis时,传参是非常常见的,但是这次突然发现踩坑了,特此记录一下。

#{}采用的是jdbc的preparestatement()方法,用?代替参数把参数用''预处理后传入,能有效防止sql注入。${}采用的是直接把参数传入,不会对参数进行预处理。
一般我都直接使用#{}就行,这次有一个需求需要拼接表名,类似于:
select research_type,id,q17,q20,q25 from ${table} where 'id'=${id}
如果这种情况还使用#{}的话,mybatis会将sql语句转换为:
select research_type,id,q17,q20,q25 from 'table' where 'id'=${id}
这种情况就会报syntax error语法错误。

总结一下就是如果传入的参数是表的字段时,则需要使用${}。如果传入的是普通值的话直接使用#{},还能防止sql注入。
弹幕评论