mybatis批量更新

Hell125 2012-03-21 11:26:34
大家好,请教个问题
<update id="updatesql" >
UPDATE A SET colC = 'CCCCCC'
<foreach collection="list" item="item" index="index"
separator=" OR">
WHERE (colA = #{item.a} ADN colB = #{item.b})
</foreach>
</update>
批量更新的时候,怎么能实现把SET colC = 'CCCCCC'.
其中的colC 值是动态从foreach的对象item取出来的?
...全文
7188 23 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
23 条回复
切换为时间正序
请发表友善的回复…
发表回复
真难-- 2014-12-04
  • 打赏
  • 举报
回复
其实想通了,就很简单了,只要通过foreach直接把需要的多个update用begin end;包起来就可以实现批量更新了 例如: <update id="updatesql" > <foreach collection="list" item="item" open="begin" separator=";" close="end;"> UPDATE A SET colC = #{item.c} WHERE (colA = #{item.a} ADN colB = #{item.b}) </foreach> </update>
真难-- 2014-12-04
  • 打赏
  • 举报
回复
上面例子中close=“end;”修改为close=";end;"
jiandequn 2014-09-24
  • 打赏
  • 举报
回复
求解,,mybatis 批量修改
zmjian_123 2014-09-09
  • 打赏
  • 举报
回复
lz,问题处理了没有? 我现在也碰到这样的问题, 我是打算把传递List数据 foreach也一个表数据, 然后跟我要修改的表关联。
食得落 2014-06-03
  • 打赏
  • 举报
回复
我来插个嘴,一个很恶心的写法,但好歹是一条sql 不是有个foreach么,我虽然不能有多个where,但是,我可以使用foreach来迭代出where后面的条件 拼出来就像这样:where (xx='1' and yy='2') or (xx='4' and yy='6')
macjson 2014-06-03
  • 打赏
  • 举报
回复
@cyd1919,这个也不能解决的办法,批量更新多个对象(楼主的问题)。
macjson 2014-06-03
  • 打赏
  • 举报
回复
这段代码是针对MySQL进行处理的批量更新,仅供参考
 <insert id="save" parameterType="java.util.List" >
  <![CDATA[
  INSERT INTO dashboard_module_r (
   code,dashboard_code,module_code,relative_position,layout_position
  ) VALUES 
  ]]>
  <foreach collection="list" item="item" index="index" separator=",">
  (
   #{item.code, jdbcType=VARCHAR},
   #{item.dashboardCode,jdbcType=VARCHAR},
   #{item.moduleCode,jdbcType=VARCHAR},
   #{item.relativePosition,jdbcType=VARCHAR},
   #{item.layoutPosition,jdbcType=VARCHAR}
  )
  </foreach>
   ON DUPLICATE KEY UPDATE
   code = VALUES(code),
   dashboard_code = VALUES(dashboard_code),
   module_code = VALUES(module_code),
   relative_position = VALUES(relative_position),
   layout_position = VALUES(layout_position)
 </insert>
AlenCheng 2013-01-14
  • 打赏
  • 举报
回复
不知道楼主现在解决没。。。我现在也碰到这样的问题。。。如果解决分享一下哈。 在网上看见有mysql的,但是oracle的好像还没看见
Ruoxy 2012-10-19
  • 打赏
  • 举报
回复
我刚刚解决。
http://blog.csdn.net/cyd1919/article/details/8088402
码道功臣 2012-09-07
  • 打赏
  • 举报
回复
觉得你这样的需求就是不合理的。
foreach是迭代拼装语句,而colC = 'CCCCCC',在一个update中只能set一次,何来迭代的用法。
还有就是WHERE 放foreach里,应该是不合理的吧!
地雷 2012-09-07
  • 打赏
  • 举报
回复
把where 提到循环外面嘛
AlisaHWT 2012-09-04
  • 打赏
  • 举报
回复
我也在想这个问题啊……楼主解决了没,分享一下
leyou_java 2012-08-01
  • 打赏
  • 举报
回复
解决了没有
Hell125 2012-07-17
  • 打赏
  • 举报
回复
主要就是为了减少和数据库多次交互
star_zk 2012-05-18
  • 打赏
  • 举报
回复
可以这样的

<update id="updateOrders" parameterType="java.util.List">
update orders set state = '0' where no in
<foreach collection="list" item="nos" open="(" separator="," close=")">
#{nos}
</foreach>
</update>
star_zk 2012-05-18
  • 打赏
  • 举报
回复
可以这样子:
<update id="updateOrders" parameterType="java.util.List">
update orders set state = '0' where no in
<foreach collection="list" item="nos" open="(" separator="," close=")">
#{nos}
</foreach>
</update>
necsljianing 2012-05-18
  • 打赏
  • 举报
回复
楼主:我劝你还是在Java里面做循环吧,SqlMap里只写一条记录比较好!
大家好,请教个问题
<update id="updatesql" parameterType=“item的类型”>
UPDATE A SET colC = #{item.c}
WHERE (colA = #{item.a} ADN colB = #{item.b})
</update >

Java里
循环List调用上面的SQL文
shusheng1997 2012-03-22
  • 打赏
  • 举报
回复
楼主头像是本人么?帮顶了。
dryZeng 2012-03-22
  • 打赏
  • 举报
回复
那你那样一条语句里多个where关键字也不行啊。

主要是没理解到你要做什么。
Hell125 2012-03-22
  • 打赏
  • 举报
回复
童鞋,你这条语句在list的size为1 的时候,是OK的.当list记录条数大于1的时候,组装SQL为
UPDATE A SET colC = #{item.c} WHERE (colA = #{item.a} ADN colB = #{item.b})
or
UPDATE A SET colC = #{item.c} WHERE (colA = #{item.a} ADN colB = #{item.b})
这条语句压根就是标准sql,oracle的语法也不支持,所以这种方法不能够实现.
加载更多回复(3)

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧