首页 > 其他 > 详细

【Mybatis】mybatis设置指定列为空值

时间:2020-11-11 18:10:47      阅读:904      评论:0      收藏:0      [点我收藏+]

文档:https://baomidou.com/guide/faq.html

技术分享图片

 

第一种和第二种感觉不太喜欢,选择第三种方式,写了个工具类

    /**
     * 根据DealId修改任务,允许设置空值
     * @param dealIds           dealId列表
     * @param nullValueColumns  空值列
     */
    public void updateNullColumnsById(Set<String> dealIds,
                                      List<SFunction<Task , ?>>  nullValueColumns) {
        updateNullColumnsById(dealIds, nullValueColumns, null, null, null);
    }

    /**
     * 根据DealId修改配送任务,允许设置空值
     * @param dealIds           dealId列表
     * @param nullValueColumns  空值列
     * @param updateTaskBO      需要修改的实体,只会修改非空的属性值
     */
    public void updateNullColumnsById(Set<String> dealIds,
                                      List<SFunction<Task , ?>>  nullValueColumns,
                                      TaskBO updateTaskBO) {
        Task task = TaskTansfer.INSTANCE.bo2Model(updateTaskBO);
        updateNullColumnsById(dealIds, nullValueColumns, null, task, null);
    }

    /**
     * 根据DealId修改任务,允许设置空值
     * @param dealIds           dealId列表
     * @param nullValueColumns  空值列
     * @param updateTaskBO      需要修改的实体,只会修改非空的属性值
     * @param conditionTaskBO   条件实体,WHERE后面的非空匹配属性值
     */
    public void updateNullColumnsById(Set<String> dealIds,
                                      List<SFunction<Task , ?>>  nullValueColumns,
                                      TaskBO updateTaskBO,
                                      TaskBO conditionTaskBO) {
        Task task = TaskTansfer.INSTANCE.bo2Model(updateTaskBO);
        task conditionTask = TaskTansfer.INSTANCE.bo2Model(conditionTaskBO);
        updateNullColumnsById(dealIds, nullValueColumns, null, task, conditionTask);
    }

    /**
     * 根据DealId修改配送任务,允许设置空值
     * @param dealIds                dealId列表
     * @param nullValueColumns       空值列
     * @param nullConditionColumns   查询条件为空的列,where后面为空的列
     * @param updateTask             需要修改的实体,只会修改非空的属性值
     * @param conditionTask          条件实体,where后面非空的列
     */
    private void updateNullColumnsById(Set<String> dealIds,
                                       List<SFunction<Task , ?>>  nullValueColumns,
                                       List<SFunction<Task , ?>>  nullConditionColumns,
                                       Task updateTask,
                                       Task conditionTask) {

        Task conditionTaskTmp = conditionTask;
        if (conditionTaskTmp == null) {
            conditionTaskTmp = new Task();
        }

        //where后的参数
        LambdaUpdateWrapper<Task> wrapper = Wrappers.update(
                conditionTaskTmp
        ).in(Task::getDealId, dealIds);

        if (CollectionUtils.isNotEmpty(nullValueColumns)) {
            //值可以为空的,需要在这里设置
            nullValueColumns.forEach(it-> wrapper.set(it, null));
        }
        if (CollectionUtils.isNotEmpty(nullConditionColumns)) {
            //where后的参数
            nullConditionColumns.forEach(it-> wrapper.eq(it, null));
        }

        if (updateTask == null) {
            updateTask = new Task();
        }

        baseMapper.update(
                updateTask,          //set后的参数,非空值
                wrapper
        );
    }

 

调用方式:

    public void test() {
        //查找主键为1的记录
        String dealId = "1";
//将name设置为null List<SFunction<Task, ?>> nullValueColumns = Collections.singletonList(Task::getName);
//同时更新最后修改时间 TaskBO taskBO = new TaskBO(); taskBO.setUpdateAt(new Date());
updateNullColumnsById(Collections.singleton(dealId), nullValueColumns, taskBO); }

 

【Mybatis】mybatis设置指定列为空值

原文:https://www.cnblogs.com/AwenDF/p/13958751.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!