亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

mybatis-plus的添加與修改詳解

 更新時間:2022年06月27日 10:37:12   作者:AD鈣鈣鈣  
這篇文章主要介紹了mybatis-plus的添加與修改方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教

mybatis-plus添加與修改

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

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

在properties中添加日志功能:

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

配置日志完畢之后,后面的學(xué)習(xí)就需要注意這個自動生成的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); ? ? // 受影響的行數(shù)
? ? System.out.println(user); ? ? ? // 發(fā)現(xiàn),id會自動回填
}

數(shù)據(jù)庫插入的 id 默認(rèn)值為:全局的唯一 id

主鍵生成策略

分布式系統(tǒng)唯一 id 生成

這里主鍵是通過一個雪花算法進(jìn)行完成的。

主鍵自增

我們需要配置主鍵自增

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

2.數(shù)據(jù)庫字段一定要是自增的! 

3.再次插入即可!

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

  • NONE(1) 未設(shè)置主鍵
  • INPUT(2) 手動輸入主鍵
  • ID_WORKER(3) 默認(rèn)的全局唯一 id
  • UUID(4) 全局唯一 id uuid
  • ID_WORKER_STR(5) 字符串表示法

更新操作

// 測試更新
@Test
public void testUpdate(){
    User user = new User();
    // 通過條件自動拼接動態(tài) sql
    user.setId(3L);
    user.setName("ABCD");
    user.setAge(18);
    // 注意:updateById 但是參數(shù)是一個  對象!??!
    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 都是自動幫我們動態(tài)匹配的

自動填充

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

這里我們直接用代碼級別

給數(shù)據(jù)庫表中添加 create_time、update_time 兩個字段

在這里插入圖片描述

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

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

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

在工程建立 handler 包,創(chuàng)建一個 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 當(dāng)前我用的最新版本

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

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

批量插入

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 要插入的數(shù)據(jù)
     * @return 成功插入的數(shù)據(jù)條數(shù)
     */
    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(默認(rèn)注入器),調(diào)用了DefaultSqlInjector的getMethodList方法,保留了mybatis-plus的自帶方法
        List<AbstractMethod> methodList = super.getMethodList(mapperClass);
        // 注入InsertBatchSomeColumn
        // 在!t.isLogicDelete()表示不要邏輯刪除字段,!"update_time".equals(t.getColumn())表示不要字段名為 update_time 的字段,不對進(jìn)行操作
        // methodList.add(new InsertBatchSomeColumn(t -> !t.isLogicDelete() && !"update_time".equals(t.getColumn())));
        // 要邏輯刪除 t.isLogicDelete() 默認(rèn)不要
        methodList.add(new InsertBatchSomeColumn(t -> !t.isLogicDelete()));
        return methodList;
    }
}

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

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 使用Aop的方式實現(xiàn)自動日志記錄的方式詳細(xì)介紹

    使用Aop的方式實現(xiàn)自動日志記錄的方式詳細(xì)介紹

    這篇文章主要介紹了使用Aop的方式實現(xiàn)自動日志記錄,通過監(jiān)聽器去監(jiān)聽,當(dāng)訪問到具體的類方法,通過aop切面去獲取訪問的方法,然后將日志記錄下來,就這種方式給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2022-04-04
  • Java死鎖產(chǎn)生原因及示例

    Java死鎖產(chǎn)生原因及示例

    本文主要介紹了Java死鎖產(chǎn)生原因及示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-06-06
  • Java實現(xiàn)ATM系統(tǒng)超全面步驟解讀建議收藏

    Java實現(xiàn)ATM系統(tǒng)超全面步驟解讀建議收藏

    這篇文章主要為大家詳細(xì)介紹了用Java實現(xiàn)簡單ATM機(jī)功能,文中實現(xiàn)流程寫的非常清晰全面,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • SpringAOP如何修改請求參數(shù)列表

    SpringAOP如何修改請求參數(shù)列表

    這篇文章主要介紹了SpringAOP如何修改請求參數(shù)列表問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • MyBatis中criteria的or(或查詢)語法說明

    MyBatis中criteria的or(或查詢)語法說明

    這篇文章主要介紹了MyBatis中criteria的or(或查詢)語法說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • springcloud集成skywalking實現(xiàn)全鏈路追蹤

    springcloud集成skywalking實現(xiàn)全鏈路追蹤

    在微服務(wù)治理中,springcloud也是技術(shù)選型中的一個成熟的解決方案,而且相對dubbo來說,springcloud涉及到的微服務(wù)組件更多,調(diào)用鏈路可能更復(fù)雜,本文將詳細(xì)介紹下如何在springcloud中集成skywalking,需要的朋友可以參考下
    2024-01-01
  • 5個主流的Java開源IDE工具詳解

    5個主流的Java開源IDE工具詳解

    這篇文章主要介紹了5個主流的Java開源IDE工具,無論如何,Java在當(dāng)今使用的編程語言中始終排在前三名,在TIOBE索引中涉及700萬到1000萬的程序員和開發(fā)者
    2020-07-07
  • 關(guān)于jpa中無法刪除onetomany中many問題的解決

    關(guān)于jpa中無法刪除onetomany中many問題的解決

    這篇文章主要介紹了關(guān)于jpa中無法刪除onetomany中many問題的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Jackson多態(tài)序列化圖文詳解

    Jackson多態(tài)序列化圖文詳解

    jackson允許配置多態(tài)類型處理,當(dāng)進(jìn)行反序列話時,JSON數(shù)據(jù)匹配的對象可能有多個子類型,為了正確的讀取對象的類型,我們需要添加一些類型信息,下面這篇文章主要給大家介紹了關(guān)于Jackson多態(tài)序列化的相關(guān)資料,需要的朋友可以參考下
    2022-06-06
  • 詳解JAVA 內(nèi)存管理

    詳解JAVA 內(nèi)存管理

    這篇文章主要介紹了JAVA 內(nèi)存管理的相關(guān)資料,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下
    2020-07-07

最新評論