美文网首页
当mybatis中需要传入动态的表名或者是字段名时

当mybatis中需要传入动态的表名或者是字段名时

作者: 彭奕茗 | 来源:发表于2018-11-12 21:31 被阅读0次

    在动态sql解析过程,#{}与${}的效果是不一样的:

    要实现动态传入表名、列名,需要做如下修改

    添加属性statementType="STATEMENT"

    同时sql里的属有变量取值都改成${xxxx},而不是#{xxx}

    #{}与${}区别:

    #{}将传入的参数当成一个字符串,会给传入的参数加一个双引号

    ${}将传入的参数直接显示生成在sql中,不会添加引号

    #{}能够很大程度上防止sql注入,${}无法防止sql注入

    因为${}是将传入的参数直接显示生成sql,如${xxx}传入的参数为字符串数据,需在参数传入前加上引号,如:

            String name = "sprite";        name = "'" + name + "'";

    #{}解析被解析为一个参数占位符?。

    综上所得, ${ } 的变量的替换阶段是在动态 SQL 解析阶段,而 #{ }的变量的替换是在 DBMS 中。

    使用动态传参时可以重新封装一次数据再传入即可

    mybatis中的代码:

    <update id="update" statementType="STATEMENT">

    update storyuser

    set ${field} = ${value} where id = ${id}

    </update>

    Controller中的代码

    <update id="update" statementType="STATEMENT">

    update storyuser

    set ${field} = ${value} where id = ${id}

    </update>

    相关文章

      网友评论

          本文标题:当mybatis中需要传入动态的表名或者是字段名时

          本文链接:https://www.haomeiwen.com/subject/werhfqtx.html