最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MyBatis-Plus邏輯刪除和字段自動(dòng)填充的實(shí)現(xiàn)

 更新時(shí)間:2022年08月09日 09:06:47   作者:Charge8  
本文主要介紹了MyBatis-Plus邏輯刪除和字段自動(dòng)填充的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

一、ID生成策略

1、使用@TableId注解

@TableId注解:主鍵注解

使用位置:實(shí)體類主鍵字段。

@Data
@ToString
@TableName("t_user")
public class UserDO {

	@TableId(value = "id", type = IdType.AUTO)
	private Long id;
    ...
}

2、全局ID生成策略

使用注解是針對一個(gè)POJO的。如果我們?nèi)质褂猛瑯拥?ID生成策略。那我們可以在全局配置文件中配置。就不需要在每個(gè) POJO上使用 主鍵@TableId注解了。

mybatis-plus:
  global-config:
    db-config:
      id-type: auto

二、邏輯刪除

官方文檔-邏輯刪除:https://baomidou.com/pages/6b03c5/

邏輯刪除: 通常會在表里添加一個(gè)邏輯刪除的字段,比如 enabled(1默認(rèn)有效,0無效)。

MyBatis-Plus會在用戶調(diào)用刪除操作時(shí)將數(shù)據(jù)修改 UPDATE set enabled = 0, 在查詢的時(shí)候會自動(dòng)拼接只查 where enabled=1的數(shù)據(jù)。

1、全局配置

在YAML配置文件中添加全局配置

mybatis-plus:
  global-config:
    db-config:
      logic-delete-field: flag # 全局邏輯刪除的實(shí)體字段名(since 3.3.0,配置后可以忽略不配置步驟2)
      logic-delete-value: 1 # 邏輯已刪除值(默認(rèn)為 1)
      logic-not-delete-value: 0 # 邏輯未刪除值(默認(rèn)為 0)

不推薦使用全局配置,使用 @TableLogic注解見名知意。

2、使用@TableLogic注解

@TableLogic注解:表字段邏輯處理注解(邏輯刪除)。

1)表中添加 enabled字段

ALTER TABLE `t_user` 
ADD COLUMN `enabled` tinyint(1) NOT NULL DEFAULT 1 COMMENT '是否有效(1-有效,0-無效)';

2)在POJO實(shí)體類字段上加上 @TableLogic注解。

	/**
	 * 代表邏輯刪除
	 * 	value:邏輯未刪除值
	 * 	delval:邏輯刪除值
	 */
	//@TableLogic
	@TableLogic(value = "1", delval = "0")
	private Integer enabled;

到此,邏輯刪除就配置好了,接下來測試一下刪除和查詢。

	@Test
	public void testRemoveById() {
		System.out.println(("----- removeById method test ------"));
		boolean remove = userService.removeById(12L);
        
		System.out.println("remove = " + remove);
	}

	@Test
	public void testGetById() {
		System.out.println(("----- getById method test ------"));
		UserDO userDO = userService.getById(12L);

		System.out.println("userDO = " + userDO);
	}

三、字段自動(dòng)填充

官方文檔-自動(dòng)填充功能:https://baomidou.com/pages/4c6bcf/

在項(xiàng)目中,一般我們都會定義 create_time和update_time字段。針對這兩個(gè)字段,每次CRUD操作時(shí),我們都需要手動(dòng)賦值或者數(shù)據(jù)庫默認(rèn)值。MyBatis-Plus提供了給字段自動(dòng)填充數(shù)據(jù)的功能。

`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '創(chuàng)建時(shí)間',
`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改時(shí)間',

使用 MyBatis-Plus的自動(dòng)填充功能,需要指定 fill類型,并且指定 自定義填充信息 MetaObjectHandler。

1、指定字段自動(dòng)填充

在POJO中,指定 create_time和update_time字段為自動(dòng)填充。

	 @TableField(value = "create_time", fill = FieldFill.INSERT)
	//@TableField(value = "create_time")
	private Date createTime;

	 @TableField(value = "update_time", fill = FieldFill.INSERT_UPDATE)
	//@TableField(value = "update_time")
	private Date updateTime;

fill類型的值如下:

注意:如果指定了 fill為后面三個(gè)時(shí),必須顯示設(shè)置值。否則為報(bào)錯(cuò):Column 'create_time' cannot be null。如果我們不顯示指定設(shè)置值,我們必須定義 MetaObjectHandler。

2、自定義MetaObjectHandler

@Slf4j
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {

    @Override
    public void insertFill(MetaObject metaObject) {
        log.info("start insert fill ....");
        /**
         *方法的四個(gè)個(gè)參數(shù):<br/>
         *      MetaObject metaObject: metaObject對象 <br/>
         *      String fieldName:POJO字段 <br/>
         *      Class<T> fieldType:字段類型 <br/>
         *      E fieldVal:自動(dòng)填充的字段值 <br/>
         */
        this.strictInsertFill(metaObject, "createTime", Date.class, new Date());
		//this.setFieldValByName("createTime", new Date(),metaObject);
        // 或者
        this.strictInsertFill(metaObject, "updateTime", () -> new Date(), Date.class);
    }

    @Override
    public void updateFill(MetaObject metaObject) {
        log.info("start update fill ....");
        this.strictInsertFill(metaObject, "updateTime", () -> new Date(), Date.class);
    }
}

3、測試

1)測試保存

	@Test
	public void testSave() {
		System.out.println(("----- save method test ------"));
		UserDO userDO = new UserDO();
		userDO.setUserName("趙云save fill");
		userDO.setAge(20);
		userDO.setHeight(1.88);
		userDO.setEmail("zhaoyun@123.com");
		boolean save = userService.save(userDO);

		System.out.println("save = " + save);
		System.out.println("userDO = " + userDO);
	}

2)測試刪除

	@Test
	public void testRemoveById() {
		System.out.println(("----- removeById method test ------"));
		boolean remove = userService.removeById(111L);
		System.out.println("remove = " + remove);
	}

四、執(zhí)行SQL分析打印

生產(chǎn)環(huán)境不推薦使用,開發(fā)環(huán)境可以使用。

官方文檔-自動(dòng)填充功能:https://baomidou.com/pages/833fab/

引入 p6spy依賴:

    <!-- https://mvnrepository.com/artifact/p6spy/p6spy -->
    <dependency>
      <groupId>p6spy</groupId>
      <artifactId>p6spy</artifactId>
      <version>3.9.1</version>
    </dependency>

1、添加 spy.properties配置文件

#3.2.1以上使用
modulelist=com.baomidou.mybatisplus.extension.p6spy.MybatisPlusLogFactory,com.p6spy.engine.outage.P6OutageFactory
#3.2.1以下使用或者不配置
#modulelist=com.p6spy.engine.logging.P6LogFactory,com.p6spy.engine.outage.P6OutageFactory
# 自定義日志打印
logMessageFormat=com.baomidou.mybatisplus.extension.p6spy.P6SpyLogger
#日志輸出到控制臺
appender=com.baomidou.mybatisplus.extension.p6spy.StdoutLogger
# 使用日志系統(tǒng)記錄 sql
#appender=com.p6spy.engine.spy.appender.Slf4JLogger
# 設(shè)置 p6spy driver 代理
deregisterdrivers=true
# 取消JDBC URL前綴
useprefix=true
# 配置記錄 Log 例外,可去掉的結(jié)果集有error,info,batch,debug,statement,commit,rollback,result,resultset.
excludecategories=info,debug,result,commit,resultset
# 日期格式
dateformat=yyyy-MM-dd HH:mm:ss
# 實(shí)際驅(qū)動(dòng)可多個(gè)
#driverlist=org.h2.Driver
# 是否開啟慢SQL記錄
outagedetection=true
# 慢SQL記錄標(biāo)準(zhǔn) 2 秒
outagedetectioninterval=2

2、修改數(shù)據(jù)源配置

修改驅(qū)動(dòng)類和 url的前綴。

spring:
  ## 數(shù)據(jù)源配置
  datasource:
    driver-class-name: com.p6spy.engine.spy.P6SpyDriver # com.mysql.cj.jdbc.Driver
    # url: jdbc:mysql://localhost:3306/mybatis_db?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT
    url: jdbc:p6spy:mysql://localhost:3306/mybatis_db?useUnicode=true&characterEncoding=utf8&useSSL=true&serverTimezone=GMT
    username: root
    password: 123456

3、測試查詢

多了紅色的部分,其實(shí)我們使用 MyBatisLogFormat插件也是可以得到真實(shí)執(zhí)行的SQL語句。

到此這篇關(guān)于MyBatis-Plus邏輯刪除和字段自動(dòng)填充的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)MyBatis-Plus邏輯刪除和字段自動(dòng)填充內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 簡單總結(jié)Java的反射機(jī)制的運(yùn)用

    簡單總結(jié)Java的反射機(jī)制的運(yùn)用

    這篇文章主要介紹了Java的反射機(jī)制的運(yùn)用,對一些常用的類作了一些說明,需要的朋友可以參考下
    2015-11-11
  • SpringBoot2.0 整合 Dubbo框架實(shí)現(xiàn)RPC服務(wù)遠(yuǎn)程調(diào)用方法

    SpringBoot2.0 整合 Dubbo框架實(shí)現(xiàn)RPC服務(wù)遠(yuǎn)程調(diào)用方法

    這篇文章主要介紹了SpringBoot2.0 整合 Dubbo框架 實(shí)現(xiàn)RPC服務(wù)遠(yuǎn)程調(diào)用 ,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-07-07
  • Java JDK動(dòng)態(tài)代理在攔截器和聲明式接口中的應(yīng)用小結(jié)

    Java JDK動(dòng)態(tài)代理在攔截器和聲明式接口中的應(yīng)用小結(jié)

    Java動(dòng)態(tài)代理技術(shù)通過反射機(jī)制在運(yùn)行時(shí)動(dòng)態(tài)生成代理類,實(shí)現(xiàn)對目標(biāo)對象方法的攔截和增強(qiáng),本文給大家介紹Java JDK動(dòng)態(tài)代理在攔截器和聲明式接口中的應(yīng)用小結(jié),感興趣的朋友跟隨小編一起看看吧
    2025-01-01
  • Java中值類型和引用類型的比較與問題解決

    Java中值類型和引用類型的比較與問題解決

    這篇文章主要給大家介紹了關(guān)于Java中值類型和引用類型的比較與問題解決方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用Java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-12-12
  • SpringBoot開發(fā)項(xiàng)目,引入JPA找不到findOne方法的解決

    SpringBoot開發(fā)項(xiàng)目,引入JPA找不到findOne方法的解決

    這篇文章主要介紹了SpringBoot開發(fā)項(xiàng)目,引入JPA找不到findOne方法的解決方案,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • MybatisPlus多表連接查詢的具體實(shí)現(xiàn)

    MybatisPlus多表連接查詢的具體實(shí)現(xiàn)

    MyBatis Plus是一款針對MyBatis框架的增強(qiáng)工具, 它提供了很多方便的方法來實(shí)現(xiàn)多表聯(lián)查,本文主要介紹了MybatisPlus多表連接查詢的具體實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2023-10-10
  • visual studio2022 JNI開發(fā)流程的實(shí)現(xiàn)

    visual studio2022 JNI開發(fā)流程的實(shí)現(xiàn)

    本文主要介紹了通過IDEA創(chuàng)建Maven項(xiàng)目并生成JNI頭文件,使用Visual Studio 2022構(gòu)建DLL,最后在Java中加載并調(diào)用C++實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-07-07
  • 詳解Java volatile 內(nèi)存屏障底層原理語義

    詳解Java volatile 內(nèi)存屏障底層原理語義

    為了保證內(nèi)存可見性,java 編譯器在生成指令序列的適當(dāng)位置會插入內(nèi)存屏障指令來禁止特定類型的處理器重排序。為了實(shí)現(xiàn) volatile 內(nèi)存語義,JMM 會分別限制這兩種類型的重排序類型
    2021-09-09
  • Spring Security SecurityContextHolder組件示例說明

    Spring Security SecurityContextHolder組件示例說明

    SpringSecurity的SecurityContextHolder組件是存儲當(dāng)前安全上下文的地方,包括認(rèn)證用戶信息,它支持全局訪問、線程局部存儲和上下文傳播,是SpringSecurity認(rèn)證和授權(quán)的核心,文章通過示例展示了如何訪問已認(rèn)證用戶的詳細(xì)信息、手動(dòng)設(shè)置認(rèn)證信息以及使用認(rèn)證信息保護(hù)方法
    2024-11-11
  • JavaEE實(shí)現(xiàn)基于SMTP協(xié)議的郵件發(fā)送功能

    JavaEE實(shí)現(xiàn)基于SMTP協(xié)議的郵件發(fā)送功能

    這篇文章主要為大家詳細(xì)介紹了JavaEE實(shí)現(xiàn)基于SMTP協(xié)議的郵件發(fā)送功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-05-05

最新評論

西青区| 甘德县| 宿迁市| 福海县| 宜兰县| 鹤峰县| 山阴县| 堆龙德庆县| 垫江县| 九龙坡区| 苗栗市| 滦平县| 根河市| 宁海县| 饶平县| 澳门| 三门县| 佛山市| 循化| 麻江县| 天柱县| 青海省| 余姚市| 金门县| 荣昌县| 甘德县| 柯坪县| 福安市| 西充县| 自治县| 九龙城区| 辽中县| 沾化县| 德安县| 东方市| 咸阳市| 安西县| 长沙市| 揭西县| 泰和县| 类乌齐县|