配置日志
我們所有的
sql在mybatisplus是不可見的,所以在開發中需要配置日志,開發完成后,就可以取消日志了,因為日志也是損耗資源的
#配置日志
mybatis-plus:
configuration:
log-impl: org.apache.ibatis.logging.stdout.StdOutImpl #僅控制臺輸出的日志

配置完日志后,后面的學習就需要注意自動生成的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);
}

這里可以看出系統幫我們自動生成了一個
id

因為我資料庫設定的自增的,我把自增取消

再看一下插入結果,發現標紅了,因為默認會插入0為主鍵的id,我之前有一個0所以插入失敗

有的人的id如果是Lang型別的可能會默認插入很長的一段數字作為id,這里是雪花演算法所生成的亂數,全球唯一(全域唯一id)
對應資料庫中的主鍵(uuid,自增id,雪花演算法,redis,zookeeper)
主鍵生成策略
Twitter的snowflake演算法(雪花演算法)
snowflake是
設定主鍵
要想設定主鍵的增加方式可以加入注解@TableId,因為是列舉類所以后面有很多方式

更新操作
//測驗更新
@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);
}

因為像new Date()這種在代碼中出現,顯得很low而且消耗資源,我們可以使用注解的方式:
自動填充
創建時間,修改時間這些個操作一般都是自動化完成的不希望手動更新
阿里巴巴研發手冊: 所有的資料庫表:gmt_create,gmt_modified(格林尼治時間)
方式一:資料庫方式(作業中一般是不允許修改資料庫的,因為牽扯的問題很多很復雜特別容易出bug還找不出來)
- 在表中的這兩個表,就是創建和修改時間

- 打鉤自動更新當前時間

如果還有自己手寫日期的小伙伴,以后你就不用一個一個添加了
代碼級別
- 洗掉資料庫默認值

- 物體類的欄位屬性上需要增加注釋
@TableField

原始碼如下,可以看到fill的方法就是填充方法
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;
}
當然填充策略可以重寫,進行自定義填充策略
首先創建一個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);
}
}
測驗
增加:

更新

可以看到時間已經自動更新為當前的時間了
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/103704.html
標籤:Java


