1. 程式人生 > >mybatis 裡 mysql高效率批量插入

mybatis 裡 mysql高效率批量插入

 

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