1. 程式人生 > 其它 >MybatisPlus學習-03-配置日誌和CRUD擴充套件(未完)

MybatisPlus學習-03-配置日誌和CRUD擴充套件(未完)

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);
    }
}