MybatisPlus學習-03-配置日誌和CRUD擴充套件(未完)
阿新 • • 發佈:2021-09-09
MybatisPlus學習-03-配置日誌和CRUD擴充套件(未完)
配置日誌
使用mybatisplus後,所有的sql都是不可見的,開發時需要檢視,所以需要配置日誌
在配置檔案application中配置
#配置日誌
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
測試結果
CRUD擴充套件
insert
@Test void testInsert(){ User user = new User(); user.setName("gui"); user.setAge(23); user.setEmail("[email protected]"); int result = userMapper.insert(user); System.out.println(result); System.out.println(user); }
資料庫插入的id預設值為:全域性的唯一id
主鍵策略
預設ID_WORKER 全域性唯一id
分散式系統唯一id生成
雪花演算法:
SnowFlake 演算法,是 Twitter 開源的分散式 id 生成演算法。其核心思想就是:使用一個 64 bit 的 long 型的數字作為全域性唯一 id。這 64 個 bit 中,其中 1 個 bit 是不用的,然後用其中的 41 bit 作為毫秒數,用 10 bit 作為工作機器 id,12 bit 作為序列號。
主鍵自增
我們需要配置主鍵自增: 實體類欄位上 @TableId(type = IdType.AUTO) 資料庫欄位一定是自增的 ID主鍵設定原始碼解釋
public enum IdType {
AUTO(0),//ID自增
NONE(1),//未設定主鍵
INPUT(2),//手動輸入
ID_WORKER(3),//預設全域性唯一id
UUID(4),//全域性唯一id uuid
ID_WORKER_STR(5);//ID_WORKER字串表示法
}
update
@Test void testupdate(){ User user = new User(); user.setId(5L); user.setName("gui"); user.setAge(23); int i = userMapper.updateById(user); System.out.println(i); }
多次測試後發現,所有的sql都會自動動態配置。
自動填充
建立時間,修改時間!這些個操作一遍都是自動化完成的,不希望手動更新!
阿里巴巴開發手冊:所有的資料庫表:gmt_create、gmt_modified都要配置,且需要自動化!
方式一:資料庫級別
在表中新增欄位 create_time、update_time
方式二:程式碼級別
刪除資料庫預設值,更新操作
在實體類欄位屬性上添加註解
// 欄位新增填充內容
@TableField(fill = FieldFill.INSERT)
private Date create_time;
@TableField(fill = FieldFill.UPDATE)
private Date update_time;
編寫處理器來處理這個註解!
@Slf4j//日誌
@Component
public class MyMetaObjectHandler implements MetaObjectHandler {
@Override
public void insertFill(MetaObject metaObject) {
log.info("start insert fill ...");
this.setFieldValByName("create_time",new Date(),metaObject);
this.setFieldValByName("update_time",new Date(),metaObject);
}
@Override
public void updateFill(MetaObject metaObject) {
log.info("start update fill ...");
this.setFieldValByName("update_time",new Date(),metaObject);
}
}