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

在动态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>

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,933评论 18 139
  • 范蠡,春秋末期楚宛三户(今河南南阳)人。他学识渊博,志向远大。由于出身清苦和性格孤僻,范蠡早期的言行举止往往出人意...
    wangchuang2017阅读 129评论 0 0
  • 因为毕业设计做的IOS版本,后面想要把毕业设计重新以Swift语言重写,开始学习Swift的点滴... ...
    JackJin阅读 1,027评论 0 0
  • 房檩是杉树做的 吉祥红布像极了红红肚兜 房檩受宠若惊 靠近天空久了 医书翻出来,磨磨新鲜皮肤 笑青瓦遮住阳光 风雨...
    月階霜滿除阅读 495评论 0 0