删除指令
基本概念
删除指令,即按id或id集合删除对象。
API类别 | 语言 | 按id删除 | 按id集合删除 |
---|---|---|---|
底层API | Java | 完整API
快捷API
| 完整API
快捷API
|
Kotlin | 完整API
快捷API
| 完整API
快捷API
| |
Spring Data API | Java |
|
|
Kotlin |
|
|
必要说明
-
在Java底层API中,具备两个方法以Command结尾的方法:
deleteCommand
和deleteAllCommand
。-
这两个方法创建指令但不立即执行,用户对指令做出更多配置后,在调用
execute
执行。以
deleteCommand
为例DeleteResult result = sqlClient
.getEntities()
.deleteCommand(BookStore.class, 1L) ❶
.setDissociateAction(BookProps.STORE, DissociateAction.SET_NULL) ❷
.execute(); ❸-
❶ 创建指令,但不执行
-
❷ 配置指令,可以用链式API进行多个配置 (这里仅仅示范了一个配置)
信息该配置的作用会在后文阐述,读者可以先忽略它
-
❸最终执行
kotlin不需要如此设计,因为其delete方法支持一个可选的Lambda参数用于配置,直接执行并附带上必要配置即可。
val result = sqlClient
.entities
.delete(BookStore.class, 1L) {
setDissociateAction(Book::store, DissociateAction.SET_NULL)
} -
-
-
在Spring Data API中,我们可以找到两个功能相同但名称不同的方法:
deleteByIds
和deleteAllById
。-
deleteByIds
: 和Jimmer底层快捷API风格一致的方法 -
deleteAllById
:继承org.springframework.data.repository.CrudRepository
后必需拥有方法,可以理解成deleteByIds
的别名。
-
-
删除指令支持两种操作
-
逻辑删除:并非真正删除数据,仅把对象的逻辑删除字段标记成“已经删除”。
-
物理删除:真正删除数据。
上述所有API,都通过Java方法重载或Kotlin默认参数支持一个可选的参数,其类型为
DeleteMode
,该参数类型为枚举,具有三个取值-
AUTO
: 不明确指定当前操作是逻辑删除还是物理删除-
如果被删除的实体类型具备逻辑删除字段,则执行逻辑删除
-
否则,执行物理删除
-
-
LOGICAL
: 明确指定当前操作是逻辑删除
-