mybatis的使用技巧2——mybatis如何实现一次性批量删除多表数据,支持自定义参数

本文讨论了在项目开发中如何通过批量删除方法高效处理关联表的数据,特别是利用Map参数化和XML配置,避免手动删除和多次执行SQL的问题,强调了预编译和statementType属性在SQL执行中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在实际项目开发过程中,存在大量的关联删除操作。

例如个人简历下面可能包括用户信息,用户工作经历,用户学历,用户技能等多个子表,当需要删除当前用户的所有信息时,不可能手动去关联删除或者在代码中多次执行不同表的删除操作。

此时你可能需要批量删除多表数据的写法,支持自定义参数。

需要特别注意的是,需要在数据库连接加上允许批量更新的属性

&allowMultiQueries=true

例如存在如下接口:

int dynamicBatchRemoveAllWeekData(Map<String,Object> params);

通过使用万能map构造自定义参数,支持一次性动态删除多个关联数据表的关联数据

Map<String,Object> params = new HashMap<>();
        params.put("tableList",new String[]{
                "week_disaster_response_child",
                "week_important_work_child",
                "week_common_child"
        });
        //测试数据仅供参考
        params.put("ids",new Long[]{1L,2L});
        params.put("tempTypeArray",new String[]{"01","02"});

对应的xml文件

注意该xml使用了statementType属性,该属性直接操作sql,不进行预编译,获取数据用$符号

<delete id="dynamicBatchRemoveAllWeekData" statementType="STATEMENT">
        <foreach collection="tableList" item="tabName" index="index" >
            delete from ${tabName} where bi_id in
            <foreach item="id" collection="ids" open="(" separator="," close=")">
                ${id}
            </foreach>
            <if test="tabName == 'week_common_child' ">
                and temp_type in
                <foreach item="tempType" collection="tempTypeArray" open="(" separator="," close=")">
                     ${tempType}
                </foreach>
            </if>
            ;
        </foreach>
    </delete>
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值