文章资料-情感.机器.认知-电子AI 游客
80 BaseMapperPlus  mapper.selectList 多个条件 2025-03-11 09:25:10 2025-03-11 09:25:10

BaseMapperPlus<T>  mapper.selectList 多个条件

用户的问题是“BaseMapperPlus<T> mapper.selectList 多个条件”。我需要先理解用户的具体需求。看起来用户在使用MyBatis-Plus的BaseMapper的selectList方法时,想要实现多个条件的查询。根据搜索结果,我需要整合如何通过MyBatis-Plus的条件构造器来添加多个查询条件。

首先,查看搜索结果中的内容。在结果‌1中提到,MyBatisPlus的条件构造器支持复杂where条件,BaseMapper中的方法使用Wrapper参数。结果‌2和‌3指出可以使用QueryWrapper或Map来设置多条件。结果‌4也展示了selectList结合QueryWrapper的示例。

用户可能想知道如何通过selectList方法传入多个条件。通常,这需要构建一个Wrapper对象,如QueryWrapper或LambdaQueryWrapper,然后链式调用多个条件方法。例如,使用.eq()、.like()等方法添加多个条件。

另外,结果‌3提到的selectByMap方法也是一种方式,但可能不够灵活,因为Map只能处理等于的条件,而Wrapper支持更复杂的条件,如范围、模糊查询等。所以更推荐使用Wrapper。

需要确认各个方法的使用方式,确保引用正确的搜索结果。例如,结果‌2和‌4都提到了QueryWrapper的使用,结果‌1提到了Wrapper作为参数,而结果‌3展示了Map的例子,但可能不如Wrapper灵活。

因此,回答应分为几种方法:使用QueryWrapper、LambdaQueryWrapper和Map。每种方法的示例需要结合搜索结果中的内容,并正确引用来源。例如,QueryWrapper的示例来自‌24,LambdaQueryWrapper可能来自通用知识,但需要确认是否有搜索结果支持。结果‌5提到了@Param("ew")的使用,可能相关。

需要避免重复引用同一来源,如结果‌2、‌3、‌4都涉及多条件查询,但各有不同方法。因此,每个方法对应不同的引用来源。例如,QueryWrapper对应‌24,Map对应‌3。

总结,回答的结构应该是分点列出不同的多条件查询方法,结合示例代码,并在每个点后面引用相关的搜索结果角标。同时,注意时间有效性,比如结果‌3的时间是2019年,而MyBatis-Plus可能更新了更推荐的方式,但用户的问题可能仍适用这些方法。

在 MyBatis-Plus 中,BaseMapper<T> 的 selectList 方法实现多条件查询时,主要通过 QueryWrapper 或 LambdaQueryWrapper 构造动态条件。以下是具体实现方式及示例:


一、使用 QueryWrapper 构造多条件

  1. ‌链式调用条件方法‌
    通过 .eq()、.like()、.between() 等方法拼接多个条件:

    javaCopy CodeQueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.eq("age", 25)
           .like("name", "张")
           .between("create_time", "2023-01-01", "2023-12-31");
    List<User> userList = userMapper.selectList(wrapper);

    等价 SQL:SELECT * FROM user WHERE age=25 AND name LIKE '%张%' AND create_time BETWEEN '2023-01-01' AND '2023-12-31' ‌24。

  2. ‌逻辑组合条件‌
    使用 .and() 或 .or() 进行逻辑组合:

    javaCopy CodeQueryWrapper<User> wrapper = new QueryWrapper<>();
    wrapper.eq("status", 1)
           .and(w -> w.gt("score", 90).or().lt("score", 60));
    List<User> userList = userMapper.selectList(wrapper);

    等价 SQL:SELECT * FROM user WHERE status=1 AND (score > 90 OR score < 60) ‌12。


二、使用 LambdaQueryWrapper(类型安全)

通过 Lambda 表达式避免硬编码字段名:

javaCopy CodeLambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getAge, 25)
       .like(User::getName, "张")
       .ge(User::getCreateTime, LocalDate.of(2023, 1, 1));
List<User> userList = userMapper.selectList(wrapper);

等价 SQL:SELECT * FROM user WHERE age=25 AND name LIKE '%张%' AND create_time >= '2023-01-01' ‌12。


三、使用 Map 作为条件参数(仅等值查询)

通过 selectByMap 方法实现等值条件查询:

javaCopy CodeMap<String, Object> conditionMap = new HashMap<>();
conditionMap.put("age", 25);
conditionMap.put("name", "张三");
List<User> userList = userMapper.selectByMap(conditionMap);

等价 SQL:SELECT * FROM user WHERE age=25 AND name='张三' ‌3。


四、自定义复杂条件

若需多表关联或复杂函数处理,可在 XML 中结合 @Param("ew") 注解动态拼接 SQL:

javaCopy Code@Select("SELECT * FROM user ${ew.customSqlSegment}")List<User> selectByComplexConditions(@Param("ew") QueryWrapper<User> wrapper);

XML 中可通过 ${ew.customSqlSegment} 注入动态条件 ‌56。


‌总结‌:

查看6篇参考资料 

MybatisPlus——条件构造器

头像

CSDN博客

mybatisplus通过多个字段查询数据

头像

51CTO博客

Mybatis-plus selectByMap条件查询方式

脚本之家

mybatis-plus多个条件查询

头像

博客

mybatis-plus在Mapper类中使用@select标签进行多表联合动态条件查询

头像

CSDN博客

【知识库系统】Springboot+Mybatis实现多条件查询

头像

CSDN博客

在BaseMapperPlus<T>中如何实现多条件查询?

能不能再简化一下这个多条件查询的代码?

请再给一个BaseMapperPlus<T> mapper.selectList多个条件的例子