使用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");
相关推荐
歪歪10012 小时前
如何在SQLite中实现事务处理?
java·开发语言·jvm·数据库·sql·sqlite
瑶总迷弟12 小时前
静默安装 Oracle Database 21c on CentOS 7.6
数据库·oracle·centos
纷飞的花火丶13 小时前
Oracle数据库注入基础入门
网络安全·oracle·sql注入
博睿谷IT99_13 小时前
SQL SELECT 语句怎么用?COMPANY 表查询案例(含条件 / 模糊 / 分页)
数据库·sql·mysql
鸠摩智首席音效师14 小时前
如何删除 MySQL 数据库中的所有数据表 ?
数据库·mysql·oracle
没有bug.的程序员14 小时前
SQL 执行计划解析:从 EXPLAIN 到性能优化的完整指南
java·数据库·sql·性能优化·explain·执行计划
小心草里有鬼14 小时前
Linux 数据库 Mysql8 主从复制
linux·运维·数据库·sql·mysql
笨蛋少年派15 小时前
SQL查询基础常用攻略
sql
boy快快长大15 小时前
@Transactional 事务注解
数据库·sql·oracle
冥净15 小时前
通过OracleOEM创建可监控用户
oracle