MyBatisPlus之DML编程控制
- 1. id生成策略控制(Insert)
- 1.1 id生成策略控制(@TableId注解)
- 1.2 全局策略配置
- id生成策略全局配置
- 表名前缀全局配置
- 2. 多记录操作(批量Delete/Select)
- 2.1 按照主键删除多条记录
- 2.2 根据主键查询多条记录
- 3. 逻辑删除(Delete/Update)
- 3.1 逻辑删除案例
- 3.1.1 数据库表中添加逻辑删除标记字段
- 3.1.2 实体类中添加对应字段,并设定当前字段为逻辑删除标记字段
- 3.1.3 配置逻辑删除字面值
1. id生成策略控制(Insert)
主键生成的策略有哪几种方式?
不同的表应用不同的id生成策略
- 日志:自增(1,2,3,4,……)
- 购物订单:特殊规则(FQ23948AK3843)
- 外卖单:关联地区日期等信息(10 04 20200314 34 91)
- 关系表:可省略id
- ……
1.1 id生成策略控制(@TableId注解)
-
名称:@TableId
-
类型:属性注解
-
位置:模型类中用于表示主键的属性定义上方
-
作用:设置当前类中主键属性的生成策略
-
相关属性
type:设置主键属性的生成策略,值参照IdType枚举值
1.2 全局策略配置
mybatis-plus:
global-config:
db-config:
id-type: assign_id
table-prefix: tbl_
id生成策略全局配置
表名前缀全局配置
2. 多记录操作(批量Delete/Select)
2.1 按照主键删除多条记录
//删除指定多条数据
List<Long> list = new ArrayList<>();
list.add(1402551342481838081L);
list.add(1402553134049501186L);
list.add(1402553619611430913L);
userDao.deleteBatchIds(list);
2.2 根据主键查询多条记录
//查询指定多条数据
List<Long> list = new ArrayList<>();
list.add(1L);
list.add(3L);
list.add(4L);
userDao.selectBatchIds(list);
3. 逻辑删除(Delete/Update)
在实际环境中,如果想删除一条数据,是否会真的从数据库中删除该条数据?
-
删除操作业务问题:业务数据从数据库中丢弃
-
逻辑删除:为数据设置是否可用状态字段,删除时设置状态字段为不可用状态,数据保留在数据库中
3.1 逻辑删除案例
3.1.1 数据库表中添加逻辑删除标记字段
3.1.2 实体类中添加对应字段,并设定当前字段为逻辑删除标记字段
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
@Data
public class User {
private Long id;
//逻辑删除字段,标记当前记录是否被删除
@TableLogic
private Integer deleted;
}
3.1.3 配置逻辑删除字面值
mybatis-plus:
global-config:
db-config:
table-prefix: tbl_
# 逻辑删除字段名
logic-delete-field: deleted
# 逻辑删除字面值:未删除为0
logic-not-delete-value: 0
# 逻辑删除字面值:删除为1
logic-delete-value: 1
逻辑删除本质:逻辑删除的本质其实是修改操作。如果加了逻辑删除字段,查询数据时也会自动带上逻辑删除字段。
执行SQL语句:
update tbl_user set deleted=1 where id = ? and deleted = 0