From 2388ceb4decc305e524b0c467dfc62d997316ecf Mon Sep 17 00:00:00 2001 From: Ice Date: Mon, 23 Oct 2023 23:42:19 +0800 Subject: [PATCH] =?UTF-8?q?add=EF=BC=9AListener=E7=BC=BA=E5=A4=B1=E6=B5=8B?= =?UTF-8?q?=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AccountAgeInsertListener.java | 13 ++++ .../AccountAgeInsertListenerFlag.java | 5 ++ .../AccountTableAnnoInsertListener.java | 13 ++++ .../missionListenerFix/BaseLogicDelete.java | 18 +++++ .../LogicDeleteInsertListener.java | 12 ++++ .../LogicDeleteInsertListenerFlag.java | 5 ++ .../AccountMissingListenerTestModel.java | 61 ++++++++++++++++ .../mybatisflex/test/common/ListenerTest.java | 69 +++++++++++++++++++ 8 files changed, 196 insertions(+) create mode 100644 mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/AccountAgeInsertListener.java create mode 100644 mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/AccountAgeInsertListenerFlag.java create mode 100644 mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/AccountTableAnnoInsertListener.java create mode 100644 mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/BaseLogicDelete.java create mode 100644 mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/LogicDeleteInsertListener.java create mode 100644 mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/LogicDeleteInsertListenerFlag.java create mode 100644 mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/model/AccountMissingListenerTestModel.java create mode 100644 mybatis-flex-test/mybatis-flex-spring-boot-test/src/test/java/com/mybatisflex/test/common/ListenerTest.java diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/AccountAgeInsertListener.java b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/AccountAgeInsertListener.java new file mode 100644 index 00000000..f1be67b4 --- /dev/null +++ b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/AccountAgeInsertListener.java @@ -0,0 +1,13 @@ +package com.mybatisflex.test.listener.missionListenerFix; + +import com.mybatisflex.annotation.InsertListener; +import com.mybatisflex.test.model.AccountMissingListenerTestModel; + +public class AccountAgeInsertListener implements InsertListener { + + @Override + public void onInsert(Object entity) { + AccountMissingListenerTestModel model = (AccountMissingListenerTestModel) entity; + model.setAge(18); + } +} diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/AccountAgeInsertListenerFlag.java b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/AccountAgeInsertListenerFlag.java new file mode 100644 index 00000000..3ad58d0a --- /dev/null +++ b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/AccountAgeInsertListenerFlag.java @@ -0,0 +1,5 @@ +package com.mybatisflex.test.listener.missionListenerFix; + +public interface AccountAgeInsertListenerFlag { + +} diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/AccountTableAnnoInsertListener.java b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/AccountTableAnnoInsertListener.java new file mode 100644 index 00000000..211c956f --- /dev/null +++ b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/AccountTableAnnoInsertListener.java @@ -0,0 +1,13 @@ +package com.mybatisflex.test.listener.missionListenerFix; + +import com.mybatisflex.annotation.InsertListener; +import com.mybatisflex.test.model.AccountMissingListenerTestModel; + +public class AccountTableAnnoInsertListener implements InsertListener { + + @Override + public void onInsert(Object entity) { + AccountMissingListenerTestModel model = (AccountMissingListenerTestModel) entity; + model.setUserName("测试缺失的监听器-userName"); + } +} diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/BaseLogicDelete.java b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/BaseLogicDelete.java new file mode 100644 index 00000000..edbe1775 --- /dev/null +++ b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/BaseLogicDelete.java @@ -0,0 +1,18 @@ +package com.mybatisflex.test.listener.missionListenerFix; + +import com.mybatisflex.annotation.Column; + +public class BaseLogicDelete implements LogicDeleteInsertListenerFlag { + + @Column(isLogicDelete = true) + private Boolean isDelete; + + public Boolean getDelete() { + return isDelete; + } + + public void setDelete(Boolean delete) { + isDelete = delete; + } + +} diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/LogicDeleteInsertListener.java b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/LogicDeleteInsertListener.java new file mode 100644 index 00000000..b20484b0 --- /dev/null +++ b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/LogicDeleteInsertListener.java @@ -0,0 +1,12 @@ +package com.mybatisflex.test.listener.missionListenerFix; + +import com.mybatisflex.annotation.InsertListener; + +public class LogicDeleteInsertListener implements InsertListener { + + @Override + public void onInsert(Object entity) { + BaseLogicDelete logicDeleteEntity = (BaseLogicDelete) entity; + logicDeleteEntity.setDelete(true); + } +} diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/LogicDeleteInsertListenerFlag.java b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/LogicDeleteInsertListenerFlag.java new file mode 100644 index 00000000..48e1a2a5 --- /dev/null +++ b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/listener/missionListenerFix/LogicDeleteInsertListenerFlag.java @@ -0,0 +1,5 @@ +package com.mybatisflex.test.listener.missionListenerFix; + +public interface LogicDeleteInsertListenerFlag { + +} diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/model/AccountMissingListenerTestModel.java b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/model/AccountMissingListenerTestModel.java new file mode 100644 index 00000000..12c48bee --- /dev/null +++ b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/main/java/com/mybatisflex/test/model/AccountMissingListenerTestModel.java @@ -0,0 +1,61 @@ +package com.mybatisflex.test.model; + +import com.mybatisflex.annotation.*; +import com.mybatisflex.test.listener.missionListenerFix.*; + +/** + * 缺失的监听器测试 + * + * @author Ice 2023/10/23 + * @version 1.0 + */ +@Table(value = "tb_account", onInsert = AccountTableAnnoInsertListener.class) +public class AccountMissingListenerTestModel extends BaseLogicDelete implements AccountAgeInsertListenerFlag { + + /** + * 主键。 + */ + @Id(keyType = KeyType.Auto) + private Long id; + + private String userName; + + private Integer age; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getUserName() { + return userName; + } + + public void setUserName(String userName) { + this.userName = userName; + } + + public Integer getAge() { + return age; + } + + public void setAge(Integer age) { + this.age = age; + } + +} + + + + + + + + + + + + diff --git a/mybatis-flex-test/mybatis-flex-spring-boot-test/src/test/java/com/mybatisflex/test/common/ListenerTest.java b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/test/java/com/mybatisflex/test/common/ListenerTest.java new file mode 100644 index 00000000..ac47f913 --- /dev/null +++ b/mybatis-flex-test/mybatis-flex-spring-boot-test/src/test/java/com/mybatisflex/test/common/ListenerTest.java @@ -0,0 +1,69 @@ +package com.mybatisflex.test.common; + +import com.mybatisflex.annotation.InsertListener; +import com.mybatisflex.core.FlexGlobalConfig; +import com.mybatisflex.core.exception.FlexAssert; +import com.mybatisflex.core.exception.FlexExceptions; +import com.mybatisflex.core.exception.locale.LocalizedFormats; +import com.mybatisflex.core.table.TableInfo; +import com.mybatisflex.core.table.TableInfoFactory; +import com.mybatisflex.core.util.CollectionUtil; +import com.mybatisflex.test.listener.missionListenerFix.*; +import com.mybatisflex.test.model.AccountMissingListenerTestModel; +import org.apache.ibatis.util.MapUtil; +import org.junit.jupiter.api.Test; +import org.springframework.boot.test.context.SpringBootTest; + +import java.util.Collections; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; + +/** + * 监听器测试 + * + * @author Ice 2023/10/23 + * @version 1.0 + */ +@SpringBootTest +class ListenerTest { + + @Test + void missingListenerTest() { + + AccountMissingListenerTestModel accountMissingListenerTestModel = new AccountMissingListenerTestModel(); + + //加入配置 + FlexGlobalConfig config = FlexGlobalConfig.getDefaultConfig(); + config.registerInsertListener(new LogicDeleteInsertListener(), LogicDeleteInsertListenerFlag.class); + config.registerInsertListener(new AccountAgeInsertListener(), AccountAgeInsertListenerFlag.class); + + //获取TableInfo + TableInfo tableInfo = TableInfoFactory.ofEntityClass(AccountMissingListenerTestModel.class); + + //执行测试 ===> Listener列表比对 + + Map, List> tempInsertListenerMap = new ConcurrentHashMap<>();//替代原本的缓存Map + + List insertListeners = MapUtil.computeIfAbsent(tempInsertListenerMap, AccountMissingListenerTestModel.class, aClass -> { + List globalListeners = FlexGlobalConfig.getDefaultConfig() + .getSupportedInsertListener(AccountMissingListenerTestModel.class, CollectionUtil.isNotEmpty(tableInfo.getOnInsertListeners())); + List allListeners = CollectionUtil.merge(tableInfo.getOnInsertListeners(), globalListeners); + Collections.sort(allListeners); + return allListeners; + }); + + List> resolvedInsertListeners = insertListeners.stream().map(insertListener -> insertListener.getClass()).collect(Collectors.toList()); + for (Class clazz : CollectionUtil.newArrayList(LogicDeleteInsertListener.class, AccountAgeInsertListener.class, AccountTableAnnoInsertListener.class)) { + if (!resolvedInsertListeners.contains(clazz)) { + throw FlexExceptions.wrap("缺失的InsertListener【%s】", clazz.getSimpleName()); + } + } + + //执行测试 ===> 插入结果比对 +// BaseMapper baseMapper = Mappers.ofEntityClass(accountMissingListenerTestModel.getClass()); +// baseMapper.insert(accountMissingListenerTestModel); + + } +}