MyBatis,动态传入表名,字段名的解决办法
http://luoyu-ds.iteye.com/blog/1517607
今天做项目,遇到的问题就是需求修改数据表的记录,而且字段名都不是固定的,也就是说是需要通过参数传入的,
本来这也不是什么难题,按照平常的JDBC,或者hibernate里也都好实现,可问题是现在项目用的mybatis这个持久层框架,按照我的刚开始的想法初使sql是这样的,
当我满心欢喜的运行才发现不行,遂百度之,办法种用尽,还是不行,有人给我说需要把字段那一项换成${field},这种办法来取,试之,无果,于是我种蛋疼。
网上查找半天发现,提出的方法大都不能用,也都差不多,我放弃了。翻了一下电脑里的mybatis文档,在一个不起眼的地方发现update标签有一个属性statementType,一看我就觉得这个属性不简单,资料解释如下:
看到这,相信会点java的人都知道什么意思了吧
这个statement,preparedstatement,到底什么意思,我这不多做解释,实在不懂请参阅:
http://wenku.baidu.com/view/ccb9da020740be1e650e9abc.html
简单说就是一个是预编译的,一个是非预编译的。
如果你要动态传入字段名,表名之类的如果你的sql执行是预编译的,这显然
是不行的,所以你必须改成非预编译的,也就是这样:
- <update id="editIssuedData" parameterType="map" statementType="STATEMENT">
同时sql里的属有变量取值最好都改成${xxxx},而不是#{xxx}
当我改好之后,这是我的完整xml:
你妹,还是不行,数据库报错说,
这注明一下:三班是我传给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时在参数前后加了个单引号,这样就可以了,本人已测试成功!
如果要动态传入表名,与传入字段名相同的。
我发现也有不少人遇到这个问题,这里权当参考,希望可以帮到你!
MyBatis,动态传入表名,字段名的解决办法相关推荐
- 【MyBatis】myBatis动态传入表名、字段名(列名)进行查询
最近在工作上遇到一个问题,由于数据量过大所以进行了分表保存用户数据,项目dao层使用了MyBatis框架,并且用xml保存维护sql语句,方便后期DBA介入进行查询语句的优化.由于分表就涉及到了有相近 ...
- MyBatis动态传入表名,字段名参数的解决办法
要实现动态传入表名.列名,需要做如下修改:sql里的属有变量取值都改成${xxxx},而不是#{xxx} <delete id="deleteTableData" param ...
- 【MyBatis】myBatis动态传入表名进行查询
由于分表就涉及到了有相近查询语句只是表名不同的情况,刚开始使用了 <select id="selectById" resultMap="BaseResultMap& ...
- Mybatis 动态传入表名 字段名 的解决办法
1.添加属性statementType="PREPARED" 2.同时sql里的属有表名变量取值都改成${xxxx},条件变量是#{xxx}<delete id=" ...
- mybatis 动态传入表名 注解_Mybatis动态sql的动态表名问题
update #{tableName} set iobsolete= 1,update_date =#{date} where reg_id in#{id} 一开始这样写的sql,sql语句的表名会有 ...
- mybatis 动态传入表名 注解_mybatis动态sql(注解方式)
就记录个实例,以后可以参考= = 方法一:provider public class ArticleProvider { public String selectAll(Map map) { retu ...
- MyBatis的sql动态传入表名和字段名,并判断是否为空
id:方法名 parameterType:入参类型 resultType:返回类型,默认map statementType:预编译,还是非预编译 预编译:PRESTATEMENT,在系统初始化时就会读 ...
- mybatis动态调用表名和字段名
一直在使用Mybatis这个ORM框架,都是使用mybatis里的一些常用功能.今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,如某张表的某些字段不让用户查询到.这 ...
- Mybatis 动态传sql可以查询表名,任意表名,不固定字段的个数返回未定义的类型以及增删改...
mysql查询表名: SELECT table_name FROM information_schema.tables WHERE table_schema='sell' AND table_type ...
最新文章
- PCANet --- 用于图像分类的深度学习基准
- 在手机网页中使用USEMAP
- RTOS之uCOS-II源码下载及源码目录结构、常见的RTOS!
- python的read_csv_python,pd.read_csv成熟导入
- Spark入门:也可以用Java创建轻量级的RESTful应用程序
- 利用C语言创建和使用DLL文件
- mysql导入greenplum_greenPlum中通过gpfdist导入文本数据到数据库表中
- springboot项目中关于时间类型转换的格式问题
- Java Lambda表达式的使用
- 5年之后,产品经理,没了?
- 软件系统架构师大概工作过程
- urdf 学习笔记一
- 学习人工智能导论(3)
- 遗传算法及其应用_遗传算法及其广泛应用
- 单片机课设波形发生器 产生方波、三角波、正弦波、锯齿波 波形幅度可调、频率可调
- 禁止QQ2010(2009)弹迷你首页的方法
- CWE-通用弱点枚举简介
- python 公开课_python公开课|可以用Python做的十件事,刚开始学python,你一定要知道...
- 惠州 菜鸟机器人_马云在惠州建了一个“秘密基地”,超震撼!
- 2008北京第29届奥运会总奖牌榜
热门文章
- python3.8.1安装教程-python3.8.1 安装
- python项目-2019年5月GitHub上热门的Python项目
- python程序员工作怎样-怎样才能成为一名Python程序员
- python零基础实例-零基础学习Python开发练习100题实例(1)
- python语言入门m-Python语言入门详解!快速学成Python!
- python代码块使用缩进表示-python中的代码块使用缩进来表示。
- 没有c语言基础可以学python吗-零基础学Python之前需要学c语言吗
- python安装流程-python安装流程和注意事项
- python从零基础到项目实战怎么样-Python 3.x网络爬虫从零基础到项目实战
- python语言入门w-1Python开发——基础入门