0
点赞
收藏
分享

微信扫一扫

MyBatis--------占位符${}与#{}


一、基本区别

        简单的说就是#{}传过来的参数带引号,而${}传过来的参数不带单引号。

        涉及到这个问题,最初是在毕业设计项目中,进行动态排序发现的问题。看下面的SQL语句

<select id="get" resultType="..">

SELECT * from t_article
<if test="orderKey !=null and orderKey !=''">
ORDER BY #{orderKey}
</if>

</select>

        我的目的是在文章表't_article'中,根据文章的点击量'click'来排序。但是传过来的参数带上了引号,因此排序无效

        执行出来的SQL语句的效果是: SELETE * FROM t_article order by 'click'。

        修改后的SQL语句如下,

<select id="get" resultType="..">

SELECT * from t_article
<if test="orderKey !=null and orderKey !=''">
ORDER BY ${orderKey}
</if>

</select>

        很简单,就是把#{}修改成了${},这样的话,传递过来的值就不会带上引号了。

        现在执行出来的SQL语句的效果是: SELETE * FROM t_article order by click。达到了预期的效果

二、#{}对SQL语句的影响

        用#{}传过来的参数可以防止SQL注入,而用${}就不行了。

        如何防止SQL注入:

        1.对用户的输入进行校验,可以通过正则表达式,或限制长度

        2.不要使用动态拼装sql,使用预编译的带占位符的SQL语句。比如使用preparedStatement

 

                   

举报

相关推荐

0 条评论