环境说明:Windows10 + Idea2021.3.2 + Jdk1.8 + SpringBoot 2.3.1.RELEASE
MyBatis-Plus是一个非常流行的MyBatis增强工具,它可以简化MyBatis的使用,并且在MyBatis的基础上新增了很多功能。本文将介绍MyBatis-Plus中条件构造器的使用手册,包括基本方法、Lambda表达式、条件构造器链式拼接等等,希望对广大开发者有所帮助。
MyBatis-Plus中的条件构造器主要用于构建SQL查询条件,它提供了多种构造器,可以通过链式调用来实现复杂的查询条件。本文将详细介绍MyBatis-Plus中条件构造器的使用方法,包括基本方法、Lambda表达式、条件构造器链式拼接等等。
Mybatis-Plus是基于Mybatis的一款优秀开源持久层框架,可以在不编写XML的情况下,实现Mybatis的所有功能,并且提供了一些增强功能,例如条件构造器、分页插件等。条件构造器可以灵活地构造查询条件,实现复杂的查询操作。
使用Mybatis-Plus之前需要在项目中导入相应的依赖。在pom.xml中添加以下代码:
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>${mybatis-plus.version}</version>
</dependency>
示例如下:
Mybatis-Plus提供了多种查询条件构造方法,常用的有eq,ne,gt,ge,lt,le,like,in等。例如:
eq方法用于等于查询,例如:
@Override
public List<UserEntity> getUsersBySex(String sex) {
//条件构造器
QueryWrapper<UserEntity> wrapper = new QueryWrapper<>();
//eq 代表“ = ”;例如 eq("sex", "男") ---> sex = '男';等同于拼接在sql语句后边的where条件。
wrapper.eq("sex", sex);
//将条件带入返回
List<UserEntity> list = this.list(wrapper);
//返回数据
// wrapper.ge("age","11"); =>age>=11
return list;
}
示例截图如下:
上述代码表示查询年龄为18的用户。
ne方法用于不等于查询,例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.ne("age", 18);
上述代码表示查询年龄不为18的用户。
gt方法用于大于查询,例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.gt("age", 18);
上述代码表示查询年龄大于18的用户。
ge方法用于大于等于查询,例如:
@Override
public UserEntity getUserById(String id) {
LambdaQueryWrapper<UserEntity> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(UserEntity::getId, id);
wrapper.ge(UserEntity::getAge, 11);
return this.getOne(wrapper);
}
示例截图如下:
上述代码表示查询年龄大于等于18的用户。
lt方法用于小于查询,例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.lt("age", 18);
上述代码表示查询年龄小于18的用户。
le方法用于小于等于查询,例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.le("age", 18);
上述代码表示查询年龄小于等于18的用户。
between方法用于范围查询,例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.between("age", 18, 30);
上述代码表示查询年龄在18到30之间的用户。
like方法用于模糊查询,例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.like("name", "张");
上述代码表示查询名字中包含“张”的用户。
notLike方法用于不包含查询,例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notLike("name", "张");
上述代码表示查询名字中不包含“张”的用户。
in方法用于in查询,例如:
List<Integer> ageList = new ArrayList<>();
ageList.add(18);
ageList.add(20);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.in("age", ageList);
上述代码表示查询年龄为18或20的用户。
notIn方法用于not in查询,例如:
List<Integer> ageList = new ArrayList<>();
ageList.add(18);
ageList.add(20);
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.notIn("age", ageList);
上述代码表示查询年龄不为18或20的用户。
isNull方法用于查询为null的数据,例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.isNull("name");
上述代码表示查询名字为null的用户。
isNotNull方法用于查询不为null的数据,例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.isNotNull("name");
上述代码表示查询名字不为null的用户。
Lambda表达式是Java 8中的一项新特性,在MyBatis-Plus中也支持Lambda表达式查询,例如:
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getAge, 18);
上述代码与上文的eq方法功能相同,但是使用了Lambda表达式。除了eq方法,其他方法也都支持Lambda表达式。
条件构造器支持链式拼接,可以使用and、or方法来实现,例如:
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三").or().eq("name", "李四");
上述代码表示查询名字为“张三”或者“李四”的用户。
为了验证以上方法的正确性,我们可以编写以下测试用例:
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
public void test1() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("age", 18);
List<User> userList = userMapper.selectList(queryWrapper);
Assert.assertEquals(userList.size(), 2);
}
@Test
public void test2() {
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getAge, 18);
List<User> userList = userMapper.selectList(lambdaQueryWrapper);
Assert.assertEquals(userList.size(), 2);
}
@Test
public void test3() {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三").or().eq("name", "李四");
List<User> userList = userMapper.selectList(queryWrapper);
Assert.assertEquals(userList.size(), 2);
}
}
上述测试用例分别测试了eq方法、Lambda表达式、条件构造器链式拼接的正确性。
本文介绍了MyBatis-Plus中条件构造器的使用方法,包括基本方法、Lambda表达式、条件构造器链式拼接等等。通过本文的介绍,相信读者已经可以掌握MyBatis-Plus中条件构造器的使用方法,以及如何通过条件构造器来实现复杂的查询条件。