mybatis批量操作

更新单条记录

?
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 >
 
http://my.oschina.net/ckanner/blog/338515

猜你喜欢

转载自m635674608.iteye.com/blog/2259112