问题描述
大家好,请教个问题<updateid="updatesql">UPDATEASETcolC='CCCCCC'<foreachcollection="list"item="item"index="index"separator="OR">WHERE(colA=#{item.a}ADNcolB=#{item.b})</foreach></update>批量更新的时候,怎么能实现把SETcolC='CCCCCC'.其中的colC值是动态从foreach的对象item取出来的?
解决方案
解决方案二:
我是进来说楼主头像好靓的。顺便问下楼主是不是要这种:<updateid="updatesql"><foreachcollection="list"item="item"index="index"separator="OR">UPDATEASETcolC=#{item.c}WHERE(colA=#{item.a}ADNcolB=#{item.b})</foreach></update>
解决方案三:
童鞋,你这条语句在list的size为1的时候,是OK的.当list记录条数大于1的时候,组装SQL为UPDATEASETcolC=#{item.c}WHERE(colA=#{item.a}ADNcolB=#{item.b})orUPDATEASETcolC=#{item.c}WHERE(colA=#{item.a}ADNcolB=#{item.b})这条语句压根就是标准sql,oracle的语法也不支持,所以这种方法不能够实现.
解决方案四:
那你那样一条语句里多个where关键字也不行啊。主要是没理解到你要做什么。
解决方案五:
楼主头像是本人么?帮顶了。
解决方案六:
我也是来看楼主的头像的呵呵,你那种用法我都还没有用过……惭愧啊
解决方案七:
同样求教!!!。。。。。。
解决方案八:
可以这样子:<updateid="updateOrders"parameterType="java.util.List">updateorderssetstate='0'wherenoin<foreachcollection="list"item="nos"open="("separator=","close=")">#{nos}</foreach></update>
解决方案九:
可以这样的<updateid="updateOrders"parameterType="java.util.List">updateorderssetstate='0'wherenoin<foreachcollection="list"item="nos"open="("separator=","close=")">#{nos}</foreach></update>
解决方案十:
楼主:我劝你还是在Java里面做循环吧,SqlMap里只写一条记录比较好!大家好,请教个问题<updateid="updatesql"parameterType=“item的类型”>UPDATEASETcolC=#{item.c}WHERE(colA=#{item.a}ADNcolB=#{item.b})</update>Java里循环List调用上面的SQL文
解决方案十一:
主要就是为了减少和数据库多次交互
解决方案十二:
解决了没有
解决方案十三:
我也在想这个问题啊……楼主解决了没,分享一下
解决方案十四:
把where提到循环外面嘛
解决方案十五:
觉得你这样的需求就是不合理的。foreach是迭代拼装语句,而colC='CCCCCC',在一个update中只能set一次,何来迭代的用法。还有就是WHERE放foreach里,应该是不合理的吧!
解决方案:
我刚刚解决。http://blog.csdn.net/cyd1919/article/details/8088402
解决方案:
不知道楼主现在解决没。。。我现在也碰到这样的问题。。。如果解决分享一下哈。在网上看见有mysql的,但是oracle的好像还没看见
解决方案:
这段代码是针对MySQL进行处理的批量更新,仅供参考<insertid="save"parameterType="java.util.List"><![CDATA[INSERTINTOdashboard_module_r(code,dashboard_code,module_code,relative_position,layout_position)VALUES]]><foreachcollection="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>ONDUPLICATEKEYUPDATEcode=VALUES(code),dashboard_code=VALUES(dashboard_code),module_code=VALUES(module_code),relative_position=VALUES(relative_position),layout_position=VALUES(layout_position)</insert>
解决方案:
@cyd1919,这个也不能解决的办法,批量更新多个对象(楼主的问题)。
解决方案:
我来插个嘴,一个很恶心的写法,但好歹是一条sql不是有个foreach么,我虽然不能有多个where,但是,我可以使用foreach来迭代出where后面的条件拼出来就像这样:where(xx='1'andyy='2')or(xx='4'andyy='6')
解决方案:
lz,问题处理了没有?我现在也碰到这样的问题,我是打算把传递List数据foreach也一个表数据,然后跟我要修改的表关联。
解决方案:
求解,,mybatis批量修改
解决方案:
其实想通了,就很简单了,只要通过foreach直接把需要的多个update用beginend;包起来就可以实现批量更新了例如:<updateid="updatesql"><foreachcollection="list"item="item"open="begin"separator=";"close="end;">UPDATEASETcolC=#{item.c}WHERE(colA=#{item.a}ADNcolB=#{item.b})</foreach></update>
解决方案:
上面例子中close=“end;”修改为close=";end;"