今天带大家学习的是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快速入门)