设为首页 收藏本站
查看: 1093|回复: 0

[经验分享] MyBatis,动态传入表名,字段名的解决办法

[复制链接]

尚未签到

发表于 2016-11-27 12:48:24 | 显示全部楼层 |阅读模式
  今天做项目,遇到的问题就是需求修改数据表的记录,而且字段名都不是固定的,也就是说是需要通过参数传入的,


本来这也不是什么难题,按照平常的JDBC,或者hibernate里也都好实现,可问题是现在项目用的mybatis这个持久层框架,按照我的刚开始的想法初使sql是这样的,

DSC0000.png
  当我满心欢喜的运行才发现不行,遂百度之,办法种用尽,还是不行,有人给我说需要把字段那一项换成${field},这种办法来取,试之,无果,于是我种蛋疼。
  网上查找半天发现,提出的方法大都不能用,也都差不多,我放弃了。翻了一下电脑里的mybatis文档,在一个不起眼的地方发现update标签有一个属性statementType,一看我就觉得这个属性不简单,资料解释如下:
  

DSC0001.png

 看到这,相信会点java的人都知道什么意思了吧

这个statement,preparedstatement,到底什么意思,我这不多做解释,实在不懂请参阅:
  http://wenku.baidu.com/view/ccb9da020740be1e650e9abc.html
  简单说就是一个是预编译的,一个是非预编译的。
  如果你要动态传入字段名,表名之类的如果你的sql执行是预编译的,这显然 

  是不行的,所以你必须改成非预编译的,也就是这样:

<update id="editIssuedData" parameterType="map" statementType="STATEMENT">
  同时sql里的属有变量取值最好都改成${xxxx},而不是#{xxx}
  当我改好之后,这是我的完整xml:
  
DSC0002.png

 你妹,还是不行,数据库报错说,
  
DSC0003.png
  这注明一下:三班是我传给sql里变量val的值,仔细一看报的错,是不是感觉有点不一样,对了,就是不一样,是不是感觉三班这个东西少了个引号,其实就是这样的,所以最后一步,需要在java代码里做,如下:

Map<String, Object> map = new HashMap<String, Object>();
map.put("field", Constant.ISSUED_PLAN_COLUMN_NAME.get(field));
map.put("val", "'"+value+"'");
map.put("id", id);
  在往map里put参数时,对应的val我在put时在参数前后加了个单引号,这样就可以了,本人已测试成功!
  如果要动态传入表名,与传入字段名相同的。
  我发现也有不少人遇到这个问题,这里权当参考,希望可以帮到你!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-306239-1-1.html 上篇帖子: Spring3MVC+MyBatis+ExtJs3整合开发系列之二:菜单模块演示 下篇帖子: 通过注解多参数方式解决mybatis物理分面
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表