mybatis批量操作(主要是更新)-crud+【mybatis自定義mapper:多表api的sql,自己寫sql,寫到自定義mapper裏】

一、mybatis批量操作-crud:

參考:

批量增刪查:https://blog.csdn.net/luo4105/article/details/77892889

===主要難點:批量修改。上面博客裏還有種 批量更新。感覺更適合我這裏“數據同步的需求”:

能夠實現照搬過來最新的,舊的作廢。

List<Object>
這是一個批量保存(插入或修改)的例子

<insert id="insertList" parameterType="list" >
    replace into xx (id, c1,c2) values
    <foreach collection="list" item="it" separator=",">
        (#{it.id},#{it.c1},#{it.c2})
    </foreach>
</insert>
replace:會根據主鍵和唯一索引判斷該記錄是否存在,存在就刪除在插入(修改),不存在就插入(insert)。
--------------------- 
作者:逝兮誠 
來源:CSDN 
原文:https://blog.csdn.net/luo4105/article/details/77892889 
版權聲明:本文爲博主原創文章,轉載請附上博文鏈接!

===批量插入:經驗就是:不需要判斷if字段是否存在。所有字段一起插入即可。因爲可以插入null。

 


批量改:https://www.cnblogs.com/exmyth/p/5757137.html

項目應用:
同步客戶數據:從一張表每天凌晨2點,同步到當前系統客戶表。

有的更新,沒有的插入。唯一標識cid客戶id。

 

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.aliyun.home.dao.mapper.PublicCloudCustomerApiMapper">

<!--仿照DeliverApi,自定義mapper。-->
    <update id="batchUpdate" parameterType="list">
        update public_cloud_customer
        <trim prefix="set" suffixOverrides=",">

            <trim prefix="cid =case" suffix="end,">
                <foreach collection="list" item="i" index="index">
                    <if test="i.cid!=null">
                        when cid=#{i.cid} then #{i.cid}
                    </if>
                </foreach>
            </trim>
            <trim prefix="customer_name =case" suffix="end,">
                <foreach collection="list" item="i" index="index">
                    <if test="i.customerName!=null">
                        when cid=#{i.cid} then #{i.customerName}
                    </if>
                </foreach>
            </trim>
            <trim prefix="industry_area_line =case" suffix="end,">
                <foreach collection="list" item="i" index="index">
                    <if test="i.industryAreaLine!=null">
                        when cid=#{i.cid} then #{i.industryAreaLine}
                    </if>
                </foreach>
            </trim>
            <trim prefix="tl_group =case" suffix="end,">
                <foreach collection="list" item="i" index="index">
                    <if test="i.tlGroup!=null">
                        when cid=#{i.cid} then #{i.tlGroup}
                    </if>
                </foreach>
            </trim>
            <trim prefix="customer_tam =case" suffix="end,">
                <foreach collection="list" item="i" index="index">
                    <if test="i.customerTam!=null">
                        when cid=#{i.cid} then #{i.customerTam}
                    </if>
                </foreach>
            </trim>
            <trim prefix="customer_cbm =case" suffix="end,">
                <foreach collection="list" item="i" index="index">
                    <if test="i.customerCbm!=null">
                        when cid=#{i.cid} then #{i.customerCbm}
                    </if>
                </foreach>
            </trim>
            <trim prefix="customer_gc_level =case" suffix="end,">
                <foreach collection="list" item="i" index="index">
                    <if test="i.customerGcLevel!=null">
                        when cid=#{i.cid} then #{i.customerGcLevel}
                    </if>
                </foreach>
            </trim>
            <trim prefix="gmt_create =case" suffix="end,">
                <foreach collection="list" item="i" index="index">
                    <if test="i.gmtCreate!=null">
                        when cid=#{i.cid} then #{i.gmtCreate}
                    </if>
                </foreach>
            </trim>
            <trim prefix="gmt_modified =case" suffix="end,">
                <foreach collection="list" item="i" index="index">
                    <if test="i.gmtModified!=null">
                        when cid=#{i.cid} then #{i.gmtModified}
                    </if>
                </foreach>
            </trim>
            <trim prefix="is_valid =case" suffix="end,">
                <foreach collection="list" item="i" index="index">
                    <if test="i.isValid!=null">
                        when cid=#{i.cid} then #{i.isValid}
                    </if>
                </foreach>
            </trim>
        </trim>
        where
        <foreach collection="list" separator="or" item="i" index="index" >
            cid=#{i.cid}
        </foreach>
    </update>

    <insert id="batchInsert" parameterType="list"  >
        insert into public_cloud_customer
        (
        cid,
        customer_name,
        industry_area_line,
        tl_group,
        customer_tam,
        customer_cbm,
        customer_gc_level,
        gmt_create,
        gmt_modified,
        is_valid
        )
        values
        <foreach collection="list" item="i" separator=",">
            (#{i.cid},#{i.customerName},#{i.industryAreaLine},#{i.tlGroup},#{i.customerTam},
            #{i.customerCbm},#{i.customerGcLevel},#{i.gmtCreate},#{i.gmtModified},#{i.isValid})
        </foreach>
    </insert>





</mapper>

public interface PublicCloudCustomerApiMapper {

    int batchUpdate(@Param("list")List<PublicCloudCustomerBean>  toCustomerList);
    int batchInsert(@Param("list")List<PublicCloudCustomerBean> toCustomerList);
}

二、自定義mapper:很簡單。

仿照生成的即可。

自定義sql語句。

自定義mapper,防止出現:自己寫的sql如果寫在了生成的mapper.xml時,

加字段,重新生成selectByExample這種配置時,導致自己寫的sql丟失。

簡單單表api生成的,不用寫sql。減少錯誤。

多表api的sql,自己寫sql,寫到自定義mapper裏。

 

 

 

 

 

 


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章