【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); }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM