0
点赞
收藏
分享

微信扫一扫

MyBatisPlus——条件构造器

mm_tang 2022-05-02 阅读 56

文章目录

一、条件构造器简介

查询mybatisPlus源码可以看到,条件构造器wrapper继承情况:

  1. Wrapper:条件构造器,最顶端的一个类
  2. AbstractWrapper:用于sql语句条件的封装,主要是封装where条件
  3. QueryWrapper:查询条件封装
  4. UpdateWrapper:更新条件封装
  5. AbstractLambdaWrapper:具有Lambda语法的条件封装
  6. LambdaQueryWrapper:具有Lambda语法查询条件封装
  7. LambdaUpdateWrapper:具有Lambda语法更新条件封装

在这里插入图片描述

二、逻辑删除注解

物理删除:将数据从数据库直接删除,之后无法查询到被删除的信息。
逻辑删除:设置一个删除的状态码,为0未删除,为1逻辑删除,但是还是存在数据库中,之后还可以查询到,解决了数据误删除无法恢复的问题。
在表中加一个字段isDelete,数据类型为int,为0未删除,为1逻辑删除。加上 @TableLogic注解MyBatisPlus就可以为我们自动实现。

    @TableLogic
    @TableField("isdelete")
    private Integer isDelete;

三、条件构造器的用法

1、QueryWrapper

查询水果信息表里面f_id包含t,并且价格在3与5之间的水果

    @Test
    public void queryWrapperTest01(){
//        查询水果信息表里面f_id包含t,并且价格在3与5之间的水果
        QueryWrapper<Fruit> queryWrapper = new QueryWrapper<>();
        queryWrapper.like("f_id","t").
                between("f_price",3,10);
        List<Fruit> fruits = fruitMapper.selectList(queryWrapper);
        for (Fruit fruit : fruits) {
            System.out.println(fruit);
        }
    }

在这里插入图片描述

查询水果信息,按照s_id升序排序,再按照价格降序排序

    @Test
    public void queryWrapperOrderTest(){
//        查询水果信息,按照s_id升序排序,再按照价格降序排序
        QueryWrapper<Fruit> queryWrapper = new QueryWrapper<>();
        queryWrapper.orderByAsc("s_id").orderByDesc("f_price");
        List<Fruit> fruits = fruitMapper.selectList(queryWrapper);
        for (Fruit fruit : fruits) {
            System.out.println(fruit);
        }
    }

在这里插入图片描述
删除价格小于8的水果

    @Test
    public void queryWrapperDeleteTest(){
//        删除价格小于3的水果
        QueryWrapper<Fruit> queryWrapper = new QueryWrapper<>();
        queryWrapper.lt("f_price",8);
        int delete = fruitMapper.delete(queryWrapper);
    }

在这里插入图片描述

加上 @TableLogic注解后删除都不是物理删除,而是逻辑删除,就是将数据库里面删除状态码由0变成1.
在这里插入图片描述

将价格大于10的水果数量都变成500

    @Test
    public void queryWrapperUpdateTest(){
//        将价格大于10的水果数量都变成500
        QueryWrapper<Fruit> queryWrapper = new QueryWrapper<>();
        queryWrapper.gt("f_price",10);
        Fruit fruit = new Fruit();
        fruit.setQuantity(500);
        fruitMapper.update(fruit,queryWrapper);
    }

在这里插入图片描述

2、UpdateWrapper

将价格大于10,并且数量大于100或者名称含有c的水果的价格修改为9.99

    @Test
    public void updateWrapperUpdateTest(){
//        将价格大于10,并且数量大于100或者名称含有c的水果的价格修改为9.99
        UpdateWrapper<Fruit> updateWrapper = new UpdateWrapper<>();
        updateWrapper.gt("f_price",10).
                and(i ->i.gt("quantity",100).
                        or().like("f_name","c"));
        updateWrapper.set("f_price",9.99f);
        fruitMapper.update(null,updateWrapper);
    }

在这里插入图片描述

3、LambdaQueryWrapper

查询水果名包含fName,水果价格小于fPrice,水果数量大于quantity的水果信息。
前提条件为fName不为空串,不为null,fPrice和quantity都不为null

    @Test
    public void LambdaQueryWrapperTest(){
//        查询水果名包含fName,水果价格小于fPrice,水果数量大于quantity的水果信息。
//        前提条件为fName不为空串,不为null,fPrice和quantity都不为null
        String fName = "a";
        Integer fPrice = null;
        Integer quantity = 100;
        LambdaQueryWrapper<Fruit> lambdaQueryWrapper = new LambdaQueryWrapper<>();
        lambdaQueryWrapper.like(StringUtils.isNotBlank(fName),Fruit::getFName,fName).
                lt(fPrice != null,Fruit::getFPrice,fPrice).
                gt(quantity != null,Fruit::getQuantity,quantity);
        List<Fruit> fruits = fruitMapper.selectList(lambdaQueryWrapper);
        for (Fruit fruit : fruits) {
            System.out.println(fruit);
        }
    }

在这里插入图片描述

4、LambdaUpdateWrapper

修改水果名包含fName,水果价格小于fPrice,水果数量大于quantity的水果信息的水果名为fName。
前提条件为fName不为空串,不为null,fPrice和quantity都不为null

    @Test
    public void LambdaUpdateWrapperTest(){
//        修改水果名包含fName,水果价格小于fPrice,水果数量大于quantity的水果信息的水果名为fName。
//        前提条件为fName不为空串,不为null,fPrice和quantity都不为null
        String fName = "a";
        Integer fPrice = 10;
        Integer quantity = 100;
        LambdaUpdateWrapper<Fruit> lambdaUpdateWrapper = new LambdaUpdateWrapper<>();
        lambdaUpdateWrapper.like(StringUtils.isNotBlank(fName),Fruit::getFName,fName).
                lt(fPrice != null,Fruit::getFPrice,fPrice).
                gt(quantity != null,Fruit::getQuantity,quantity);
        lambdaUpdateWrapper.set(Fruit::getFName,fName);
        fruitMapper.update(null,lambdaUpdateWrapper);
    }

在这里插入图片描述
修改成功:
在这里插入图片描述

举报

相关推荐

0 条评论