mybatis-plus去重查询 表达式
时间: 2023-08-13 07:02:14 浏览: 170
在 MyBatis-Plus 中进行去重查询,可以使用 QueryWrapper 的 distinct 方法来实现。distinct 方法可以用于设置查询结果是否去重。
以下是一个示例代码:
```java
QueryWrapper<Entity> queryWrapper = new QueryWrapper<>();
queryWrapper.select("column1", "column2").distinct(true).eq("column3", "value");
List<Entity> resultList = entityMapper.selectList(queryWrapper);
```
在上述代码中,通过 select 方法指定需要查询的字段,然后通过 distinct 方法设置去重。最后,通过 eq 方法设置其他查询条件。调用 selectList 方法执行查询并返回结果列表。
请根据你的实际需求修改示例代码中的字段和条件。
相关问题
mybatis-plus查询多个字段,并且对某个字段去重查找
你可以使用Mybatis-Plus提供的Wrapper类和Lambda表达式来实现多个字段的查询和对某个字段的去重查找。具体实现步骤如下:
1. 创建Wrapper对象,可以使用QueryWrapper或者LambdaQueryWrapper,这里以LambdaQueryWrapper为例。
```
LambdaQueryWrapper<Entity> wrapper = new LambdaQueryWrapper<>();
```
2. 使用Lambda表达式添加查询条件,可以通过and或者or方法添加多个条件。例如:
```
wrapper.eq(Entity::getField1, "value1")
.eq(Entity::getField2, "value2")
.ne(Entity::getField3, "value3");
```
3. 添加对某个字段的去重查询条件,可以使用groupBy方法和Lambda表达式。例如:
```
wrapper.groupBy(Entity::getField4);
```
4. 调用Mybatis-Plus提供的selectList方法执行查询。例如:
```
List<Entity> entityList = entityMapper.selectList(wrapper);
```
这样就可以实现多个字段的查询和对某个字段的去重查找了。
mybatis plus 用distinct查询
### MyBatis Plus 使用 `distinct` 关键字进行去重查询
在使用 MyBatis Plus 进行数据库操作时,可以通过多种方式实现带有 `DISTINCT` 的查询语句。为了确保返回的结果集中不包含重复项,可以利用 `QueryWrapper` 或者更推荐使用的 `LambdaQueryWrapper` 来构建 SQL 查询条件。
#### 方法一:通过 QueryWrapper 实现
当需要执行简单的去重查询时,可以直接调用 `select()` 方法并传入字段列表,在其中指定 `true` 参数来开启 `DISTINCT` 功能:
```java
// 创建实体类对应的 Wrapper 对象
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.select("DISTINCT name", "age"); // 只获取唯一的名字和年龄组合
List<Map<String, Object>> resultMaps = userMapper.selectMaps(queryWrapper);
for (Map<String, Object> map : resultMaps) {
System.out.println(map.get("name") + ", " + map.get("age"));
}
```
这种方法适用于只需要部分列作为结果集的情况,并且希望这些选定的列之间不存在完全相同的记录[^1]。
#### 方法二:借助 LambdaQueryWrapper 提升安全性
对于更加复杂的业务逻辑或是为了避免硬编码字符串带来的风险,建议采用基于 lambda 表达式的 API —— `LambdaQueryWrapper`。这种方式不仅能够提高代码可读性和维护性,还能有效防止潜在的风险如 SQL 注入等问题:
```java
// 定义一个泛型为 User 类型的 LambdaQueryWrapper
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.select(User::getName, User::getAge).distinct(); // 启用 DISTINCT 并选择要投影的属性
List<User> resultList = userMapper.selectList(wrapper); // 执行查询并将结果映射到 List<User>
resultList.forEach(user -> System.out.println(user.getName() + ", " + user.getAge()));
```
上述例子展示了如何利用 `LambdaQueryWrapper` 和其内置方法 `.distinct()` 来轻松完成带 `DISTINCT` 子句的数据检索工作。
#### 注意事项
- 如果只对单个字段应用 `DISTINCT`,则只需将其名称传递给 `select()` 函数即可;如果涉及多个字段,则应按照实际需求依次列出所有目标字段名。
- 当使用 `LambdaQueryWrapper` 时,默认情况下会自动处理表别名等相关细节,因此开发者无需担心跨表关联或其他复杂场景下的兼容性问题。
阅读全文
相关推荐













