今天做项目,遇到的问题就是需求修改数据表的记录,而且字段名都不是固定的,也就是说是需要通过参数传入的,
本来这也不是什么难题,按照平常的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时在参数前后加了个单引号,这样就可以了,本人已测试成功!
如果要动态传入表名,与传入字段名相同的。
我发现也有不少人遇到这个问题,这里权当参考,希望可以帮到你!
- 大小: 5.2 KB
- 大小: 21.2 KB
- 大小: 6.4 KB
- 大小: 4.7 KB
分享到:
相关推荐
今天在项目开发中有个业务是需要限制各个用户对某些表里的字段查询以及某些字段是否显示,这种情况下,就需要构建sql来动态传入表名、字段名了,下面给大家介绍mybatis动态调用表名和字段名的解决方法,一起看看吧
主要介绍了mybatis-plus 表名添加前缀的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
在平时的开发中,我们表中的字段名和表对应实体类的属性名称不一定都是完全相同的,下面来演示一下这种情况下的如何解决字段名与实体类属性名不相同的冲突,下载源代码调试、分析,学习
主要介绍了mybatis使用char类型字段查询oracle数据库时结果返回null问题的解决方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
通过mybatis拦截器将查询语句、更新语句、删除语句、插入语句中指定表明替换为另一个表名
在实际开发过程中,我们往往需要编写复杂的SQL语句,拼接稍有不注意就会导致错误,Mybatis给开发者提供了动态SQL,大大降低了拼接SQL导致的错误。 动态标签 if标签 if标签通常用那个胡where语句,update语句,insert...
主要实现向mybatis传入一个表名、map集合、页数、行数,然后实现将map的key作为查询字段名,value作为相应字段值的通用分页查询操作。
主要给大家介绍了关于mybatis拦截器实现通用权限字段添加的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用mybatis具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
本文通过实例给大家介绍了Mybatis防止sql注入的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
mybatis动态创建数据库表,支持数据库表动态创建,数据插入,数据修改
springboot实现数据源动态切换 注意事项: 1. 该demo采用yml配置数据库信息,注意url标签为jdbc-url 2.项目中加了日志输出...3.在Service中应用事务时,自定义的注解将失效,解决办法:可将注解配置到Controller方法中
if 、where、set、trim、choose 、foreach等在mybatis中的具体用法,有具体实例可供参考,玩转mybatis
5.$方式一般用于传入数据库对象,例如传入表名. 6.一般能用#的就别用$. MyBatis排序时使用order by 动态参数时需要注意,用$而不是# 字符串替换 默认情况下,使用#{}格式的语法会导致MyBatis创建预处理语句...
关于Myeclipse使用mybatis出现Jar包冲突的解决办法,这样操作之后不用每次部署都要删Jar包。(因为我们要使用Mybatis,所以使用Myeclipse里面自带的Mapper功能不全,是1.0.0版,所以我们要下最新一点的Mapper Jar包...
mybatis动态sql批量增删改查,增强了mybatis的认识。
主要介绍了mybatis plus 的动态表名的配置详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
下面小编就为大家带来一篇mysql表名忽略大小写配置方法详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
修改mybatis-generator源码实现生成后的实体类字段上方加上数据库中填写字段的注释,有使用方法,可以在配置文件generatorConfig.xml中根据自己的需要进行修改
主要介绍了mybatis创建一个或多个新用户 insert 字段和表名不确定时动态添加问题,非常不错,具有参考借鉴价值,需要的朋友可以参考下
MyBatis动态拼接SQL