用 QueryWrapper 的 ne 方法做不等于查询

MyBatis-Plus 里想查某个字段不等于某个值的记录,直接用 QueryWrapper 的 ne 方法就行。原理上它就是个条件构造器,调用 ne 的时候告诉它字段名和要排除的值,背后给你拼出 age <> ? 这种片段。

最常见的一个场景:查年龄不等于 18 的用户。代码差不多是这样:

复制代码
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import java.util.List;

public class QueryDemo {

    static class User {
        private Long id;
        private String name;
        private Integer age;
        // 省略 getter/setter
    }

    interface UserMapper {
        List<User> selectList(QueryWrapper<User> wrapper);
    }

    public static void main(String[] args) {
        QueryWrapper<User> queryWrapper = new QueryWrapper<>();
        queryWrapper.ne("age", 18);  // 核心就是这个 ne

        UserMapper userMapper = new UserMapper() {
            @Override
            public List<User> selectList(QueryWrapper<User> wrapper) {
                System.out.println("生成的SQL条件: " + wrapper.getSqlSegment());
                return List.of();
            }
        };

        List<User> users = userMapper.selectList(queryWrapper);
        System.out.println("查询结果数量: " + users.size());
    }
}

上面的示例里直接打印了 wrapper.getSqlSegment(),能看到生成的 SQL 条件片段就是 age <> ?,参数绑定 {age=18}。具体用的是 <> 还是 != 取决于数据库方言,MyBatis-Plus 会自动转,实际效果没差别。

参数通过预编译传进去的,不用额外操心注入问题。

项目里记得把依赖加上,pom.xml 里放 mybatis-plus-core,3.5.3.1 版本:

复制代码
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-core</artifactId>
    <version>3.5.3.1</version>
</dependency>

实际写的时候有几个地方容易绕一下。字段名一定得是数据库列名,不是 Java 的属性名。比如表里列叫 age,ne 的第一个参数就是 "age",别不小心写成实体类的字段名。值可以传基本类型 int,也可以用 Integer 包装类,都能正常处理。

ne 还能和其他条件方法自由组合,像 eq、gt 这些,链式调用拼出更复杂的查询条件,这块 QueryWrapper 本来设计得就很灵活。

跑一下上面的 main 方法,控制台输出的就是生成的 SQL 条件,跟预期一样,没什么花头。

来此加密不仅支持标准的域名加密,还提供了稀缺的IP证书申请。这对于一些直接通过IP地址提供服务的特殊场景具有重要意义。通过平台提供的HTTP代理自动验证方案,用户可以在不改变现有网络架构的前提下,快速完成IP地址的身份验证并获取证书。