浅谈mybatis中#{}和${}的区别

#{}:表示占位符,如果获取简单类型,#{}中可以使用value或其它名称。有效防止sql注入。使用#{}设置参数无需考虑参数的类型。

如果使用#{}比较日期字段,select* from tablename where birthday >=#{birthday}

${}:表示sql拼接,如果获取简单类型,#{}中只能使用value 。无法防止sql注入。使用${}设置参数必须考虑参数的类型,比如:使用oracle查询条件是日期类型,如果使用${},必须人为将${}两边加单引号通过to_date转日期。

Select * fromtable where birthday >=to_date(‘${birthday}’,’yyyy-MM-dd’)

 

在没有特殊要求的情况下,建议使用#{}占位符

有些情况必须使用${},

比如:需要动态拼接表名,Select *from ${tablename}

动态拼接排序字段:select *from tablename order by ${username} desc

原文地址:https://www.cnblogs.com/chunguang-yao/p/10666444.html