目录

我们之前添加了很多商品在购物车上,如果不想要了,就要删除,一个一个删除比较慢还比较费事,所以会给用户一个批量操作,也就是一个复选框,用户一次可以勾选多个也可以进行全选,然后删除一次就可以将购物车清空,这就需要用到批量删除的操作。
实现多条删除,对应的API方法:
int deleteBatchIds(@Param(Constants.COLLECTION) Collection extends Serializable> idList);
删除(根据ID批量删除),参数是一个集合,可以存放多个id值。
需求:根据传入的id集合将数据库表中的数据删除掉
- @SpringBootTest
- class Mybatisplus03DqlApplicationTests {
-
- @Autowired
- private UserDao userDao;
-
- @Test
- void testDelete(){
- //删除指定多条数据
- List
list = new ArrayList<>(); - list.add(1402551342481838081L);
- list.add(1402553134049501186L);
- list.add(1402553619611430913L);
- userDao.deleteBatchIds(list);
- }
- }
执行成功后,数据库表中的数据就会按照指定的id进行删除。
除了按照id集合进行批量删除,也可以按照id集合进行批量查询,对应API是:
List<T> selectBatchIds(@Param(Constants.COLLECTION) Collection extends Serializable> idList);
查询(根据ID 批量删除),参数是一个集合,可以存放多个id的值。
需求:根据传入的ID集合查询用户信息
- @SpringBootTest
- class Mybatisplus03DqlApplicationTests {
-
- @Autowired
- private UserDao userDao;
-
- @Test
- void testGetByIds(){
- //查询指定多条数据
- List
list = new ArrayList<>(); - list.add(1L);
- list.add(3L);
- list.add(4L);
- userDao.selectBatchIds(list);
- }
- }
查询结果会按照指定传入的id的值进行查询。
在删除表中数据时,有时会有主外键的关系,如果删除了一条数据,对应其他表的有主外键关系对应的数据也会删除
对应删除操作业务问题:
物理删除:业务数据在数据库中丢失,执行的是delete操作
逻辑删除:为数据设置是否可用状态字段,删除时设置状态字段为不可用状态,数据保留在数据库中,执行的update操作
1、修改数据表添加deleted列
字段名可以任意,内容可以自定义,比如0表示正常,1表示删除,可以在添加列的同时设置其默认值为0正常
2、实体类添加属性
- @Data
- //@TableName("tbl_user") 可以不写是因为配置了全局配置
- public class User {
-
- @TableId(type = IdType.ASSIGN_UUID)
- private String id;
- private String name;
- @TableField(value="pwd",select=false)
- private String password;
- private Integer age;
- private String tel;
- @TableField(exist=false)
- private Integer online;
- @TableLogic(value="0",delval="1")
- //value为正常数据的值,delval为删除数据的值
- private Integer deleted;
- }
3、运行删除方法
- @SpringBootTest
- class Mybatisplus03DqlApplicationTests {
-
- @Autowired
- private UserDao userDao;
-
- @Test
- void testDelete(){
- userDao.deleteById(1L);
- }
- }
逻辑删除走的是update操作,会将指定的字段修改成删除状态对应的值。
说明:
1、逻辑删除MP会将所有的查询都添加一个为删除的条件,也就是已经别删除的数据是不应该被查询出来的。如果还想把已经删除的数据都查询出来,就需要如下操作:
- @Mapper
- public interface UserDao extends BaseMapper
{ - //查询所有数据包含已经被删除的数据
- @Select("select * from tbl_user")
- public List
selectAll(); - }
2、如果每个表都有逻辑删除,不需要再每个模型类的属性上添加@TableLogic注解,可以在配置文件中添加全局配置,如下:
- mybatis-plus:
- global-config:
- db-config:
- # 逻辑删除字段名
- 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
| 名称 | @TableLogic |
| 类型 | 属性注解 |
| 位置 | 模型类中用于表示删除字段的属性定义上方 |
| 作用 | 标识该字段为进行逻辑删除的字段 |
| 相关属性 | value:逻辑未删除值 delval:逻辑删除值 |