您好,登录后才能下订单哦!
MyBatis-Plus 是 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,简化开发、提高效率。在实际开发中,条件查询是非常常见的操作。MyBatis-Plus 提供了多种方式来实现条件查询,本文将详细介绍 MyBatis-Plus 实现条件查询的三种常见格式。
QueryWrapper
是 MyBatis-Plus 提供的一个用于构建查询条件的工具类。通过 QueryWrapper
,我们可以方便地构建各种复杂的查询条件。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三")
.ge("age", 18)
.le("age", 30)
.orderByDesc("create_time");
List<User> userList = userMapper.selectList(queryWrapper);
在上面的代码中,我们创建了一个 QueryWrapper
对象,并通过 eq
、ge
、le
等方法设置了查询条件。eq
表示等于,ge
表示大于等于,le
表示小于等于。最后,我们通过 orderByDesc
方法对查询结果进行排序。
QueryWrapper
还支持更复杂的条件组合,例如 and
、or
等。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("name", "张三")
.and(wrapper -> wrapper.ge("age", 18).le("age", 30))
.or(wrapper -> wrapper.eq("name", "李四").ge("age", 25));
List<User> userList = userMapper.selectList(queryWrapper);
在这个例子中,我们使用了 and
和 or
方法来组合多个条件。and
表示同时满足多个条件,or
表示满足其中一个条件即可。
QueryWrapper
还支持动态条件的构建,可以根据业务逻辑动态添加条件。
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
if (StringUtils.isNotBlank(name)) {
queryWrapper.eq("name", name);
}
if (age != null) {
queryWrapper.ge("age", age);
}
List<User> userList = userMapper.selectList(queryWrapper);
在这个例子中,我们根据传入的参数动态构建查询条件。如果 name
不为空,则添加 name
的查询条件;如果 age
不为空,则添加 age
的查询条件。
LambdaQueryWrapper
是 QueryWrapper
的 Lambda 表达式版本,它提供了更加类型安全的查询条件构建方式。
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getName, "张三")
.ge(User::getAge, 18)
.le(User::getAge, 30)
.orderByDesc(User::getCreateTime);
List<User> userList = userMapper.selectList(lambdaQueryWrapper);
在这个例子中,我们使用了 LambdaQueryWrapper
来构建查询条件。User::getName
表示引用 User
类的 name
属性,这种方式可以避免硬编码字段名,提高代码的可读性和可维护性。
LambdaQueryWrapper
同样支持复杂的条件组合。
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
lambdaQueryWrapper.eq(User::getName, "张三")
.and(wrapper -> wrapper.ge(User::getAge, 18).le(User::getAge, 30))
.or(wrapper -> wrapper.eq(User::getName, "李四").ge(User::getAge, 25));
List<User> userList = userMapper.selectList(lambdaQueryWrapper);
在这个例子中,我们使用了 and
和 or
方法来组合多个条件,与 QueryWrapper
的使用方式类似。
LambdaQueryWrapper
也支持动态条件的构建。
LambdaQueryWrapper<User> lambdaQueryWrapper = new LambdaQueryWrapper<>();
if (StringUtils.isNotBlank(name)) {
lambdaQueryWrapper.eq(User::getName, name);
}
if (age != null) {
lambdaQueryWrapper.ge(User::getAge, age);
}
List<User> userList = userMapper.selectList(lambdaQueryWrapper);
在这个例子中,我们根据传入的参数动态构建查询条件,与 QueryWrapper
的使用方式类似。
MyBatis-Plus 还提供了一个 Wrappers
工具类,可以更方便地创建 QueryWrapper
和 LambdaQueryWrapper
。
QueryWrapper<User> queryWrapper = Wrappers.query();
queryWrapper.eq("name", "张三")
.ge("age", 18)
.le("age", 30)
.orderByDesc("create_time");
List<User> userList = userMapper.selectList(queryWrapper);
在这个例子中,我们使用 Wrappers.query()
方法创建了一个 QueryWrapper
对象,并设置了查询条件。
LambdaQueryWrapper<User> lambdaQueryWrapper = Wrappers.lambdaQuery();
lambdaQueryWrapper.eq(User::getName, "张三")
.ge(User::getAge, 18)
.le(User::getAge, 30)
.orderByDesc(User::getCreateTime);
List<User> userList = userMapper.selectList(lambdaQueryWrapper);
在这个例子中,我们使用 Wrappers.lambdaQuery()
方法创建了一个 LambdaQueryWrapper
对象,并设置了查询条件。
Wrappers
工具类还支持链式调用,可以更简洁地构建查询条件。
List<User> userList = userMapper.selectList(Wrappers.<User>lambdaQuery()
.eq(User::getName, "张三")
.ge(User::getAge, 18)
.le(User::getAge, 30)
.orderByDesc(User::getCreateTime));
在这个例子中,我们直接在 selectList
方法中使用 Wrappers.lambdaQuery()
方法进行链式调用,构建查询条件。
MyBatis-Plus 提供了多种方式来实现条件查询,包括 QueryWrapper
、LambdaQueryWrapper
和 Wrappers
工具类。QueryWrapper
适合需要硬编码字段名的场景,LambdaQueryWrapper
提供了类型安全的查询条件构建方式,Wrappers
工具类则提供了更简洁的链式调用方式。根据实际需求选择合适的查询方式,可以大大提高开发效率和代码的可维护性。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。