MybatisPlus基础学习之条件构造器

今天带大家学习的是MybatisPlus中的QueryMapper(即条件构造器)的具体使用,条件构造器可以让我们通过Java代码的形式构造一些复杂的SQL语句,而不需要写SQL语句,怎么样,是不是觉得很方便,快来让我们一起快速体验一下吧!

9.1 条件构造器简单了解

9.1.1 什么是条件构造器?

在MP中,我们调用mapper接口中的查询列表功能时,会发现其参数是一个queryWrapper

在这里插入图片描述

9.1.2 为什么要使用条件构造器?

因为Wrapper十分重要,我们写一些复杂的SQL时就可以使用它来替代

9.1.3 条件构造器有哪些?

MP官方的条件构造器包含以下内容

在这里插入图片描述

在这里插入图片描述

MybatisPlus中提供了更各种各样的条件构造器,可以满足我们对复杂SQL的编写,而我们只挑出一些常用的进行举例,其余的可以参照官网使用!

9.2 条件构造器的具体使用

9.2.1 条件查询

1.编写测试类
package com.kuang.mybatis_plus;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.kuang.mybatis_plus.mapper.UserMapper;
import com.kuang.mybatis_plus.pojo.User;
import org.junit.jupiter.api.Test;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

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

@SpringBootTest
//扫描mapper接口所在包
@MapperScan("com.kuang.mybatis_plus.mapper")
public class WrapperTest {

    //通过类型自动装配UserMapper接口
    @Autowired
    private UserMapper userMapper;

    //条件查询测试
    @Test
    void contextLoads() {
        //查询name不为空,并且邮件不为空,年龄大于22的用户
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //链式编程
        wrapper.
                //name用户名不为空
                isNotNull("name").
                //email邮箱不为空
                isNotNull("email").
                //年龄大于22岁
                ge("age",22);
        //查询用户列表并将所查数据遍历出来
        userMapper.selectList(wrapper).forEach(System.out::println);
    }
}
2.查看测试结果

在这里插入图片描述

结果根据指定条件查询用户数据成功!

9.2.2 查询单个用户

1.编写测试类
package com.kuang.mybatis_plus;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.kuang.mybatis_plus.mapper.UserMapper;
import com.kuang.mybatis_plus.pojo.User;
import org.junit.jupiter.api.Test;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

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

@SpringBootTest
//扫描mapper接口所在包
@MapperScan("com.kuang.mybatis_plus.mapper")
public class WrapperTest {

    //通过类型自动装配UserMapper接口
    @Autowired
    private UserMapper userMapper;

    //查询单个用户
    @Test
    void test2() {
        //查询名字为Jack的用户
        //获取QueryWrapper<User>对象
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //设置wrapper的查询条件
        wrapper.eq("name","Jack");
        //调用selectOne方法只能查询单个用户(如果返回多多个用户需要使用List或者Map)
        User user = userMapper.selectOne(wrapper);
        //打印查询到的用户信息
        System.out.println(user);
    }
}
2.查看测试结果

在这里插入图片描述

结果成功查询到 用户名为“Jack” 的用户信息!

9.2.3 条件区间查询

1.编写测试类
package com.kuang.mybatis_plus;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.kuang.mybatis_plus.mapper.UserMapper;
import com.kuang.mybatis_plus.pojo.User;
import org.junit.jupiter.api.Test;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

import java.util.List;
import java.util.Map;
 
@SpringBootTest
//扫描mapper接口所在包
@MapperScan("com.kuang.mybatis_plus.mapper")
public class WrapperTest {

    //通过类型自动装配UserMapper接口
    @Autowired
    private UserMapper userMapper;

    //条件区间查询用户
    @Test
    void test3() {
        //查询年龄在20~30岁之间的用户
        //获取QueryWrapper<User>对象
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //设置wrapper的查询条件区间
        wrapper.between("age",18,24);
        //调用selectCount方法查询记录数(selectCount方法的返回值类型是Integer)
        Integer count = userMapper.selectCount(wrapper);
        //打印查询到的记录数
        System.out.println(count);
    }
    
}
2.查看测试结果

在这里插入图片描述

结果成功查询到年龄在18到24岁的用户信息!

9.2.4 模糊条件查询

1.编写测试类
package com.kuang.mybatis_plus;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.kuang.mybatis_plus.mapper.UserMapper;
import com.kuang.mybatis_plus.pojo.User;
import org.junit.jupiter.api.Test;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

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

@SpringBootTest
//扫描mapper接口所在包
@MapperScan("com.kuang.mybatis_plus.mapper")
public class WrapperTest {

    //通过类型自动装配UserMapper接口
    @Autowired
    private UserMapper userMapper;

    //模糊条件查询用户
    @Test
    void test4() {
        //查询年龄在20~30岁之间的用户
        //获取QueryWrapper<User>对象
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //设置wrapper的模糊查询条件
        wrapper
                /**
                 * notLike方法:
                 * 表示从指定字段属性值中,不包含该值进行的模糊条件查询
                 * 两个参数:第一个column表示数据库字段名,第二个val表示对应值
                 * 对应SQL语句:column not like "%val%"
                 */
                //设置模糊查询条件,相当于name not like "%a%"(即名字中不包含a值)
                .notLike("name","a")
                /**
                 *
                 * likeLeft和likeRight方法:
                 * 表示根据指定字段属性值,从左往右或者从右往左进行模糊查询
                 * 简单来说:就是模糊查询的条件为%value(以value值结尾的)或者value%(以value值开头的)
                 * 对应SQL语句:column like "%val" / column like "val%"
                 */
                //设置模糊查询条件,相当于email like "t%"(即邮箱是以t字母开头的)
                .likeRight("email","t");
        //selectMaps的返回值是一个List<Map<String, Object>>集合
        List<Map<String, Object>> maps = userMapper.selectMaps(wrapper);
        //将查询到的列表集合进行遍历输出
        maps.forEach(System.out::println);
    }
}
2.查看测试结果

在这里插入图片描述

结果成功查询到名字中不包含“a”并且邮箱以“t”开头的用户信息!

9.2.5 嵌套子查询

1.编写测试类
package com.kuang.mybatis_plus;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.kuang.mybatis_plus.mapper.UserMapper;
import com.kuang.mybatis_plus.pojo.User;
import org.junit.jupiter.api.Test;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

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

@SpringBootTest
//扫描mapper接口所在包
@MapperScan("com.kuang.mybatis_plus.mapper")
public class WrapperTest {

    //通过类型自动装配UserMapper接口
    @Autowired
    private UserMapper userMapper;

    //嵌套子查询
    @Test
    void test5() {
        //获取QueryWrapper<User>对象
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //设置wrapper的查询条件
        /**
         * inSql方法:作用相当于是嵌套子查询
         * 两个参数:column表示数据库字段名,inValue表示嵌套的SQL语句
         * 对应SQL语句:column in(嵌套的SQL语句)
         */
        //Id在子查询中查出来
        wrapper.inSql("id","select id from user where id<3 ");
        //selectObjs方法的返回值为List<Object>
        List<Object> objects = userMapper.selectObjs(wrapper);
        //将查询结果进行遍历输出
        objects.forEach(System.out::println);
    }
}
2.查看测试结果

在这里插入图片描述

结果成功查询到id大于3的用户信息!

9.2.6 排序查询

1.编写测试类
package com.kuang.mybatis_plus;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.kuang.mybatis_plus.mapper.UserMapper;
import com.kuang.mybatis_plus.pojo.User;
import org.junit.jupiter.api.Test;
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;

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

@SpringBootTest
//扫描mapper接口所在包
@MapperScan("com.kuang.mybatis_plus.mapper")
public class WrapperTest {

    //通过类型自动装配UserMapper接口
    @Autowired
    private UserMapper userMapper;

    //排序查询
    @Test
    void test6() {
        //获取QueryWrapper<User>对象
        QueryWrapper<User> wrapper = new QueryWrapper<>();
        //通过id进行升序排序
        wrapper.orderByAsc("id");
        //查询所有的用户信息
        List<User> users = userMapper.selectList(wrapper);
        //将查询结果进行遍历输出
        users.forEach(System.out::println);
    }
}

2.查看测试结果

在这里插入图片描述

在这里插入图片描述

结果成功查询到升序排列后的用户信息!

到这里,有关MybatisPlus的条件构造器的使用的学习就结束了,欢迎大家学习和讨论!

参考视频链接:https://www.bilibili.com/video/BV17E411N7KN (B站UP主遇见狂神说的MybatisPlus快速入门)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

狂奔の蜗牛rz

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

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

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

打赏作者

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

抵扣说明:

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

余额充值