04-MP物理删除&逻辑删除&条件构造器以及常用接口

一、物理删除

在Mp中,没有指定(配置)逻辑删除时,我们所做的删除都是物理删除。

1、根据Id删除

@Test
public void testDeleteById(){
    int result = userMapper.deleteById(5L);
system.out.println(result);
}

2、批量删除

@Test
public void testDeleteBatchIds() {
    int result = userMapper.deleteBatchIds(Arrays.asList(8, 9, 10));
system.out.println(result);
}

3、简单的条件删除

使用map构造删除的条件,只能构造等于的关系条件,一般不使用这个,使用wrapper进行

@Test
public void testDeleteByMap() {
HashMap<String, Object> map = new HashMap<>();
map.put("name", "Helen");
map.put("age", 18);
    int result = userMapper.deleteByMap(map);
system.out.println(result);
}

二、逻辑删除

逻辑删除就是修改删除的标识符,mp默认0为未删除,1为已删除。

物理删除:真实删除,将对应数据从数据库中删除,之后查询不到此条被删除数据
逻辑删除:假删除,将对应数据中代表是否被删除字段状态修改为“被删除状态”,之后在数据库中仍旧能看到此条数据记录
逻辑删除的使用场景: 可以进行数据恢复 有关联数据,不便删除

1、实现流程

  1. 首先在数据库表中建立一个表示符字段来表示是否已经逻辑删除。
  2. 其次要在实体类的标识删除的字段上加上一个注解@TableLogic来修饰,用来标识此属性子段为逻辑删除标识符。
  3. 配置(可选),application.properties 加入以下配置,此为默认值,如果你的默认值和mp默认的一样,该配置可无

mybatis-plus.global-config.db-config.logic-delete-value=1
mybatis-plus.global-config.db-config.logic-not-delete-value=0

配置逻辑删除后,整个项目的这个表都会自动配置逻辑删除,此外,对此表查询,更新操作时,会自动加上未删除的条件。

三、条件构造器和常用接口

1、wrapper

wrappe接口实现类
在这里插入图片描述

Wrapper : 条件构造抽象类,最顶端父类
AbstractWrapper : 用于查询条件封装,生成 sql 的 where 条件
QueryWrapper : 查询条件封装
UpdateWrapper : Update 条件封装
AbstractLambdaWrapper : 使用Lambda 语法
LambdaQueryWrapper :用于Lambda语法使用的查询Wrapper
LambdaUpdateWrapper : Lambda 更新封装Wrapper

但是我们一般最常用的是QueryWrapper ,其他的不常用

2、测试QueryWrapper

(1)查询提示表
查询方式说明
setSqlSelect设置 SELECT 查询字段
whereWHERE 语句,拼接 + WHERE 条件
andAND 语句,拼接 + AND 字段=值
andNewAND 语句,拼接 + AND (字段=值)
orOR 语句,拼接 + OR 字段=值
orNewOR 语句,拼接 + OR (字段=值)
eq等于=
allEq基于 map 内容等于=
ne不等于<>
gt大于>
ge大于等于>=
lt小于<
le小于等于<=
like模糊查询 LIKE
notLike模糊查询 NOT LIKE
inIN 查询
notInNOT IN 查询
isNullNULL 值查询
isNotNullIS NOT NULL
groupBy分组 GROUP BY
havingHAVING 关键词
orderBy排序 ORDER BY
orderAscASC 排序 ORDER BY
orderDescDESC 排序 ORDER BY
existsEXISTS 条件语句
notExistsNOT EXISTS 条件语句
betweenBETWEEN 条件语句
notBetweenNOT BETWEEN 条件语句
addFilter自由拼接 SQL
last拼接在最后,例如:last(“LIMIT 1”)
(2)ge、gt、le、lt、isNull、isNotNull示例

测试ge,其他类似
在这里插入图片描述

@Test
public void testSelectListOrderBy() {
QueryWrapper<User>queryWrapper = newQueryWrapper<>();
queryWrapper.orderByDesc("age", "id");
List<User>users = userMapper.selectList(queryWrapper);
users.forEach(System.out::println);
}

(3)eq,ne 示例
  @Test
    public void testSelectOne() {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.eq("name", "Tom");
        //只能返回一条记录,多余一条则抛出异常
        User user = userMapper.selectOne(queryWrapper);
        System.out.println(user);
    }

(4)between、notBetween示例

包含大小边界

@Test
    public void testSelectCount() {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        // where age between 20 and 30
        queryWrapper.between("age", 20, 30);
        Integer count = userMapper.selectCount(queryWrapper); //返回数据数量
        System.out.println(count);
    }
(5)like、notLike、likeLeft、likeRight示例

selectMaps()返回Map集合列表,通常配合select()使用
select指定查询哪个列,

%占位符的位置
like默认为 %e%
likeRight e%
likeLeft %e

  @Test
    public void testSelectMaps() {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper
                .select("name", "age")
                .like("name", "e")
                .likeRight("email", "5");
        List<Map<String, Object>> maps = userMapper.selectMaps(queryWrapper);//返回值是Map列表
        maps.forEach(System.out::println);
    }
(6)orderBy、orderByDesc、orderByAsc示例
 @Test
    public void testSelectListOrderBy() {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        // order by age desc
        queryWrapper.orderByDesc("age", "id");
        List<User> users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }
  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值