中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

mybatisplus添加與修改的方法

發布時間:2022-07-05 14:09:10 來源:億速云 閱讀:933 作者:iii 欄目:開發技術

本篇內容介紹了“mybatisplus添加與修改的方法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

mybaits-plus幫我們簡化了CRUD,這次來說一下添加與修改的操作

由于我們所有的 SQL 是不可見的,我們希望知道他是怎么執行的,所以我們必須要看日志。

在properties中添加日志功能:

mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

配置日志完畢之后,后面的學習就需要注意這個自動生成的SQL

插入操作

@Test
public void testInsert(){
    User user = new User();
    user.setName("java2");
    user.setAge(31);
    user.setEmail("13434423@qq.com");
    int result = userMapper.insert(user);// 幫我們自動生成 id
    System.out.println(result);     // 受影響的行數
    System.out.println(user);       // 發現,id會自動回填
}

數據庫插入的 id 默認值為:全局的唯一 id

主鍵生成策略

分布式系統唯一 id 生成

這里主鍵是通過一個雪花算法進行完成的。

主鍵自增

我們需要配置主鍵自增

1.實體類上 @TableId(type= IdType.AUTO)

2.數據庫字段一定要是自增的! 

mybatisplus添加與修改的方法

3.再次插入即可!

補充:主鍵自增是一種形式,還可以有其他的形式

  • NONE(1) 未設置主鍵

  • INPUT(2) 手動輸入主鍵

  • ID_WORKER(3) 默認的全局唯一 id

  • UUID(4) 全局唯一 id uuid

  • ID_WORKER_STR(5) 字符串表示法

更新操作

// 測試更新
@Test
public void testUpdate(){
    User user = new User();
    // 通過條件自動拼接動態 sql
    user.setId(3L);
    user.setName("ABCD");
    user.setAge(18);
    // 注意:updateById 但是參數是一個  對象!!!
    int i = userMapper.updateById(user);
    System.out.println(i);
![在這里插入圖片描述](https://img-blog.csdnimg.cn/20210219161620154.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzI2MTQz,size_16,color_FFFFFF,t_70#pic_center)
}

所有的 SQL 都是自動幫我們動態匹配的

自動填充

我們在數據庫表中經常會有這樣的情況,數據添加與修改的時候需要被記錄,每一次操作都需要有時間,所有我們利用自動填充來完成對時間的修改創建時間,修改時間!這些個操作都要自動完成,不希望手動

這里我們直接用代碼級別

給數據庫表中添加 create_time、update_time 兩個字段

mybatisplus添加與修改的方法

實體類上字段屬性需要加上注解TableField(fill = FieldFill.INSERT)

@TableField(fill = FieldFill.INSERT)     // 時間特有的注解
private Date createTime;
@TableField(fill = FieldFill.INSERT_UPDATE)
private Date updateTime;

編寫處理器來處理這個時間特有的注解即可

在工程建立 handler 包,創建一個 MyMetaObjectHandler 類

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
    // 插入時的填充策略
    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill.......");
        // setFieldValByName(String fieldName, Object fieldVal, MetaObject meatObject)
        this.setFieldValByName("createTime",new Date(),metaObject);
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
    
    // 更新時的填充策略
    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start insert fill.......");
        this.setFieldValByName("updateTime",new Date(),metaObject);
    }
}

最后重新測試插入操作,重新測試更新操作,觀察時間是否有所變化

mybatis-plus批量添加

mybatis-plus 當前我用的最新版本

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.1</version>
</dependency>

找到這里我不用多說了,mybatis-plus源碼的批量插入和修改是通過for循環轉化為多條的單條SQL循環進行插入和修改,所以該方法是SQL拼接成一條SQL傳入數據庫

批量插入

package com.guide.common.mybatis.mapper; 
import java.util.List;
 
/**
 * @author 
 * @version 1.0
 * @date 2022/5/6 10:34
 */
public interface SpiceBaseMapper<T> {
    /**
     * 批量插入
     * {@link com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn}
     *
     * @param entityList 要插入的數據
     * @return 成功插入的數據條數
     */
    int insertBatchSomeColumn(List<T> entityList); 
}
package com.guide.common.mybatis.mapper; 
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.extension.injector.methods.AlwaysUpdateSomeColumnById;
import com.baomidou.mybatisplus.extension.injector.methods.InsertBatchSomeColumn;
import org.springframework.stereotype.Component; 
import java.util.List;
 
/**
 * @author 
 * @version 1.0
 * @date 2022/5/6 10:28
 */
@Component
public class SpiceSqlInjector extends DefaultSqlInjector {
 
    /**
     * 如果只需增加方法,保留mybatis plus自帶方法,
     * 可以先獲取super.getMethodList(),再添加add
     */
    @Override
    public List<AbstractMethod> getMethodList(Class<?> mapperClass) {
        // 注意:此SQL注入器繼承了DefaultSqlInjector(默認注入器),調用了DefaultSqlInjector的getMethodList方法,保留了mybatis-plus的自帶方法
        List<AbstractMethod> methodList = super.getMethodList(mapperClass);
        // 注入InsertBatchSomeColumn
        // 在!t.isLogicDelete()表示不要邏輯刪除字段,!"update_time".equals(t.getColumn())表示不要字段名為 update_time 的字段,不對進行操作
        // methodList.add(new InsertBatchSomeColumn(t -> !t.isLogicDelete() && !"update_time".equals(t.getColumn())));
        // 要邏輯刪除 t.isLogicDelete() 默認不要
        methodList.add(new InsertBatchSomeColumn(t -> !t.isLogicDelete()));
        return methodList;
    }
}

記住Java是可以接口多繼承的

mybatisplus添加與修改的方法

mybatisplus添加與修改的方法

“mybatisplus添加與修改的方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

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

AI

湛江市| 南京市| 霍邱县| 靖江市| 达日县| 石城县| 伊宁县| 安溪县| 贞丰县| 务川| 磐石市| 西安市| 承德市| 井冈山市| 江达县| 明星| 左云县| 宜春市| 枝江市| 东安县| 垦利县| 葫芦岛市| 建湖县| 沧州市| 时尚| 兰州市| 玛曲县| 黔江区| 如皋市| 特克斯县| 大邑县| 清徐县| 林州市| 泰来县| 蓬溪县| 建湖县| 丹江口市| 侯马市| 兴宁市| 高阳县| 启东市|