MybatisPlus底层封装的带有条件构造器的方法

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

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
import com.example.demos.entity.User;
import com.example.demos.mapper.UserMapper;
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 MybatisPlusWrapperTest {
    //封装在BaseMapper里面的方法
    @Autowired
    private UserMapper userMapper;
    @Test
    public void test01(){
        //查询用户包含a,年龄在20-30岁之间,邮箱信息不为null的信息
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.like("name","a")
                .between("age",20,30)//列后面是值
                .isNotNull("email");
        List users = userMapper.selectList(queryWrapper);//使用他的子类
        users.forEach(System.out::println);
    }
    @Test
    public void test02(){
        //查询用户信息,按照年龄的降序排序,若年龄相同,按照id升序排序
        QueryWrapper queryWrapper = new QueryWrapper<>();
        queryWrapper.orderByDesc("age")
                .orderByAsc("uid");
        List users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }

    @Test
    public void test03(){
        //删除邮箱地址为空的用户
        QueryWrapper queryWrapper = new QueryWrapper<>();
        queryWrapper.isNull("email");
        int result = userMapper.delete(queryWrapper);
        System.out.println(result);
    }
    @Test
    public void test04(){
        //将(年龄大于20并且用户名中包含有a)或者邮箱为null的用户信息修改
        QueryWrapper queryWrapper = new QueryWrapper<>();
        queryWrapper.gt("age",20)   //gt代表大于
                .like("name","a")
                .or()//条件语句中有或必须用这个
                .isNull("email");
        User user = new User();
        user.setName("abd");
        user.setEmail("[email protected]");
        int result = userMapper.update(user, queryWrapper);
        System.out.println("result"+result);
    }


    //条件的优先级
    @Test
    public void test05(){
        //将用户名中包含有a并且(年龄大于20或邮箱为null)的用户信息进行修改
        //lambda中的条件优先执行
        //(年龄大于20或邮箱为null)优先执行
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.like("name","a")
                //i表示的就是条件构造器,and和or都有条件优先级
                .and(i->i.gt("age",20).or().isNull("email"));
        User user = new User();
        user.setName("abcd");
        user.setEmail("[email protected]");
        //实体类user是设置要修改的字段的
        int result = userMapper.update(user,queryWrapper);
        System.out.println("result"+result);
    }

    //查询的时候只查询某一些字段
    @Test
    public void test06(){
        QueryWrapper queryWrapper = new QueryWrapper<>();
        queryWrapper.select("name","email");//使用select设置某一些字段
        List> maps = userMapper.selectMaps(queryWrapper);
        maps.forEach(System.out::println);
    }
    //条件构造器实现子查询的功能 inSql
    @Test
    public void test07(){
        //查询id小于100的用户信息
        QueryWrapper queryWrapper =new QueryWrapper<>();
        queryWrapper.inSql("uid","select uid from t_user where uid<=4");
        List users = userMapper.selectList(queryWrapper);//selectList本来就是个查询语句,括号里是条件
        users.forEach(System.out::println);
    }

    //使用UpdateWapper实现修改功能,不用使用实体类了,可以写成空
    @Test
    public void test08(){
        //将用户名中包含有a并且(年龄大于20或邮箱为null)的用户信息进行修改
        UpdateWrapper updateWrapper = new UpdateWrapper<>();
        updateWrapper.like("name","a")
                .and(i->i.gt("age",20).or().isNull("email"));
        updateWrapper.set("name","xiaohe").set("email","[email protected]");
        int result = userMapper.update(null, updateWrapper);
        System.out.println("result"+result);
    }

    //模拟开发中组装条件的情况,前端用户选择了,后端会组装到SQL语句里面,所以要判断一下
    //下面的方法麻烦一点,可以使用condition组装条件
    @Test
    public void test09(){
        //以下是浏览器传输的数据
        String name = "xiaohe";
        Integer ageBegin = 20;
        Integer ageEnd = 30;
        QueryWrapper queryWrapper = new QueryWrapper<>();
        // com.baomidou.mybatisplus.core.toolkit选这个包
        if (StringUtils.isNotBlank(name)){
            //isNotBlank判断某个字符串是否为空字符串,不为null,不为空
            queryWrapper.like("name",name);
        }
        if(ageBegin != null){
            queryWrapper.ge("age",ageBegin);//ge是大于等于
        }
        if(ageEnd != null ){
            queryWrapper.le("age",ageEnd);//le是小于等于
        }
        List users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }

    //使用condition条件组装
    @Test
    public void test10(){
        //以下是浏览器传输的数据
        String name = "xiaohe";
        Integer ageBegin = 20;
        Integer ageEnd = 30;
        QueryWrapper queryWrapper = new QueryWrapper<>();
        //like(     boolean condition ,R column,Object val)选择3个参数的,第一个判断
        queryWrapper.like(StringUtils.isNotBlank(name),"name",name)
                .ge(ageBegin !=null,"age",ageBegin)
                .le(ageEnd !=null,"age",ageEnd);
        List users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }

    //LambdaQueryWapper(数据表中的字段名和浏览器传的字段名不一致时可以用这个)
    @Test
    public void test11(){
        //以下是浏览器传输的数据
        String name = "xiaohe";
        Integer ageBegin = 20;
        Integer ageEnd = 30;
        LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.like(StringUtils.isNotBlank(name),User::getName,name)
                .ge(ageBegin != null ,User::getAge,ageBegin)
                .le(ageEnd != null,User::getAge,ageEnd);
        List users = userMapper.selectList(queryWrapper);
        users.forEach(System.out::println);
    }
    //LambdaUpdateWapper
    @Test
    public void test12(){
        //将用户名中包含a并且(年龄大于20或者邮箱为null)的用户信息修改
        LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>();
        updateWrapper.like(User::getName,"a")
                .and(i->i.gt(User::getAge,20).or().isNull(User::getEmail));
        updateWrapper.set(User::getName,"xiao").set(User::getEmail,"[email protected]");
        int result = userMapper.update(null, updateWrapper);
        System.out.println("result"+result);
    }
}

你可能感兴趣的:(MybatisPlus,MybatisPlus)