当前位置: 首页 > news >正文

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);
    }



}

相关文章:

  • vue2.X+Cesium1.93Demo
  • 适配器模式【Java设计模式】
  • 聊一下接口幂等性
  • springboot源码理解十二、springMVC功能
  • 论文写作教程之学术论文中需要做好的10 件事
  • AutoAugment 学习
  • 产品经理认证(NPDP)—备考错题集二
  • R语言ggplot2可视化:使用ggpubr包的ggmaplot函数可视化MA图(MA-plot)、genenames参数配置点标签对应的基因名称
  • 程序兼容性的定义 windows7的兼容性
  • 【C#】接口的基本概念
  • 四嗪 PEG 接头 下篇:Tetrazine-PEG5-NH-CH2CH2-4-Phenol试剂
  • MySQL数据库忘记密码怎么办?教你一招
  • 闭关之 C++ 并发编程笔记(五):并行算法函数与测试
  • JAVA使用xstream进行对象和xml互相转换
  • Git的进一步使用
  • [deviceone开发]-do_Webview的基本示例
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • bearychat的java client
  • centos安装java运行环境jdk+tomcat
  • Django 博客开发教程 8 - 博客文章详情页
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • Iterator 和 for...of 循环
  • JavaScript设计模式与开发实践系列之策略模式
  • PyCharm搭建GO开发环境(GO语言学习第1课)
  • session共享问题解决方案
  • vue 配置sass、scss全局变量
  • 百度贴吧爬虫node+vue baidu_tieba_crawler
  • 从0到1:PostCSS 插件开发最佳实践
  • 订阅Forge Viewer所有的事件
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 类orAPI - 收藏集 - 掘金
  • 前端知识点整理(待续)
  • 如何解决微信端直接跳WAP端
  • 微信开放平台全网发布【失败】的几点排查方法
  • 新手搭建网站的主要流程
  • 怎么将电脑中的声音录制成WAV格式
  • 做一名精致的JavaScripter 01:JavaScript简介
  • k8s使用glusterfs实现动态持久化存储
  • 不要一棍子打翻所有黑盒模型,其实可以让它们发挥作用 ...
  • #laravel 通过手动安装依赖PHPExcel#
  • (2)Java 简介
  • (2022版)一套教程搞定k8s安装到实战 | RBAC
  • (Python) SOAP Web Service (HTTP POST)
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)小程序 交通违法举报系统 毕业设计 242045
  • (个人笔记质量不佳)SQL 左连接、右连接、内连接的区别
  • (转)如何上传第三方jar包至Maven私服让maven项目可以使用第三方jar包
  • (转)四层和七层负载均衡的区别
  • .bat批处理(六):替换字符串中匹配的子串
  • .NET Core 和 .NET Framework 中的 MEF2
  • .net 获取url的方法
  • .NET/C# 将一个命令行参数字符串转换为命令行参数数组 args
  • .NET国产化改造探索(一)、VMware安装银河麒麟