91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mybatisPlus更新字段值為null怎么解決

發布時間:2023-04-12 17:45:39 來源:億速云 閱讀:205 作者:iii 欄目:開發技術

這篇文章主要介紹“mybatisPlus更新字段值為null怎么解決”,在日常操作中,相信很多人在mybatisPlus更新字段值為null怎么解決問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”mybatisPlus更新字段值為null怎么解決”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

    問題描述

    用Mybatis-Plus的update()或者updateById()來更新數據時,無法將字段設置為null值(更新后數據還是原來的值)。

    TableField源碼

    /*
     * Copyright (c) 2011-2020, baomidou (jobob@qq.com).
     * <p>
     * Licensed under the Apache License, Version 2.0 (the "License"); you may not
     * use this file except in compliance with the License. You may obtain a copy of
     * the License at
     * <p>
     * https://www.apache.org/licenses/LICENSE-2.0
     * <p>
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
     * License for the specific language governing permissions and limitations under
     * the License.
     */
    package com.baomidou.mybatisplus.annotation;
    
    import org.apache.ibatis.mapping.ParameterMapping;
    import org.apache.ibatis.mapping.ResultMapping;
    import org.apache.ibatis.type.JdbcType;
    import org.apache.ibatis.type.TypeHandler;
    import org.apache.ibatis.type.UnknownTypeHandler;
    
    import java.lang.annotation.*;
    
    /**
     * 表字段標識
     *
     * @author hubin sjy tantan
     * @since 2016-09-09
     */
    @Documented
    @Retention(RetentionPolicy.RUNTIME)
    @Target({ElementType.FIELD, ElementType.ANNOTATION_TYPE})
    public @interface TableField {
    
        /**
         * 數據庫字段值,
         * 不需要配置該值的情況:
         * <li> 當 {@link com.baomidou.mybatisplus.core.MybatisConfiguration#mapUnderscoreToCamelCase} 為 true 時,
         * (mp下默認是true,mybatis默認是false), 數據庫字段值.replace("_","").toUpperCase() == 實體屬性名.toUpperCase() </li>
         * <li> 當 {@link com.baomidou.mybatisplus.core.MybatisConfiguration#mapUnderscoreToCamelCase} 為 false 時,
         * 數據庫字段值.toUpperCase() == 實體屬性名.toUpperCase()</li>
         */
        String value() default "";
    
        /**
         * 是否為數據庫表字段
         * 默認 true 存在,false 不存在
         */
        boolean exist() default true;
    
        /**
         * 字段 where 實體查詢比較條件
         * 默認 {@link SqlCondition.EQUAL}
         */
        String condition() default "";
    
        /**
         * 字段 update set 部分注入, 該注解優于 el 注解使用
         * <p>
         * 例1:@TableField(.. , update="%s+1") 其中 %s 會填充為字段
         * 輸出 SQL 為:update 表 set 字段=字段+1 where ...
         * <p>
         * 例2:@TableField(.. , update="now()") 使用數據庫時間
         * 輸出 SQL 為:update 表 set 字段=now() where ...
         */
        String update() default "";
    
        /**
         * 字段驗證策略之 insert: 當insert操作時,該字段拼接insert語句時的策略
         * IGNORED: 直接拼接 insert into table_a(column) values (#{columnProperty});
         * NOT_NULL: insert into table_a(<if test="columnProperty != null">column</if>) values (<if test="columnProperty != null">#{columnProperty}</if>)
         * NOT_EMPTY: insert into table_a(<if test="columnProperty != null and columnProperty!=''">column</if>) values (<if test="columnProperty != null and columnProperty!=''">#{columnProperty}</if>)
         *
         * @since 3.1.2
         */
        FieldStrategy insertStrategy() default FieldStrategy.DEFAULT;
    
        /**
         * 字段驗證策略之 update: 當更新操作時,該字段拼接set語句時的策略
         * IGNORED: 直接拼接 update table_a set column=#{columnProperty}, 屬性為null/空string都會被set進去
         * NOT_NULL: update table_a set <if test="columnProperty != null">column=#{columnProperty}</if>
         * NOT_EMPTY: update table_a set <if test="columnProperty != null and columnProperty!=''">column=#{columnProperty}</if>
         *
         * @since 3.1.2
         */
        FieldStrategy updateStrategy() default FieldStrategy.DEFAULT;
    
        /**
         * 字段驗證策略之 where: 表示該字段在拼接where條件時的策略
         * IGNORED: 直接拼接 column=#{columnProperty}
         * NOT_NULL: <if test="columnProperty != null">column=#{columnProperty}</if>
         * NOT_EMPTY: <if test="columnProperty != null and columnProperty!=''">column=#{columnProperty}</if>
         *
         * @since 3.1.2
         */
        FieldStrategy whereStrategy() default FieldStrategy.DEFAULT;
    
        /**
         * 字段自動填充策略
         */
        FieldFill fill() default FieldFill.DEFAULT;
    
        /**
         * 是否進行 select 查詢
         * <p>大字段可設置為 false 不加入 select 查詢范圍</p>
         */
        boolean select() default true;
    
        /**
         * 是否保持使用全局的 Format 的值
         * <p> 只生效于 既設置了全局的 Format 也設置了上面 {@link #value()} 的值 </p>
         * <li> 如果是 false , 全局的 Format 不生效 </li>
         *
         * @since 3.1.1
         */
        boolean keepGlobalFormat() default false;
    
        /**
         * JDBC類型 (該默認值不代表會按照該值生效),
         * 只生效與 mp 自動注入的 method,
         * 建議配合 {@link TableName#autoResultMap()} 一起使用
         * <p>
         * {@link ResultMapping#jdbcType} and {@link ParameterMapping#jdbcType}
         *
         * @since 3.1.2
         */
        JdbcType jdbcType() default JdbcType.UNDEFINED;
    
        /**
         * 類型處理器 (該默認值不代表會按照該值生效),
         * 只生效與 mp 自動注入的 method,
         * 建議配合 {@link TableName#autoResultMap()} 一起使用
         * <p>
         * {@link ResultMapping#typeHandler} and {@link ParameterMapping#typeHandler}
         *
         * @since 3.1.2
         */
        Class<? extends TypeHandler> typeHandler() default UnknownTypeHandler.class;
    
        /**
         * 只在使用了 {@link #typeHandler()} 時判斷是否輔助追加 javaType
         * <p>
         * 一般情況下不推薦使用
         * {@link ParameterMapping#javaType}
         *
         * @since 3.4.0 @2020-07-23
         */
        boolean javaType() default false;
    
        /**
         * 指定小數點后保留的位數,
         * 只生效與 mp 自動注入的 method,
         * 建議配合 {@link TableName#autoResultMap()} 一起使用
         * <p>
         * {@link ParameterMapping#numericScale}
         *
         * @since 3.1.2
         */
        String numericScale() default "";
    }

    FieldStrategy 源碼

    更新策略默認是不為Null

    /*
     * Copyright (c) 2011-2020, baomidou (jobob@qq.com).
     * <p>
     * Licensed under the Apache License, Version 2.0 (the "License"); you may not
     * use this file except in compliance with the License. You may obtain a copy of
     * the License at
     * <p>
     * https://www.apache.org/licenses/LICENSE-2.0
     * <p>
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
     * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
     * License for the specific language governing permissions and limitations under
     * the License.
     */
    package com.baomidou.mybatisplus.annotation;
    
    /**
     * 字段策略枚舉類
     * <p>
     * 如果字段是基本數據類型則最終效果等同于 {@link #IGNORED}
     *
     * @author hubin
     * @since 2016-09-09
     */
    public enum FieldStrategy {
        /**
         * 忽略判斷
         */
        IGNORED,
        /**
         * 非NULL判斷
         */
        NOT_NULL,
        /**
         * 非空判斷(只對字符串類型字段,其他類型字段依然為非NULL判斷)
         */
        NOT_EMPTY,
        /**
         * 默認的,一般只用于注解里
         * <p>1. 在全局里代表 NOT_NULL</p>
         * <p>2. 在注解里代表 跟隨全局</p>
         */
        DEFAULT,
        /**
         * 不加入 SQL
         */
        NEVER
    }

    設置為null的方案

    使用UpdateWrapper更新

    userService.lambdaUpdate()
                .eq(User::getId, user.getId())
                .set(User::getUserName, user.getUserName())
                .set(User::getNickName, null)
                .update();

    設置全局的field-strategy(不推薦)

    mybatis-plus:
      global-config:
          # 字段策略 0:忽略判斷,直接拼SQL, 1:非NULL, 2:非空,3:默認;4:永遠不加入SQL
        field-strategy: 0

    設置某個字段的field-strategy

    在實體的某個字段上設置

    @ApiModelProperty(value = "所在黨組織")
        @TableField(updateStrategy = FieldStrategy.IGNORED)
        private Long partyOrgId;

    更新時直接將值設置為null

    staffInfo.setPartyOrgId(null)

    到此,關于“mybatisPlus更新字段值為null怎么解決”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    普兰县| 石棉县| 右玉县| 包头市| 新野县| 重庆市| 六盘水市| 九龙坡区| 万载县| 禄劝| 扶沟县| 兴和县| 兰州市| 宿松县| 安塞县| 张北县| 泉州市| 五华县| 桑日县| 湘西| 高碑店市| 衡山县| 神农架林区| 瑞安市| 衡水市| 嘉义县| 伊吾县| 金阳县| 林周县| 苍溪县| 孟津县| 兴和县| 蒙山县| 博罗县| 吉林省| 日喀则市| 邵武市| 蚌埠市| 东城区| 嘉祥县| 靖宇县|