From 96095cb55a18dd370874e3da84c9ff996e39602f Mon Sep 17 00:00:00 2001 From: liaozan <378024053@qq.com> Date: Wed, 17 May 2023 17:56:36 +0800 Subject: [PATCH] Update BizId to support any type --- .../mybatis/annotation/BizId.java | 5 +++-- .../mybatis/base/BaseService.java | 12 ++++++------ .../mybatis/base/BaseServiceImpl.java | 17 +++++++---------- .../{core => biz}/BizIdColumnField.java | 18 ++++++++++-------- .../autoconfigure/mybatis/biz/BizIdHelper.java | 3 +-- .../mybatis/biz/BizIdInjectInterceptor.java | 8 +++----- .../autoconfigure/mybatis/biz/BizIdType.java | 4 ++-- .../DefaultTableConstraintChecker.java | 4 ++-- 8 files changed, 34 insertions(+), 37 deletions(-) rename starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/{core => biz}/BizIdColumnField.java (67%) diff --git a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/annotation/BizId.java b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/annotation/BizId.java index 5a509ef..dc3f453 100644 --- a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/annotation/BizId.java +++ b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/annotation/BizId.java @@ -1,5 +1,6 @@ package com.schbrain.framework.autoconfigure.mybatis.annotation; +import com.schbrain.framework.autoconfigure.mybatis.biz.BizIdColumnField; import com.schbrain.framework.autoconfigure.mybatis.biz.BizIdType; import java.lang.annotation.*; @@ -16,7 +17,7 @@ public @interface BizId { /** * 逻辑主键列名,为空时取字段名 * - * @see com.schbrain.framework.autoconfigure.mybatis.core.BizIdColumnField + * @see BizIdColumnField */ String value() default ""; @@ -25,4 +26,4 @@ public @interface BizId { */ BizIdType type() default BizIdType.ID_WORKER; -} \ No newline at end of file +} diff --git a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/base/BaseService.java b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/base/BaseService.java index b5a42d4..1b1ec7b 100644 --- a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/base/BaseService.java +++ b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/base/BaseService.java @@ -29,31 +29,31 @@ public interface BaseService extends IService { /** * 根据业务主键获取记录 */ - T getByBizId(String bizId); + T getByBizId(Object bizId); /** * 根据业务主键获取记录 * * @param throwIfNotFound 未获取到记录时是否抛异常 */ - T getByBizId(String bizId, boolean throwIfNotFound); + T getByBizId(Object bizId, boolean throwIfNotFound); /** * 根据业务主键获取记录 * * @param notFoundSupplier 未获取到记录时是否抛异常 */ - T getByBizId(String bizId, Supplier notFoundSupplier); + T getByBizId(Object bizId, Supplier notFoundSupplier); /** * 根据业务主键获取 */ - List listByBizIds(Collection bizIds); + List listByBizIds(Collection bizIds); /** * 根据业务主键获取 */ - Map getMapByBizIds(Collection bizIds); + Map getMapByBizIds(Collection bizIds); /** * 根据 id 更新,null 会被更新为 null @@ -70,4 +70,4 @@ public interface BaseService extends IService { */ boolean updateBatchByIdsWithNull(Collection entityList, int batchSize); -} \ No newline at end of file +} diff --git a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/base/BaseServiceImpl.java b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/base/BaseServiceImpl.java index a2c900e..79881ac 100644 --- a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/base/BaseServiceImpl.java +++ b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/base/BaseServiceImpl.java @@ -8,8 +8,8 @@ import com.schbrain.common.exception.BaseException; import com.schbrain.common.util.StreamUtils; import com.schbrain.common.util.support.ValidateSupport; import com.schbrain.framework.autoconfigure.mybatis.annotation.BizId; +import com.schbrain.framework.autoconfigure.mybatis.biz.BizIdColumnField; import com.schbrain.framework.autoconfigure.mybatis.biz.BizIdHelper; -import com.schbrain.framework.autoconfigure.mybatis.core.BizIdColumnField; import com.schbrain.framework.autoconfigure.mybatis.exception.NoSuchRecordException; import org.apache.ibatis.binding.MapperMethod.ParamMap; import org.springframework.beans.factory.InitializingBean; @@ -60,12 +60,12 @@ public class BaseServiceImpl, T extends BaseEntity> exte } @Override - public T getByBizId(String bizId) { + public T getByBizId(Object bizId) { return getByBizId(bizId, false); } @Override - public T getByBizId(String bizId, boolean throwIfNotFound) { + public T getByBizId(Object bizId, boolean throwIfNotFound) { Supplier notFoundSupplier = null; if (throwIfNotFound) { notFoundSupplier = () -> new NoSuchRecordException(entityClass); @@ -74,7 +74,7 @@ public class BaseServiceImpl, T extends BaseEntity> exte } @Override - public T getByBizId(String bizId, Supplier notFoundSupplier) { + public T getByBizId(Object bizId, Supplier notFoundSupplier) { assertBidColumnFieldExist(); T entity = query().eq(bizIdColumnField.getColumnName(), bizId).one(); if (entity == null && notFoundSupplier != null) { @@ -84,7 +84,7 @@ public class BaseServiceImpl, T extends BaseEntity> exte } @Override - public List listByBizIds(Collection bizIds) { + public List listByBizIds(Collection bizIds) { assertBidColumnFieldExist(); if (isEmpty(bizIds)) { return Collections.emptyList(); @@ -93,7 +93,7 @@ public class BaseServiceImpl, T extends BaseEntity> exte } @Override - public Map getMapByBizIds(Collection bizIds) { + public Map getMapByBizIds(Collection bizIds) { assertBidColumnFieldExist(); if (isEmpty(bizIds)) { return Collections.emptyMap(); @@ -129,9 +129,6 @@ public class BaseServiceImpl, T extends BaseEntity> exte if (this.bizIdColumnField != null) { throw new BaseException(String.format("@BizId can't more than one in Class: \"%s\"", entityClass.getName())); } - if (bizId.getType() != String.class) { - throw new BaseException("@BizId only support String field"); - } this.bizIdColumnField = new BizIdColumnField(entityClass, bizId); BizIdHelper.putBizColumnField(entityClass, bizIdColumnField); }, field -> field.isAnnotationPresent(BizId.class)); @@ -147,4 +144,4 @@ public class BaseServiceImpl, T extends BaseEntity> exte return mapperClass.getName() + StringPool.DOT + "alwaysUpdateSomeColumnById"; } -} \ No newline at end of file +} diff --git a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/core/BizIdColumnField.java b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdColumnField.java similarity index 67% rename from starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/core/BizIdColumnField.java rename to starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdColumnField.java index c458fbf..09f259b 100644 --- a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/core/BizIdColumnField.java +++ b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdColumnField.java @@ -1,8 +1,7 @@ -package com.schbrain.framework.autoconfigure.mybatis.core; +package com.schbrain.framework.autoconfigure.mybatis.biz; import com.schbrain.common.exception.BaseException; import com.schbrain.framework.autoconfigure.mybatis.annotation.BizId; -import com.schbrain.framework.autoconfigure.mybatis.biz.BizIdHelper; import lombok.Data; import java.lang.invoke.MethodHandle; @@ -29,22 +28,25 @@ public class BizIdColumnField { this.annotation = bizIdField.getAnnotation(BizId.class); this.columnName = BizIdHelper.getColumnName(entityClass, bizIdField, this.annotation); try { - this.bizIdFieldGetterMethodHandle = privateLookupIn(entityClass, lookup()).findGetter(entityClass, bizIdField.getName(), String.class); - this.bizIdFieldSetterMethodHandle = privateLookupIn(entityClass, lookup()).findSetter(entityClass, bizIdField.getName(), String.class); + Class fieldType = bizIdField.getType(); + Lookup lookup = privateLookupIn(entityClass, lookup()); + this.bizIdFieldGetterMethodHandle = lookup.findGetter(entityClass, bizIdField.getName(), fieldType); + this.bizIdFieldSetterMethodHandle = lookup.findSetter(entityClass, bizIdField.getName(), fieldType); } catch (NoSuchFieldException | IllegalAccessException e) { throw new BaseException(e.getMessage(), e); } } - public String getValue(T entity) { + @SuppressWarnings("unchecked") + public V getValue(T entity) { try { - return (String) bizIdFieldGetterMethodHandle.invoke(entity); + return (V) bizIdFieldGetterMethodHandle.invoke(entity); } catch (Throwable e) { throw new BaseException(e.getMessage(), e); } } - public void setValue(T entity, String value) { + public void setValue(T entity, V value) { try { bizIdFieldSetterMethodHandle.invoke(entity, value); } catch (Throwable e) { @@ -52,4 +54,4 @@ public class BizIdColumnField { } } -} \ No newline at end of file +} diff --git a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdHelper.java b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdHelper.java index f3cf6ab..09fe175 100644 --- a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdHelper.java +++ b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdHelper.java @@ -4,7 +4,6 @@ import com.baomidou.mybatisplus.core.metadata.TableInfo; import com.baomidou.mybatisplus.core.metadata.TableInfoHelper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.schbrain.framework.autoconfigure.mybatis.annotation.BizId; -import com.schbrain.framework.autoconfigure.mybatis.core.BizIdColumnField; import org.apache.ibatis.session.Configuration; import java.lang.reflect.Field; @@ -45,4 +44,4 @@ public class BizIdHelper { return bizIdField.getName(); } -} \ No newline at end of file +} diff --git a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdInjectInterceptor.java b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdInjectInterceptor.java index a5b81cc..09f64b5 100644 --- a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdInjectInterceptor.java +++ b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdInjectInterceptor.java @@ -1,8 +1,6 @@ package com.schbrain.framework.autoconfigure.mybatis.biz; import com.baomidou.mybatisplus.extension.plugins.inner.InnerInterceptor; -import com.schbrain.framework.autoconfigure.mybatis.core.BizIdColumnField; -import org.apache.commons.lang3.StringUtils; import org.apache.ibatis.executor.Executor; import org.apache.ibatis.mapping.MappedStatement; import org.apache.ibatis.mapping.SqlCommandType; @@ -32,11 +30,11 @@ public class BizIdInjectInterceptor implements InnerInterceptor { return; } if (bizIdType == BizIdType.ID_WORKER) { - String bizIdValue = bizColumnField.getValue(entity); - if (StringUtils.isBlank(bizIdValue)) { + Object bizIdValue = bizColumnField.getValue(entity); + if (bizIdValue == null) { bizColumnField.setValue(entity, bizIdType.generateBizId(entity)); } } } -} \ No newline at end of file +} diff --git a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdType.java b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdType.java index 12d0990..39a533b 100644 --- a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdType.java +++ b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/biz/BizIdType.java @@ -28,8 +28,8 @@ public enum BizIdType { /** * 生成 bizId 的值 */ - public String generateBizId(Object entity) { + public Object generateBizId(Object entity) { return generator.generate(entity); } -} \ No newline at end of file +} diff --git a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/constraint/DefaultTableConstraintChecker.java b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/constraint/DefaultTableConstraintChecker.java index 562c176..a3d52fb 100644 --- a/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/constraint/DefaultTableConstraintChecker.java +++ b/starters/mybatis-spring-boot-starter/src/main/java/com/schbrain/framework/autoconfigure/mybatis/constraint/DefaultTableConstraintChecker.java @@ -1,8 +1,8 @@ package com.schbrain.framework.autoconfigure.mybatis.constraint; import com.mysql.cj.MysqlType; +import com.schbrain.framework.autoconfigure.mybatis.biz.BizIdColumnField; import com.schbrain.framework.autoconfigure.mybatis.biz.BizIdHelper; -import com.schbrain.framework.autoconfigure.mybatis.core.BizIdColumnField; import com.schbrain.framework.autoconfigure.mybatis.exception.TableConstraintException; import static com.schbrain.framework.autoconfigure.mybatis.constant.MybatisConstants.*; @@ -141,4 +141,4 @@ public class DefaultTableConstraintChecker implements TableConstraintChecker { table.addError(new TableConstraintException(table.getTableName(), columnName, errorMsg)); } -} \ No newline at end of file +} -- GitLab