mybatis 里 mysql高效率批量插入

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhaofuqiangmycomm/article/details/84347147

1,单条

UPDATE ho_house 
SET cn_name = CASE id 
WHEN 16 THEN 7.6 
WHEN 19 THEN 8.86 
WHEN 20 THEN 9 
END 
WHERE id IN (16,19,20)

2,多条

UPDATE ho_house
    SET cn_name = CASE cid 
        WHEN 1 THEN 'Name  1'
        WHEN 2 THEN 'Name  1'
        WHEN 3 THEN 'Name  1'
    END, 
        en_name = CASE cid 
        WHEN 1 THEN 'Name  1'
        WHEN 2 THEN 'Name  2'
        WHEN 3 THEN 'Name  3'
    END

WHERE cid IN (1,2,3) and pcate in (24,27,26) and ccate in (277,271,207)...[多条件时直接: and 字段 in()]

3,mybatis  的多条   5000条用时 2分钟
    <!-- 高效率批量更新sql -->
    <update id="updateList" parameterType="java.util.List">  
       UPDATE ho_house  
        SET code = CASE id  
        <foreach collection="list" item="item">  
            WHEN #{item.id} THEN #{item.code}  
        </foreach>  
        END, 
               cn_name = CASE id  
        <foreach collection="list" item="item">  
            WHEN #{item.id} THEN #{item.cnName}  
        </foreach>  
        END, 
               en_name = CASE id  
        <foreach collection="list" item="item">  
            WHEN #{item.id} THEN #{item.enName}  
        </foreach>  
         END, 
               actual_name = CASE id  
        <foreach collection="list" item="item">  
            WHEN #{item.id} THEN #{item.actualName}  
        </foreach>  
          END, 
               update_date = CASE id  
        <foreach collection="list" item="item">  
            WHEN #{item.id} THEN #{item.updateDate}  
        </foreach> 
          END, 
               update_by = CASE id  
        <foreach collection="list" item="item">  
            WHEN #{item.id} THEN #{item.updateBy.id}  
        </foreach> 
        END  
        WHERE  
            id in  
            <foreach collection="list" item="item" open="(" separator="," close=")">  
             #{item.id}   
            </foreach>  
    </update>  

4,对比  另一种批量,实际还是生成单个sql一条一条更新的  5000条用时20分钟

 
    <!-- 批量更新sql -->
   、 <update id="updateList" parameterType="java.util.List">
       <foreach collection="list" index="index" item="e" >  
            UPDATE ho_house SET     
                code = #{e.code},
                cn_name = #{e.cnName},
                en_name = #{e.enName},
                actual_name = #{e.actualName},
                update_date = #{e.updateDate},
                update_by = #{e.updateBy.id} 
            WHERE id = #{e.id} ;
        </foreach>  
    </update> 

5,创建临时表,先更新临时表,然后从临时表中update

create tem table tmp(id int(4) primary key,dr varchar(50)); 
insert into tmp values (0,’gone’), (1,’xx’),…(m,’yy’); 
update test_tbl, tmp set test_tbl.dr=tmp.dr where test_tbl.id=tmp.id; 

参考 : https://blog.csdn.net/zl570932980/article/details/72468875 
 

猜你喜欢

转载自blog.csdn.net/zhaofuqiangmycomm/article/details/84347147