mybatis执行批量更新update,mybatis执行update
Mybatis的批量插入这里有http://ljhzzyx.blog.163.com/blog/static/38380312201353536375/。目前想批量更新,如果update的值是相同的话,很简单,组织
批量更新
mysql更新语句很简单,更新一条数据的某个字段,一般这样写:
复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field = 'other_value';
如果更新同一字段为同一个值,mysql也很简单,修改下where即可:
复制代码 代码如下:UPDATE mytable SET myfield = 'value' WHERE other_field in ('other_values');
这里注意 ‘other_values' 是一个逗号(,)分隔的字符串,如:1,2,3
那如果更新多条数据为不同的值,可能很多人会这样写:
复制代码 代码如下:foreach ($display_order as $id => $ordinal) {
$sql = "UPDATE categories SET display_order = $ordinal WHERE id = $id";
mysql_query($sql);
}
即是循环一条一条的更新记录。一条记录update一次,这样性能很差,也很容易造成阻塞。
那么能不能一条sql语句实现批量更新呢?mysql并没有提供直接的方法来实现批量更新,但是可以用点小技巧来实现。
复制代码 代码如下:UPDATE mytable
SET myfield = CASE id
WHEN 1 THEN 'value'
WHEN 2 THEN 'value'
WHEN 3 THEN 'value'
END
WHERE id IN (1,2,3)
这里使用了case when 这个小技巧来实现批量更新。
举个例子:
UPDATE categories
SET display_order = CASE id
WHEN 1 THEN 3
WHEN 2 THEN 4
WHEN 3 THEN 5
END
WHERE id IN (1,2,3)
这句sql的意思是,更新display_order 字段,如果id=1 则display_order 的值为3,如果id=2 则 display_order 的值为4,如果id=3 则 display_order 的值为5。
即是将条件语句写在了一起。
这里的where部分不影响代码的执行,但是会提高sql执行的效率。确保sql语句仅执行需要修改的行数,这里只有3条数据进行更新,而where子句确保只有3行数据执行。
如果更新多个值的话,只需要稍加修改:
复制代码 代码如下:UPDATE categories
SET display_order = CASE id
WHEN 1 THEN 3
WHEN 2 THEN 4
WHEN 3 THEN 5
END,
title = CASE id
WHEN 1 THEN 'New Title 1'
WHEN 2 THEN 'New Title 2'
WHEN 3 THEN 'New Title 3'
END
WHERE id IN (1,2,3)
到这里,已经完成一条mysql语句更新多条记录了。
oracle数据库:
| 1 2 3 4 5 6 7 8 9 10 11 |
<code class="hljs tcl"><<span class="hljs-keyword">updateid=<span
class="hljs-string">"batchUpdate" parameterType=<span class="hljs-string">"java.util.List">
<<span class="hljs-keyword">foreach collection=<span class="hljs-string">"list"item=<span
class="hljs-string">"item"index=<span class="hljs-string">"index"<span
class="hljs-keyword">open=<span class="hljs-string">"begin"<span
class="hljs-keyword">close=<span class="hljs-string">"end;"separator=<span
class="hljs-string">";">
<span class="hljs-keyword">updatetest
<<span class="hljs-keyword">set>
test=${item.test}+<span class="hljs-number">1
</<span class="hljs-keyword">set>
whereid = ${item.id}
</<span class="hljs-keyword">foreach>
</<span class="hljs-keyword">update><br><br><br></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>
|
mysql数据库:
mysql数据库采用一下写法即可执行,但是数据库连接必须配置:&allowMultiQueries=true
例如:jdbc:mysql://192.168.1.236:3306/test?useUnicode=true&characterEncoding=UTF-8&allowMultiQueries=true
| 1 2 3 4 5 6 7 8 9 10 11 |
<code class="hljs tcl"><<span class="hljs-keyword">updateid=<span
class="hljs-string">"batchUpdate" parameterType=<span class="hljs-string">"java.util.List">
<<span class="hljs-keyword">foreach collection=<span class="hljs-string">"list"item=<span
class="hljs-string">"item"index=<span class="hljs-string">"index"<span
class="hljs-keyword">open=<span class="hljs-string">""<span
class="hljs-keyword">close=<span class="hljs-string">""separator=<span
class="hljs-string">";">
<span class="hljs-keyword">updatetest
<<span class="hljs-keyword">set>
test=${item.test}+<span class="hljs-number">1
</<span class="hljs-keyword">set>
whereid = ${item.id}
</<span class="hljs-keyword">foreach>
</<span class="hljs-keyword">update><br><br><br>------------------------------------------------------------------------------------------------------------------------------<br><br>https://my.oschina.net/zouqun/blog/405424<br><br>--------------------------------------------------------------------------------------------------------------------------------<br><br></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code>
|
http://www.cnblogs.com/hyq0002013/p/6077847.html