mirror of
https://gitee.com/mybatis-flex/mybatis-flex.git
synced 2025-12-07 00:58:24 +08:00
fix: #17 全局监听器父类注册是接口时无法触发监听器
This commit is contained in:
parent
f636bb53d1
commit
29cf1945be
@ -16,10 +16,10 @@
|
||||
package com.mybatisflex.core;
|
||||
|
||||
import com.mybatisflex.annotation.InsertListener;
|
||||
import com.mybatisflex.annotation.KeyType;
|
||||
import com.mybatisflex.annotation.SetListener;
|
||||
import com.mybatisflex.annotation.UpdateListener;
|
||||
import com.mybatisflex.core.dialect.DbType;
|
||||
import com.mybatisflex.annotation.KeyType;
|
||||
import org.apache.ibatis.session.Configuration;
|
||||
import org.apache.ibatis.session.SqlSessionFactory;
|
||||
|
||||
@ -162,11 +162,42 @@ public class FlexGlobalConfig {
|
||||
return entityUpdateListeners.get(entityClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取支持该 {@code entityClass} 的update监听器
|
||||
* <p>当registerClass是entityClass的本身或其超类时,则视为支持</p>
|
||||
*
|
||||
* @param entityClass 实体class
|
||||
* @return UpdateListener
|
||||
*/
|
||||
public UpdateListener getSupportedUpdateListener(Class<?> entityClass) {
|
||||
for (Class<?> registerClass : entityUpdateListeners.keySet()) {
|
||||
if (registerClass.isAssignableFrom(entityClass)) {
|
||||
return entityUpdateListeners.get(registerClass);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
||||
public InsertListener getInsertListener(Class<?> entityClass) {
|
||||
return entityInsertListeners.get(entityClass);
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取支持该 {@code entityClass} 的insert监听器
|
||||
* <p>当registerClass是entityClass的本身或其超类时,则视为支持</p>
|
||||
*
|
||||
* @param entityClass 实体class
|
||||
* @return InsertListener
|
||||
*/
|
||||
public InsertListener getSupportedInsertListener(Class<?> entityClass) {
|
||||
for (Class<?> registerClass : entityInsertListeners.keySet()) {
|
||||
if (registerClass.isAssignableFrom(entityClass)) {
|
||||
return entityInsertListeners.get(registerClass);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public Object getNormalValueOfLogicDelete() {
|
||||
return normalValueOfLogicDelete;
|
||||
|
||||
@ -778,15 +778,7 @@ public class TableInfo {
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
InsertListener globalInsertListener = null;
|
||||
Class<?> registerClass = entityClass;
|
||||
|
||||
while (globalInsertListener == null && registerClass != Object.class && registerClass != null) {
|
||||
globalInsertListener = FlexGlobalConfig.getDefaultConfig().getInsertListener(registerClass);
|
||||
registerClass = registerClass.getSuperclass();
|
||||
}
|
||||
|
||||
InsertListener globalInsertListener = FlexGlobalConfig.getDefaultConfig().getSupportedInsertListener(entityClass);
|
||||
if (globalInsertListener != null) {
|
||||
globalInsertListener.onInsert(entity);
|
||||
}
|
||||
@ -799,14 +791,7 @@ public class TableInfo {
|
||||
return;
|
||||
}
|
||||
|
||||
UpdateListener globalUpdateListener = null;
|
||||
Class<?> registerClass = entityClass;
|
||||
|
||||
while (globalUpdateListener == null && registerClass != Object.class && registerClass != null) {
|
||||
globalUpdateListener = FlexGlobalConfig.getDefaultConfig().getUpdateListener(registerClass);
|
||||
registerClass = registerClass.getSuperclass();
|
||||
}
|
||||
|
||||
UpdateListener globalUpdateListener = FlexGlobalConfig.getDefaultConfig().getSupportedUpdateListener(entityClass);
|
||||
if (globalUpdateListener != null) {
|
||||
globalUpdateListener.onUpdate(entity);
|
||||
}
|
||||
|
||||
@ -93,6 +93,12 @@
|
||||
<artifactId>junit</artifactId>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.assertj</groupId>
|
||||
<artifactId>assertj-core</artifactId>
|
||||
<version>3.22.0</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
</project>
|
||||
@ -10,8 +10,8 @@ import java.util.Date;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Table(value = "tb_account",dataSource = "ds2",onSet = AccountOnSetListener.class)
|
||||
public class Account extends BaseAccount implements Serializable {
|
||||
@Table(value = "tb_account", dataSource = "ds2", onSet = AccountOnSetListener.class)
|
||||
public class Account extends BaseAccount implements Serializable, AgeAware {
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
@ -26,7 +26,7 @@ public class Account extends BaseAccount implements Serializable {
|
||||
@NotBlank
|
||||
private Date birthday;
|
||||
|
||||
@Column(typeHandler = Fastjson2TypeHandler.class,isLarge = true)
|
||||
@Column(typeHandler = Fastjson2TypeHandler.class, isLarge = true)
|
||||
private Map<String, Object> options;
|
||||
|
||||
@Column(isLogicDelete = true)
|
||||
@ -49,10 +49,12 @@ public class Account extends BaseAccount implements Serializable {
|
||||
this.userName = userName;
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getAge() {
|
||||
return age;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setAge(int age) {
|
||||
this.age = age;
|
||||
}
|
||||
|
||||
@ -0,0 +1,14 @@
|
||||
package com.mybatisflex.test;
|
||||
|
||||
/**
|
||||
* 有年龄的
|
||||
*
|
||||
* @author snow
|
||||
* @since 2023/4/28
|
||||
*/
|
||||
public interface AgeAware {
|
||||
|
||||
void setAge(int age);
|
||||
|
||||
int getAge();
|
||||
}
|
||||
@ -0,0 +1,23 @@
|
||||
package com.mybatisflex.test;
|
||||
|
||||
import com.mybatisflex.annotation.InsertListener;
|
||||
|
||||
/**
|
||||
* 年龄处理监听器
|
||||
*
|
||||
* @author snow
|
||||
* @since 2023/4/28
|
||||
*/
|
||||
public class AgeHandleListener implements InsertListener {
|
||||
|
||||
@Override
|
||||
public void onInsert(Object entity) {
|
||||
if (entity instanceof AgeAware) {
|
||||
AgeAware ageAware = (AgeAware) entity;
|
||||
int age = ageAware.getAge();
|
||||
if (age < 0) {
|
||||
ageAware.setAge(0);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -0,0 +1,47 @@
|
||||
package com.mybatisflex.test;
|
||||
|
||||
import com.mybatisflex.core.FlexGlobalConfig;
|
||||
import com.mybatisflex.core.MybatisFlexBootstrap;
|
||||
import org.assertj.core.api.WithAssertions;
|
||||
import org.junit.Test;
|
||||
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
|
||||
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseType;
|
||||
|
||||
import javax.sql.DataSource;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 监听器测试
|
||||
*
|
||||
* @author snow
|
||||
* @since 2023/4/28
|
||||
*/
|
||||
public class ListenerTest implements WithAssertions {
|
||||
|
||||
// 注册父类接口监听器
|
||||
@Test
|
||||
public void onInsertInterface() throws Exception {
|
||||
DataSource dataSource = new EmbeddedDatabaseBuilder()
|
||||
.setType(EmbeddedDatabaseType.H2)
|
||||
.addScript("schema.sql")
|
||||
.build();
|
||||
// 注册全局监听器
|
||||
FlexGlobalConfig defaultConfig = FlexGlobalConfig.getDefaultConfig();
|
||||
defaultConfig.registerInsertListener(new AgeHandleListener(), AgeAware.class);
|
||||
|
||||
MybatisFlexBootstrap bootstrap = MybatisFlexBootstrap.getInstance()
|
||||
.setDataSource(dataSource)
|
||||
.addMapper(AccountMapper.class)
|
||||
.start();
|
||||
|
||||
AccountMapper accountMapper = bootstrap.getMapper(AccountMapper.class);
|
||||
Account account = new Account();
|
||||
account.setAge(-2);
|
||||
account.setUserName("on insert");
|
||||
account.setBirthday(new Date());
|
||||
accountMapper.insert(account);
|
||||
|
||||
Account one = accountMapper.selectOneById(account.getId());
|
||||
assertThat(one.getAge()).isEqualTo(0);
|
||||
}
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user