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 绝对值得一试!

相关推荐
一条泥憨鱼1 分钟前
苍穹外卖【day10| 来电提醒和客户催单】
java·后端·websocket·苍穹外卖
ly768911 分钟前
Spring Boot 3.2 虚拟线程在 Web 层与 JDBC 池的实践边界
前端·spring boot·后端·tomcat·jdbc·虚拟线程
盖伦发发23 分钟前
SpringCloud Alibaba Sentinel 教学:限流、熔断、降级、线程/信号量隔离、活动过载保护
后端·软件工程
AlfredZhao27 分钟前
Git 提交代码:从报错到 SSH 免密推送
github
_院长大人_1 小时前
使用 GitHub 作为图床:PicGo + Typora 自动上传完整教程
github·typora·picgo·图床
考虑考虑8 小时前
数据库中的EXISTS
运维·数据库·后端
郑州光合科技余经理9 小时前
国际版外卖系统:税率字段怎么和订单主流程解耦
android·java·开发语言·前端·后端·php·ai编程
毅炼9 小时前
Rover-Suite 开源发布:轻量服务注册中心与网关一体化方案
java·后端·系统架构·gateway
蚕豆糯米饭11 小时前
Github Copilot 研发效能提升实战指南
ai·github·copilot·ai编程
AlfredZhao13 小时前
GitHub 克隆他人私有仓库:从授权到下载
github