querywrapper 各种方法 及如何拼接位sql 语句
时间: 2025-06-20 15:07:14 浏览: 8
### MyBatis-Plus QueryWrapper 方法详解
#### 基本介绍
`QueryWrapper` 是 MyBatis-Plus 提供的一个强大查询构造器,允许开发者通过链式调用来构建复杂的 SQL 查询条件。这不仅提高了代码的可读性和维护性,还减少了手动编写 SQL 语句的工作量[^1]。
#### 常见方法解析
##### 条件设置
- `eq(String column, Object val)`:等于判断。
- `ne(String column, Object val)`:不等于判断。
- `gt(String column, Object val)`:大于判断。
- `ge(String column, Object val)`:大于等于判断。
- `lt(String column, Object val)`:小于判断。
- `le(String column, Object val)`:小于等于判断。
- `like(String column, Object val)`:模糊匹配。
- `notLike(String column, Object val)`:反向模糊匹配。
- `in(String column, Collection<?> coll)`:IN 判断。
- `notIn(String column, Collection<?> coll)`:NOT IN 判断。
- `isNull(String column)`:为空判断。
- `isNotNull(String column)`:非空判断。
以上方法均返回当前对象实例以便于链式编程[^3]。
##### 复杂逻辑组合
为了支持更复杂的需求,提供了多种方式来进行多条件组合:
- `and(Consumer<QueryWrapper<T>> consumer)`:追加 AND 关系子表达式树。
- `or(Consumer<QueryWrapper<T>> consumer)`:追加 OR 关系子表达式树。
- `apply(boolean condition, String sqlSegment)`:当满足给定布尔值时应用自定义SQL片段。
这些特性让使用者能够灵活地控制最终生成的SQL结构[^2]。
#### 实际案例展示
下面给出一段简单的 Java 代码示例,展示了如何利用上述提到的功能创建一个带有多个过滤条件的查询请求并执行之:
```java
// 创建一个新的 QueryWrapper 对象
QueryWrapper<User> wrapper = new QueryWrapper<>();
// 添加单个简单条件
wrapper.eq("age", 20);
// 使用 and/or 进行复合条件设定
wrapper.and(i -> i.ge("score", 85).lt("height", 170));
// 执行查询操作 (假设 userMapper 已经被注入)
List<User> users = userMapper.selectList(wrapper);
```
这段代码会根据指定的标准筛选符合条件的数据记录,并将它们作为列表形式返回给调用者处理。
#### 如何查看生成的SQL语句
有时可能希望验证实际产生的SQL是什么样的,可以通过如下手段实现这一点:
```java
String sql = ((AbstractJdbcBaseExecutor) sqlSession.getConfiguration().getDefaultSqlSessionFactory()
.getConfiguration().getDatabaseIdProvider()).getLastSql();
System.out.println(sql);
```
不过需要注意的是这种方法依赖具体的数据库驱动程序实现细节,因此并不是最推荐的方式。更好的做法是在日志配置文件中开启相应的级别来捕获所有的SQL输出信息。
阅读全文
相关推荐


















