您的位置:首页 > 其它

mybatis批量操作

2016-03-10 16:05 323 查看

更新单条记录

?
1
UPDATE
 
course 
SET
 
name
 
'course1'
 
WHERE
 
id = 
'id1'
;


 

更新多条记录的同一个字段为同一个值

?
1
UPDATE
 
course 
SET
 
name
 
'course1'
 
WHERE
 
id 
in
 
(
'id1'
'id2'
, 'id3);


 

更新多条记录为多个字段为不同的值

比较普通的写法,是通过循环,依次执行update语句。
Mybatis写法如下:

?
1
2
3
4
5
6
7
8
9
<
update
 
id=
"updateBatch"
  
parameterType=
"java.util.List"
>  


    
<foreach collection=
"list"
 
item=
"item"
 
index
=
"index"
 
open
=
""
 
close
=
""
 
separator=
";"
>


        
update
 
course


        
<
set
>


            
name
=${item.
name
}


        
</
set
>


        
where
 
id = ${item.id}


    
</foreach>      


</
update
>


 
一条记录update一次,性能比较差,容易造成阻塞。
MySQL没有提供直接的方法来实现批量更新,但可以使用case when语法来实现这个功能。

?
1
2
3
4
5
6
7
8
9
10
11
12
UPDATE
 
course


    
SET
 
name
 
CASE
 
id 


        
WHEN
 
THEN
 
'name1'


        
WHEN
 
THEN
 
'name2'


        
WHEN
 
THEN
 
'name3'


    
END


    
title = 
CASE
 
id 


        
WHEN
 
THEN
 
'New Title 1'


        
WHEN
 
THEN
 
'New Title 2'


        
WHEN
 
THEN
 
'New Title 3'


    
END


更新单条记录

?
1
UPDATE
 
course 
SET
 
name
 
'course1'
 
WHERE
 
id = 
'id1'
;


 

更新多条记录的同一个字段为同一个值

?
1
UPDATE
 
course 
SET
 
name
 
'course1'
 
WHERE
 
id 
in
 
(
'id1'
'id2'
, 'id3);


 

更新多条记录为多个字段为不同的值

比较普通的写法,是通过循环,依次执行update语句。
Mybatis写法如下:

?
1
2
3
4
5
6
7
8
9
<
update
 
id=
"updateBatch"
  
parameterType=
"java.util.List"
>  


    
<foreach collection=
"list"
 
item=
"item"
 
index
=
"index"
 
open
=
""
 
close
=
""
 
separator=
";"
>


        
update
 
course


        
<
set
>


            
name
=${item.
name
}


        
</
set
>


        
where
 
id = ${item.id}


    
</foreach>      


</
update
>


 
一条记录update一次,性能比较差,容易造成阻塞。
MySQL没有提供直接的方法来实现批量更新,但可以使用case when语法来实现这个功能。

?
1
2
3
4
5
6
7
8
9
10
11
12
UPDATE
 
course


    
SET
 
name
 
CASE
 
id 


        
WHEN
 
THEN
 
'name1'


        
WHEN
 
THEN
 
'name2'


        
WHEN
 
THEN
 
'name3'


    
END


    
title = 
CASE
 
id 


        
WHEN
 
THEN
 
'New Title 1'


        
WHEN
 
THEN
 
'New Title 2'


        
WHEN
 
THEN
 
'New Title 3'


    
END


WHERE
 
id 
IN
 
(1,2,3)


 
这条sql的意思是,如果id为1,则name的值为name1,title的值为New Title1;依此类推。
在Mybatis中的配置则如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<
update
 
id=
"updateBatch"
 
parameterType=
"list"
>


            
update
 
course


            
<trim prefix=
"set"
 
suffixOverrides=
","
>


             
<trim prefix=
"peopleId =case"
 
suffix=
"end,"
>


                 
<foreach collection=
"list"
 
item=
"i"
 
index
=
"index"
>


                         
<if test=
"i.peopleId!=null"
>


                          
when
 
id=#{i.id} 
then
 
#{i.peopleId}


                         
</if>


                 
</foreach>


              
</trim>


              
<trim prefix=
" roadgridid =case"
 
suffix=
"end,"
>


                 
<foreach collection=
"list"
 
item=
"i"
 
index
=
"index"
>


                         
<if test=
"i.roadgridid!=null"
>


                          
when
 
id=#{i.id} 
then
 
#{i.roadgridid}


                         
</if>


                 
</foreach>


              
</trim>


             
 

              
<trim prefix=
"type =case"
 
suffix=
"end,"
 
>


                 
<foreach collection=
"list"
 
item=
"i"
 
index
=
"index"
>


                         
<if test=
"i.type!=null"
>


                          
when
 
id=#{i.id} 
then
 
#{i.type}


                         
</if>


                 
</foreach>


              
</trim>


       
<trim prefix=
"unitsid =case"
 
suffix=
"end,"
 
>


                  
<foreach collection=
"list"
 
item=
"i"
 
index
=
"index"
>


                          
<if test=
"i.unitsid!=null"
>


                           
when
 
id=#{i.id} 
then
 
#{i.unitsid}


                          
</if>


                  
</foreach>


           
</trim>


             
</trim>


            
where


            
<foreach collection=
"list"
 
separator=
"or"
 
item=
"i"
 
index
=
"index"
 
>


              
id=#{i.id}


          
</foreach>


</
update
>


 
这条sql的意思是,如果id为1,则name的值为name1,title的值为New Title1;依此类推。
在Mybatis中的配置则如下:
 

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<
update
 
id=
"updateBatch"
 
parameterType=
"list"
>


            
update
 
course


            
<trim prefix=
"set"
 
suffixOverrides=
","
>


             
<trim prefix=
"peopleId =case"
 
suffix=
"end,"
>


                 
<foreach collection=
"list"
 
item=
"i"
 
index
=
"index"
>


                         
<if test=
"i.peopleId!=null"
>


                          
when
 
id=#{i.id} 
then
 
#{i.peopleId}


                         
</if>


                 
</foreach>


              
</trim>


              
<trim prefix=
" roadgridid =case"
 
suffix=
"end,"
>


                 
<foreach collection=
"list"
 
item=
"i"
 
index
=
"index"
>


                         
<if test=
"i.roadgridid!=null"
>


                          
when
 
id=#{i.id} 
then
 
#{i.roadgridid}


                         
</if>


                 
</foreach>


              
</trim>


             
 

              
<trim prefix=
"type =case"
 
suffix=
"end,"
 
>


                 
<foreach collection=
"list"
 
item=
"i"
 
index
=
"index"
>


                         
<if test=
"i.type!=null"
>


                          
when
 
id=#{i.id} 
then
 
#{i.type}


                         
</if>


                 
</foreach>


              
</trim>


       
<trim prefix=
"unitsid =case"
 
suffix=
"end,"
 
>


                  
<foreach collection=
"list"
 
item=
"i"
 
index
=
"index"
>


                          
<if test=
"i.unitsid!=null"
>


                           
when
 
id=#{i.id} 
then
 
#{i.unitsid}


                          
</if>


                  
</foreach>


           
</trim>


             
</trim>


            
where


            
<foreach collection=
"list"
 
separator=
"or"
 
item=
"i"
 
index
=
"index"
 
>


              
id=#{i.id}


          
</foreach>


</
update
>


 
/article/3534051.html

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: