zoukankan      html  css  js  c++  java
  • 【Mybatis】mybatis设置指定列为空值

    文档: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); }
  • 相关阅读:
    冲刺(9)
    冲刺(8)
    冲刺(7)
    C#的post请求 捕获错误代码的内容
    [转载]Memory Limits for 32-bit and 64-bit processes
    IIS 503
    识别chrome浏览器
    时间同步
    修改Visual Studio启动画面授权信息
    Temporary ASP.NET Files权限问题
  • 原文地址:https://www.cnblogs.com/AwenDF/p/13958751.html
Copyright © 2011-2022 走看看