MP 主键策略与逻辑删除
2025/9/17大约 1 分钟
MyBatis-Plus 主键策略与逻辑删除
目录
主键策略
MyBatis-Plus 支持多种主键生成策略,适应不同业务需求。
策略 | 说明 |
---|---|
AUTO | 数据库自增 |
INPUT | 手动输入 |
ASSIGN_ID | 雪花算法(Long型,分布式) |
ASSIGN_UUID | UUID(String型) |
1. @TableId注解
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.IdType;
@Data
public class User {
@TableId(type = IdType.AUTO) // 数据库自增
private Long id;
private String name;
// ... 其他字段
}
2. 全局主键策略配置
在 application.yml
中统一配置所有实体主键策略:
mybatis-plus:
global-config:
db-config:
id-type: assign_id # 全局主键策略,推荐分布式用 assign_id
逻辑删除
逻辑删除即数据不物理删除,仅标记删除状态。
1. 数据库表添加字段
ALTER TABLE user ADD COLUMN deleted INT DEFAULT 0 COMMENT '逻辑删除标记 0正常 1删除';
2. 实体类加 @TableLogic
import com.baomidou.mybatisplus.annotation.TableLogic;
@Data
public class User {
private Long id;
private String name;
@TableLogic(value = "0", delval = "1") // 0正常,1删除
private Integer deleted;
}
3. 全局逻辑删除配置
mybatis-plus:
global-config:
db-config:
logic-delete-field: deleted # 逻辑删除字段名
logic-not-delete-value: 0 # 未删除值
logic-delete-value: 1 # 删除值
4. 逻辑删除与查询影响
- 删除时执行
update
,仅标记删除 - 查询自动过滤已删除数据
- 如需查询所有(含已删除),可自定义SQL
批量操作
- 批量删除:
userMapper.deleteBatchIds(Arrays.asList(1L,2L,3L));
- 批量查询:
userMapper.selectBatchIds(Arrays.asList(1L,2L,3L));
下一篇:MP 乐观锁与代码生成器