美文网首页
当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