Kite 实现逻辑删除

Kite 实现逻辑删除

逻辑删除是一种数据处理方式,指在删除数据时,并非真正从数据库中物理删除记录,而是通过标记的方式表示该记录已被删除。这样做的好处是可以保留数据的完整性和可追溯性,同时也便于在需要时恢复被删除的数据。

逻辑删除配置

Kite 提供了逻辑删除的配置选项,你可以在 LogicalDeletionConfig 中进行配置。

  • Java
java 复制代码
import com.tang.kite.config.logical.LogicalDeletionConfig;

// 启用逻辑删除
LogicalDeletionConfig.enabled = true;

// 设置逻辑删除字段名
LogicalDeletionConfig.fieldName = "deleted";

// 自定义逻辑删除处理器
LogicalDeletionConfig.logicalDeletionProcessor = new CustomLogicalDeletionProcessor();
  • Kotlin
kotlin 复制代码
import com.tang.kite.config.logical.LogicalDeletionConfig

// 启用逻辑删除
LogicalDeletionConfig.enabled = true

// 设置逻辑删除字段名
LogicalDeletionConfig.fieldName = "deleted"

// 自定义逻辑删除处理器
LogicalDeletionConfig.logicalDeletionProcessor = CustomLogicalDeletionProcessor()

逻辑删除注解

Kite 提供了 @LogicalDeletion 注解,用于在实体类中指定逻辑删除字段。该注解的优先级大于全局配置的 fieldName

使用示例

  • Java
java 复制代码
import com.tang.kite.annotation.logical.LogicalDeletion;

public class Account {

    private Long id;
    private String name;
    @LogicalDeletion
    private String deleted;

}
  • Kotlin
kotlin 复制代码
import com.tang.kite.annotation.logical.LogicalDeletion

class Account {

    var id: Long? = null
    var name: String? = null
    @LogicalDeletion
    var deleted: String? = null

}

逻辑删除处理器

方法列表

方法名 描述 返回值
isTableNeedProcessing(tableClass: Class<*>) 判断特定表类是否需要处理。默认返回 true,处理所有表。 Boolean
process(field: Field) 处理指定的数据库字段以生成逻辑删除值。 LogicalDeletionValue

默认实现

Kite 提供了一个默认的逻辑删除处理器 DefaultLogicalDeletionProcessor,它支持多种数据类型的逻辑删除值生成:

数据类型 正常值 删除值
Boolean false true
Byte 0 1
Short 0 1
Int 0 1
Long 0L 1L
Char '0' '1'
String "0" "1"

自定义处理器

你可以实现 LogicalDeletionProcessor 接口来自定义逻辑删除处理器:

  • Java
java 复制代码
import com.tang.kite.config.logical.LogicalDeletionProcessor;
import com.tang.kite.config.logical.LogicalDeletionValue;
import java.lang.reflect.Field;

public class CustomLogicalDeletionProcessor implements LogicalDeletionProcessor {

    @Override
    public boolean isTableNeedProcessing(Class<?> tableClass) {
        return tableClass == Account.class;
    }

    @Override
    public LogicalDeletionValue process(Field field) {
        return new LogicalDeletionValue("N", "Y");
    }

}
  • Kotlin
kotlin 复制代码
import com.tang.kite.config.logical.LogicalDeletionProcessor
import com.tang.kite.config.logical.LogicalDeletionValue
import java.lang.reflect.Field

class CustomLogicalDeletionProcessor : LogicalDeletionProcessor {

    override fun isTableNeedProcessing(tableClass: Class<*>): Boolean {
        return tableClass == Account::class.java

    }

    override fun process(field: Field): LogicalDeletionValue {
        return LogicalDeletionValue("N", "Y")
    }

}

配置自定义处理器

  • Java
java 复制代码
LogicalDeletionConfig.logicalDeletionProcessor = CustomLogicalDeletionProcessor();
  • Kotlin
kotlin 复制代码
LogicalDeletionConfig.logicalDeletionProcessor = CustomLogicalDeletionProcessor()

逻辑删除管理器

Kite 提供了 LogicalDeletionManager 类,用于在特定场景下跳过逻辑删除或者临时使用逻辑删除。

方法列表

  • Java
方法名 描述 参数 返回值
withLogical(block: Runnable) 临时使用逻辑删除执行代码块 block: Runnable 要执行的代码块
withLogical(block: Supplier): T 临时使用逻辑删除执行代码块并返回结果 block: Supplier 要执行的代码块 T 代码块的返回值
withSkip(block: Runnable) 跳过逻辑删除执行代码块 block: Runnable 要执行的代码块
withSkip(block: Supplier): T 跳过逻辑删除执行代码块并返回结果 block: Supplier 要执行的代码块 T 代码块的返回值
  • Kotlin
方法名 描述 参数 返回值
withLogical(block: () -> Unit) 临时使用逻辑删除执行代码块 block: () -> Unit 要执行的代码块
withLogical(block: () -> T): T 临时使用逻辑删除执行代码块并返回结果 block: () -> T 要执行的代码块 T 代码块的返回值
withSkip(block: () -> Unit) 跳过逻辑删除执行代码块 block: () -> Unit 要执行的代码块
withSkip(block: () -> T): T 跳过逻辑删除执行代码块并返回结果 block: () -> T 要执行的代码块 T 代码块的返回值

使用示例

临时使用逻辑删除

  • Java
java 复制代码
import com.tang.kite.logical.LogicalDeletionManager;

LogicalDeletionManager.withLogical(() -> {
    accountMapper.deleteById(1L);
});
  • Kotlin
kotlin 复制代码
import com.tang.kite.logical.LogicalDeletionManager

LogicalDeletionManager.withLogical {
    accountMapper.deleteById(1L)
}

跳过逻辑删除

  • Java
java 复制代码
import com.tang.kite.logical.LogicalDeletionManager;

LogicalDeletionManager.withSkip(() -> {
    accountMapper.deleteById(1L);
});
  • Kotlin
kotlin 复制代码
import com.tang.kite.logical.LogicalDeletionManager

LogicalDeletionManager.withSkip {
    accountMapper.deleteById(1L)
}

官方文档

详细的使用文档请参考:

源码

Kite 的源码托管在 GitHub 和 Gitee 上,您可以在以下地址查看和贡献:

总结

Kite 是一个功能强大、易于使用的 ORM 框架,它通过全自动映射和简洁的 API,大大简化了数据库操作的开发工作。无论是在 Kotlin 项目还是 Java 项目中,都能提供高效、便捷的数据库访问体验。

如果您正在寻找一个轻量级、高性能的 ORM 框架,Kite 绝对值得一试!

相关推荐
tongluowan00716 小时前
一个请求在Spring MVC 中是怎么流转的
java·spring·mvc
夜郎king17 小时前
Spring AI 对接大模型开发易错点总结与实战解决办法
java·人工智能·spring
oradh17 小时前
Oracle数据库中的Java概述
java·数据库·oracle·sql基础·oracle数据库java概述
组合缺一17 小时前
Java AI 框架三国杀:Solon AI vs Spring AI vs LangChain4j 深度对比
java·人工智能·spring·ai·langchain·llm·solon
阿kun要赚马内18 小时前
后端数据操作组合:Pydantic与ORM
后端·python·orm·sqlalchemy
c++之路18 小时前
适配器模式(Adapter Pattern)
java·算法·适配器模式
吴声子夜歌18 小时前
Java——接口的细节
java·开发语言·算法
阿拉金alakin18 小时前
深入理解 Java 锁机制:CAS 原理、synchronized 优化与主流锁策略全总结
java·开发语言
myheartgo-on18 小时前
Java—方 法
java·开发语言·算法·青少年编程
赏金术士18 小时前
Kotlin ViewModel
android·kotlin