溫馨提示×

溫馨提示×

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

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

MyBatis Plus配置日志CRUD的使用詳解

發(fā)布時間:2020-09-27 05:32:15 來源:腳本之家 閱讀:272 作者:Asong臭狗屎 欄目:開發(fā)技術(shù)

配置日志

我們所有的sqlmybatisplus是不可見的,所以在開發(fā)中需要配置日志,開發(fā)完成后,就可以取消日志了,因?yàn)槿罩疽彩菗p耗資源的

#配置日志
mybatis-plus:
 configuration:
  log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #僅控制臺輸出的日志

MyBatis Plus配置日志CRUD的使用詳解

配置完日志后,后面的學(xué)習(xí)就需要注意自動生成的SQL,相信你們會喜歡上MybatisPlus

CRUD使用

Insert插入

 //測試插入
  @Test
  public void testInsert(){
    Air air = new Air();
    air.setDistrictId(4);
    air.setLastModifyTime(new Date());
    air.setMonitoringStation("哈哈哈哈哈哈");
    air.setMonitorTime(new Date());
    air.setPm10(33);
    air.setPm25(65);
    airMapper.insert(air);
    System.out.println(air);
  }

MyBatis Plus配置日志CRUD的使用詳解

這里可以看出系統(tǒng)幫我們自動生成了一個id

MyBatis Plus配置日志CRUD的使用詳解

因?yàn)槲覕?shù)據(jù)庫設(shè)置的自增的,我把自增取消

MyBatis Plus配置日志CRUD的使用詳解

再看一下插入結(jié)果,發(fā)現(xiàn)標(biāo)紅了,因?yàn)槟J(rèn)會插入0為主鍵的id,我之前有一個0所以插入失敗

MyBatis Plus配置日志CRUD的使用詳解

有的人的id如果是Lang類型的可能會默認(rèn)插入很長的一段數(shù)字作為id,這里是雪花算法所生成的隨機(jī)數(shù),全球唯一(全局唯一id)
對應(yīng)數(shù)據(jù)庫中的主鍵(uuid,自增id,雪花算法,redis,zookeeper)

主鍵生成策略

Twittersnowflake算法(雪花算法)

snowflakeTwitter開源的分布式ID生成算法,結(jié)果是一個long型的ID。其核心思想是:使用41bit作為毫秒數(shù),10bit作為機(jī)器的ID(5個bit是數(shù)據(jù)中心,5個bit的機(jī)器ID),12bit作為毫秒內(nèi)的流水號(意味著每個節(jié)點(diǎn)在每毫秒可以產(chǎn)生 4096 個 ID),最后還有一個符號位,永遠(yuǎn)是0。

要想設(shè)置主鍵的增加方式可以加入注解@TableId,因?yàn)槭敲杜e類所以后面有很多方式

MyBatis Plus配置日志CRUD的使用詳解

更新操作

//測試更新
  @Test
  public void testUpdate(){
    Air air = new Air();
    air.setId(9L);
    air.setDistrictId(4);
    air.setLastModifyTime(new Date());
    air.setMonitoringStation("哈");
    air.setMonitorTime(new Date());
    air.setPm10(33);
    air.setPm25(65);
    airMapper.updateById(air);
  }

MyBatis Plus配置日志CRUD的使用詳解

因?yàn)橄駈ew Date()這種在代碼中出現(xiàn),顯得很low而且消耗資源,我們可以使用注解的方式:

自動填充

創(chuàng)建時間,修改時間這些個操作一般都是自動化完成的不希望手動更新
阿里巴巴研發(fā)手冊: 所有的數(shù)據(jù)庫表:gmt_create,gmt_modified(格林尼治時間)

方式一:數(shù)據(jù)庫方式(工作中一般是不允許修改數(shù)據(jù)庫的,因?yàn)闋砍兜膯栴}很多很復(fù)雜特別容易出bug還找不出來)

在表中的這兩個表,就是創(chuàng)建和修改時間

MyBatis Plus配置日志CRUD的使用詳解

打鉤自動更新當(dāng)前時間

MyBatis Plus配置日志CRUD的使用詳解

如果還有自己手寫日期的小伙伴,以后你就不用一個一個添加了

代碼級別刪除數(shù)據(jù)庫默認(rèn)值MyBatis Plus配置日志CRUD的使用詳解實(shí)體類的字段屬性上需要增加注釋@TableField

MyBatis Plus配置日志CRUD的使用詳解

源碼如下,可以看到fill的方法就是填充方法

MyBatis Plus配置日志CRUD的使用詳解
MyBatis Plus配置日志CRUD的使用詳解

public class Air {
 @TableId(type = IdType.ASSIGN_ID)
 private Long id;
 private long districtId;
 @TableField(fill = FieldFill.INSERT) //插入的時候更新插入時間
 private Date monitorTime;
 private long pm10;
 private long pm25;
 private String monitoringStation;
 @TableField(fill = FieldFill.INSERT_UPDATE) //更新和插入的時候都更新時間
 private Date lastModifyTime;
}

當(dāng)然填充策略可以重寫,進(jìn)行自定義填充策略

首先創(chuàng)建一個MyMetaObjectHandler類(名字隨便)

@Slf4j //抓取日志
@Component //SpringBoot的注解 ,一定不要忘了吧處理器加到IOC容器中
public class MyMetaObjectHandler implements MetaObjectHandler {

  @Override
  public void insertFill(MetaObject metaObject) {
    log.info("start insert fill");
//源碼: setFieldValByName(String fieldName(字段名), Object fieldVal(字段值), MetaObject metaObjec(對象))
    this.setFieldValByName("monitor_time",new Date(),metaObject);
    this.setFieldValByName("last_modify_time",new Date(),metaObject);
  }

  @Override
  public void updateFill(MetaObject metaObject) {
    log.info("Start update fill....");
    this.setFieldValByName("last_modify_time",new Date(),metaObject);
  }
}

測試

增加:

MyBatis Plus配置日志CRUD的使用詳解

更新

MyBatis Plus配置日志CRUD的使用詳解

可以看到時間已經(jīng)自動更新為當(dāng)前的時間了

總結(jié)

到此這篇關(guān)于MyBatis Plus配置日志,CRUD的使用的文章就介紹到這了,更多相關(guān)MyBatis Plus配置日志CRUD的使用內(nèi)容請搜索億速云以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持億速云!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI