Mybatis-Plus(核心功能篇 ==> 条件构造器

本章导学:

  • 什么是Wrapper
  • QueryWrapper的使用
  • UpdateWrapper的使用

 一、什么是Wrapper

我们之前调用MP的方法时,参数里往往会传一个null,Wrapper就是接收null的对象 

我们点进去BaseMapper里看看

  

 

这里面是MP为我们生成的一些方法,有些方法里有queryWrapper和updateWrapper参数。我们点进去Wrapper看看

  

可以看到,QueryWrapper和UpdateWrapper是AbstractWrapper的子类,而AbstractWrapper是Wrapper的子类。

img 

二、 QueryWrapper的使用

2.1、查询

2.1.1、查询brand_name为"白白白白不"的数据

    //查询brand_name为白白白白不的数据
    //等同于where brand_name = "白白白白不"'
    @Test
    void test01(){
        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<Brand>();
        brandQueryWrapper.eq("brand_name","白白白白不");
        Brand brand = mqDao.selectOne(brandQueryWrapper);
        System.out.println(brand);
    }

 生成的SQL如下


 2.1.2、查询ordered字段在10-50之间的数据

    //查询ordered字段在10-50之间的数据
    //等同于where ordered between 10 and 50;
    @Test
    void test02(){
        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<Brand>();
        brandQueryWrapper.between("ordered",10,50);
        mqDao.selectList(brandQueryWrapper).forEach(System.out::println);
    }

 生成的SQL如下

 


2.1.3、模糊查询

    //模糊查询
    //等同于where brand_name like concat('%',"松鼠",'%');
    @Test
    void test03(){
        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<Brand>();
        brandQueryWrapper.like("brand_name","松鼠");
        mqDao.selectList(brandQueryWrapper).forEach(System.out::println);
    }

  生成的SQL如下

 


 2.1.4、多条件查询

QueryWrapper也支持链式调用,我们可以接多个条件

    //Wrapper可以链式调用
    //查询名字包含松鼠,ordered字段在10-50之间,且description不为空的数据
    @Test
    void test04(){
        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<Brand>();
        brandQueryWrapper.like("brand_name","小米")
                            .between("ordered",10,50)
                            .isNotNull("description");
        mqDao.selectList(brandQueryWrapper).forEach(System.out::println);
    }

 生成的SQL如下

2.1.5、查询指定字段

    //查询指定字段
    @Test
    void test08() {
        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<Brand>();
        //用select方法把需要查询的字段添加进去
        brandQueryWrapper.select("brand_name","ordered");
        List<Map<String, Object>> maps = mqDao.selectMaps(brandQueryWrapper);
        maps.forEach(System.out::println);
    }

 生成的SQL如下

2.1.6、子查询

    //子查询,查询ID小于10的数据
    @Test
    void test09() {
        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<Brand>();
        //字段名,子查询语句
        brandQueryWrapper.inSql("id","select id from tb_brand where id <= 10");
        mqDao.selectList(brandQueryWrapper).forEach(System.out::println);
    }

 生成的SQL如下


2.2、排序 

2.2.1、查询全部信息,按名称降序排序,若相同,按id升序排序

    //查询全部信息,按名称降序排序,若相同,按id升序排序
    @Test
    void test05() {
        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<Brand>();
        brandQueryWrapper.orderByDesc("brand_name")
                .orderByAsc("id");
        mqDao.selectList(brandQueryWrapper).forEach(System.out::println);

    }

 生成的SQL如下


2.3、删除

2.3.1、删除description为空的数据


    //删除description为空的数据
    @Test
    void test06() {
        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<Brand>();
        brandQueryWrapper.isNull("description");
        int delete = mqDao.delete(brandQueryWrapper);
        System.out.println("result:"+delete);
    }

生成的SQL如下


 2.4、修改

2.4.1、修改名字包含松鼠,ordered字段为5的数据

    //修改名字包含松鼠,ordered字段在为5
    @Test
    void test07() {
        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<Brand>();
        brandQueryWrapper.like("brand_name","松鼠")
                            .eq("ordered",5);
        //模拟前台传来的数据封装到实体类
        Brand brand = new Brand();
        brand.setBrandName("老虎");
        brand.setOrdered(666);
        int result = mqDao.update(brand, brandQueryWrapper);
        System.out.println("result:"+result);
    }

这里的修改是动态SQL语句,不会把未设置的字段值修改为空

SQL如下


 三、UpdateWrapper的使用

 使用UpdateWrapper进行修改

    //updateWrapper进行修改,修改brand_name为老虎的信息
    @Test
    void test10() {
        UpdateWrapper<Brand> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("brand_name","老虎");
        //设置修改的内容
        updateWrapper.set("brand_name","猎豹");
        //这里我们没有实体类对象了,填null就好
        int update = mqDao.update(null, updateWrapper);
        System.out.println(update);
    }

生成的SQL如下

 

测试代码如下

package com.brrbaii;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.brrbaii.dao.MqDao;
import com.brrbaii.pojo.Brand;
import org.junit.jupiter.api.Test;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;
import java.util.Map;

@SpringBootTest
public class WrapperTest {

    @Autowired
    private MqDao mqDao;

    //查询brand_name为白白白白不的数据
    //等同于where brand_name = "白白白白不"'
    @Test
    void test01(){
        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<Brand>();
        brandQueryWrapper.eq("brand_name","白白白白不");
        Brand brand = mqDao.selectOne(brandQueryWrapper);
        System.out.println(brand);
    }

    //查询ordered字段在10-50之间的数据
    //等同于where ordered between 10 and 50;
    @Test
    void test02(){
        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<Brand>();
        brandQueryWrapper.between("ordered",10,50);
        mqDao.selectList(brandQueryWrapper).forEach(System.out::println);
    }

    //模糊查询
    //等同于where brand_name like concat('%',"松鼠",'%');
    @Test
    void test03(){
        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<Brand>();
        brandQueryWrapper.like("brand_name","松鼠");
        mqDao.selectList(brandQueryWrapper).forEach(System.out::println);
    }

    //Wrapper可以链式调用
    //查询名字包含松鼠,ordered字段在10-50之间,且description不为空的数据
    @Test
    void test04(){
        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<Brand>();
        brandQueryWrapper.like("brand_name","小米")
                            .between("ordered",10,50)
                            .isNotNull("description");
        mqDao.selectList(brandQueryWrapper).forEach(System.out::println);
    }


    //查询全部信息,按名称降序排序,若相同,按id升序排序
    @Test
    void test05() {
        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<Brand>();
        brandQueryWrapper.orderByDesc("brand_name")
                .orderByAsc("id");
        mqDao.selectList(brandQueryWrapper).forEach(System.out::println);

    }

    //删除description为空的数据
    @Test
    void test06() {
        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<Brand>();
        brandQueryWrapper.isNull("description");
        int delete = mqDao.delete(brandQueryWrapper);
        System.out.println("result:"+delete);
    }

    //修改名字包含松鼠,ordered字段在为5
    @Test
    void test07() {
        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<Brand>();
        brandQueryWrapper.like("brand_name","松鼠")
                            .eq("ordered",5);
        //模拟前台传来的数据封装到实体类
        Brand brand = new Brand();
        brand.setBrandName("老虎");
        brand.setOrdered(666);
        int result = mqDao.update(brand, brandQueryWrapper);
        System.out.println("result:"+result);
    }

    //查询指定字段
    @Test
    void test08() {
        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<Brand>();
        //用select方法把需要查询的字段添加进去
        brandQueryWrapper.select("brand_name","ordered");
        List<Map<String, Object>> maps = mqDao.selectMaps(brandQueryWrapper);
        maps.forEach(System.out::println);
    }

    //子查询,查询ID小于10的数据
    @Test
    void test09() {
        QueryWrapper<Brand> brandQueryWrapper = new QueryWrapper<Brand>();
        //用select方法把需要查询的字段添加进去
        brandQueryWrapper.inSql("id","select id from tb_brand where id <= 10");
        mqDao.selectList(brandQueryWrapper).forEach(System.out::println);
    }

    //updateWrapper进行修改,修改brand_name为老虎的信息
    @Test
    void test10() {
        UpdateWrapper<Brand> updateWrapper = new UpdateWrapper<>();
        updateWrapper.eq("brand_name","老虎");
        //设置修改的内容
        updateWrapper.set("brand_name","猎豹");
        //这里我们没有实体类对象了,填null就好
        int update = mqDao.update(null, updateWrapper);
        System.out.println(update);
    }



}

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

白日日白

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值