專案整合seata和mybatis-plus衝突問題解決方案:(分頁外掛失效, 自動填充失效, 自己注入的id生成器失效 找不到mapper檔案解決方案)
阿新 • • 發佈:2021-12-15
專案整合seata和mybatis-plus衝突問題解決方案:
分頁外掛失效,
自動填充失效,
自己注入的id生成器失效
找不到mapper檔案)
自動填充程式碼:
package com.from.mybatis.handler; import cn.hutool.core.date.DateUtil; import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; import org.apache.ibatis.reflection.MetaObject; import org.springframework.stereotype.Component; import java.util.Date; @Component public class MyBatisMetaObjectHandler implements MetaObjectHandler { /** * 自定義插入時填充規則 */ @Override public void insertFill(MetaObject metaObject) { // 注意是類屬性欄位名稱,不是表字段名稱 this.setFieldValByName("createTime", new Date(), metaObject);this.setFieldValByName("delFlag", 0, metaObject); } /** * 自定義更新時填充規則 */ @Override public void updateFill(MetaObject metaObject) { String now = DateUtil.now(); // 注意是類屬性欄位名稱,不是表字段名稱 this.setFieldValByName("updateTime", new Date(), metaObject); } } id生成器程式碼:package com.from.mybatis.config; import java.util.Date; import java.util.UUID; /** * compressed id generator, result id not great than 53bits before 2318-06-04. */ public class IdGenerator { private static IdGenerator instance = new IdGenerator(0); public static IdGenerator initDefaultInstance(int machineId) { instance = new IdGenerator(machineId); return instance; } public static IdGenerator getInstance() { return instance; } public static long generateId() { return instance.nextId(); } // total bits=53(max 2^53-1:9007199254740992-1) // private final static long TIME_BIT = 40; // max: 2318-06-04 private final static long MACHINE_BIT = 5; // max 31 private final static long SEQUENCE_BIT = 8; // 256/10ms /** * mask/max value */ private final static long MAX_MACHINE_NUM = -1L ^ (-1L << MACHINE_BIT); private final static long MAX_SEQUENCE = -1L ^ (-1L << SEQUENCE_BIT); private final static long MACHINE_LEFT = SEQUENCE_BIT; private final static long TIMESTMP_LEFT = MACHINE_BIT + SEQUENCE_BIT; private long machineId; private long sequence = 0L; private long lastStmp = -1L; private IdGenerator(long machineId) { if (machineId > MAX_MACHINE_NUM || machineId < 0) { throw new IllegalArgumentException( "machineId can't be greater than " + MAX_MACHINE_NUM + " or less than 0"); } this.machineId = machineId; } /** * generate new ID * * @return */ public synchronized long nextId() { long currStmp = getTimestamp(); if (currStmp < lastStmp) { throw new RuntimeException("Clock moved backwards. Refusing to generate id"); } if (currStmp == lastStmp) { sequence = (sequence + 1) & MAX_SEQUENCE; if (sequence == 0L) { currStmp = getNextTimestamp(); } } else { sequence = 0L; } lastStmp = currStmp; return currStmp << TIMESTMP_LEFT // | machineId << MACHINE_LEFT // | sequence; } private long getNextTimestamp() { long mill = getTimestamp(); while (mill <= lastStmp) { mill = getTimestamp(); } return mill; } private long getTimestamp() { // per 10ms return System.currentTimeMillis() / 10;// 10ms } public static Date parseIdTimestamp(long id) { return new Date((id >>> TIMESTMP_LEFT) * 10); } public static String uuid() { return UUID.randomUUID().toString().replaceAll("-", ""); } }