MyBatis Plus配置日志CRUD的使用詳解
配置日志
我們所有的sql在mybatisplus是不可見的,所以在開發(fā)中需要配置日志,開發(fā)完成后,就可以取消日志了,因為日志也是損耗資源的
#配置日志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); }
這里可以看出系統(tǒng)幫我們自動生成了一個id
因為我數(shù)據(jù)庫設(shè)置的自增的,我把自增取消
再看一下插入結(jié)果,發(fā)現(xiàn)標紅了,因為默認會插入0為主鍵的id,我之前有一個0所以插入失敗
有的人的id如果是Lang類型的可能會默認插入很長的一段數(shù)字作為id,這里是雪花算法所生成的隨機數(shù),全球唯一(全局唯一id)對應(yīng)數(shù)據(jù)庫中的主鍵(uuid,自增id,雪花算法,redis,zookeeper)
主鍵生成策略
Twitter的snowflake算法(雪花算法)
snowflake是Twitter開源的分布式ID生成算法,結(jié)果是一個long型的ID。其核心思想是:使用41bit作為毫秒數(shù),10bit作為機器的ID(5個bit是數(shù)據(jù)中心,5個bit的機器ID),12bit作為毫秒內(nèi)的流水號(意味著每個節(jié)點在每毫秒可以產(chǎn)生 4096 個 ID),最后還有一個符號位,永遠是0。
要想設(shè)置主鍵的增加方式可以加入注解@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()這種在代碼中出現(xiàn),顯得很low而且消耗資源,我們可以使用注解的方式:
自動填充
創(chuàng)建時間,修改時間這些個操作一般都是自動化完成的不希望手動更新阿里巴巴研發(fā)手冊: 所有的數(shù)據(jù)庫表:gmt_create,gmt_modified(格林尼治時間)
方式一:數(shù)據(jù)庫方式(工作中一般是不允許修改數(shù)據(jù)庫的,因為牽扯的問題很多很復(fù)雜特別容易出bug還找不出來)
在表中的這兩個表,就是創(chuàng)建和修改時間
打鉤自動更新當前時間
如果還有自己手寫日期的小伙伴,以后你就不用一個一個添加了
代碼級別刪除數(shù)據(jù)庫默認值實體類的字段屬性上需要增加注釋@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;}
當然填充策略可以重寫,進行自定義填充策略
首先創(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); }}
測試
增加:
更新
可以看到時間已經(jīng)自動更新為當前的時間了
總結(jié)
到此這篇關(guān)于MyBatis Plus配置日志,CRUD的使用的文章就介紹到這了,更多相關(guān)MyBatis Plus配置日志CRUD的使用內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. Oracle數(shù)據(jù)庫PL/SQL過程調(diào)試的輸出方法2. SELECT...INTO的具體用法3. MySql導(dǎo)出后再導(dǎo)入數(shù)據(jù)時出錯問題4. Microsoft Office Access修改數(shù)據(jù)表名稱的方法5. Microsoft Office Access取消主鍵的方法6. Oracle 刪除大量表記錄操作分析總結(jié)7. DB2如何查看當前用戶模式及切換用戶8. ORA-06512數(shù)字或值錯誤字符串緩沖區(qū)太小異常詳解9. SQLite教程(八):命令行工具介紹10. MySQL算術(shù)/比較/邏輯/位/運算符與正則舉例詳解
