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

更多MyBatis使用经验

         MyBaits操作经验目录贴

如果本文对你有帮助,不妨请我喝瓶可乐吧!

你的打赏是对我最好的支持!

                    

posted @ 2022-07-17 12:13  小大宇  阅读(12)  评论(0编辑  收藏  举报