使用MyBatis Plus的QueryWrapper实现复杂的SQL查询

sql 复制代码
QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("del_flag", "0")
            .and(wrapper -> wrapper.like("user_name", "粥").or().like("nick_name", "粥"))
            .in("user_id", Arrays.asList(1892512443619762178L, 1892565898380111873L))
            .ne("user_id", 1)
            .eq("tenant_id", "000000");

List<SysUser> userList = sysUserMapper.selectList(queryWrapper);

代码说明:
eq("del_flag", "0") 对应 SQL 中的 u.del_flag = '0'

and(wrapper -> wrapper.like("user_name", "粥").or().like("nick_name", "粥")) 对应 (u.user_name LIKE '%粥%' OR u.nick_name LIKE '%粥%')

in("user_id", Arrays.asList(...)) 对应 u.user_id IN (1892512443619762178, 1892565898380111873)

ne("user_id", 1) 对应 u.user_id <> 1

eq("tenant_id", "000000") 对应 u.tenant_id = '000000'

注意事项:

确保SysUser实体类中的属性与数据库字段对应

如果使用Lambda方式,可以更安全地避免字段名写错:

java 复制代码
QueryWrapper<SysUser> queryWrapper = new QueryWrapper<>();
queryWrapper.eq(SysUser::getDelFlag, "0")
            .and(wrapper -> wrapper.like(SysUser::getUserName, "粥")
                                 .or()
                                 .like(SysUser::getNickName, "粥"))
            .in(SysUser::getUserId, Arrays.asList(1892512443619762178L, 1892565898380111873L))
            .ne(SysUser::getUserId, 1)
            .eq(SysUser::getTenantId, "000000");
相关推荐
没有bug.的程序员3 分钟前
Spring Boot 与 MyBatis-Plus 批量插入的生死狙击
java·spring boot·后端·mybatis·plus·批量插入
小江的记录本31 分钟前
【Java】Java核心关键字:final、static、volatile、synchronized、transient(附《面试高频考点》)
java·开发语言·spring boot·后端·sql·spring·面试
mygljx1 小时前
oracle 12c查看执行过的sql及当前正在执行的sql
java·sql·oracle
蓝黑20201 小时前
SQL的update语句更新顺序的坑
数据库·sql·mysql
山峰哥2 小时前
《解锁SQL高效查询:从索引设计到执行计划优化》
服务器·数据库·sql·oracle·性能优化
qq_283720052 小时前
MySQL实战(七):日常运维 SQL汇总
运维·sql·mysql
hopsky2 小时前
ClickHouse SQL 在 Java 中的校验方法
java·sql·clickhouse
SelectDB技术团队3 小时前
从两套系统到一条 SQL:SelectDB search() 搞定日志的搜索与分析
数据库·数据仓库·sql·开源
FITA阿泽要努力3 小时前
《SQL如何在项目中安全查询》
数据库·sql
Mike117.3 小时前
GBase 8c 做性能优化时,我更先看统计信息、执行计划和资源池,而不是一上来就改 SQL
数据库·sql·性能优化