mybatis plus的distinct
时间: 2023-11-11 07:06:25 浏览: 137
Mybatis Plus的distinct方法可以用于查询去重后的结果集。在使用时,需要在查询Wrapper中调用distinct方法,例如:
```
QueryWrapper<User> wrapper = new QueryWrapper<>();
wrapper.select("distinct age").eq("gender", "male");
List<User> userList = userMapper.selectList(wrapper);
```
这样就可以查询出所有男性用户的年龄去重后的结果集。
相关问题
mybatis plus DISTINCT
在Mybatis-Plus中使用DISTINCT可以通过使用select方法和lambda表达式来实现。你可以参考以下示例代码:
```
int userCount = logRecordService.count(new QueryWrapper<LogRecordDO>()
.select("DISTINCT user_id")
.lambda()
.eq(LogRecordDO::getProjectId, projectId));
```
其中,`logRecordService`是你的服务类,`LogRecordDO`是你的实体类,`user_id`是需要去重统计的字段,`projectId`是筛选条件。这段代码会执行一个统计操作,返回符合条件的去重后的记录数。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *2* *3* [mybatis-plus使用distinct](https://blog.csdn.net/lsqingfeng/article/details/114656202)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"]
[ .reference_list ]
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` 时,默认情况下会自动处理表别名等相关细节,因此开发者无需担心跨表关联或其他复杂场景下的兼容性问题。
阅读全文
相关推荐
















