QueryWrapper实现查重
时间: 2024-11-10 15:12:51 浏览: 11
QueryWrapper是MyBatis Plus框架提供的一种高级SQL构建工具,它允许开发者通过链式API的方式编写动态SQL查询,非常方便。对于数据查重,你可以利用QueryWrapper来实现基于某个字段的去重查询,例如查找某个表中某一列值不重复的数据。
首先,创建一个QueryWrapper实例:
```java
List<YourEntity> result = YourEntity.selectList(new QueryWrapper<YourEntity>().distinct(true).eq("your_unique_field", yourValue));
```
这里`YourEntity`是你需要操作的实体类名,`your_unique_field`是要查重的字段名,`yourValue`是该字段的特定值。`.distinct(true)`表示开启去重模式,如果该字段值唯一,则返回结果集中的唯一记录。
如果你想要查询某个字段的不重复集合,可以这样:
```java
Set<YourEntity> uniqueItems = YourEntity.select.distinct(true).field("your_unique_field").list();
```
相关问题
queryWrapper实现去重
可以使用QueryWrapper的select方法结合LambdaQueryWrapper的groupBy方法实现去重。示例代码如下:
```
QueryWrapper<CustomerBodyMetricsEntity> wrapper = new QueryWrapper<>();
wrapper.select("DISTINCT version")
.lambda()
.eq(CustomerBodyMetricsEntity::getCustomerId, customerId)
.ge(CustomerBodyMetricsEntity::getVersion, DateTimeUtil.dateTimeToTimestamp(firstDay))
.le(CustomerBodyMetricsEntity::getVersion, DateTimeUtil.dateTimeToTimestamp(lastDay))
.in(CustomerBodyMetricsEntity::getMetric, list)
.ne(CustomerBodyMetricsEntity::getLabel, 20)
.groupBy(CustomerBodyMetricsEntity::getVersion);
List<CustomerBodyMetricsEntity> list = this.list(wrapper);
```
以上代码中,select方法中传入"DISTINCT version"表示只查询version字段并去重,groupBy方法中传入CustomerBodyMetricsEntity::getVersion表示按照version字段进行分组。
QueryWrapper实现关联查询
QueryWrapper 是 MyBatis-Plus 框架提供的一个查询构造器,它可以帮助我们方便地进行关联查询。
在 QueryWrapper 中实现关联查询有两种常见的方式:
1. 使用 Lambda 表达式
```java
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.lambda().eq(User::getRole, "admin").eq(User::getIsDeleted, 0)
.nested(i -> i.eq(User::getRoleId, Role::getId).like(Role::getName, "管理员"));
List<User> userList = userMapper.selectList(queryWrapper);
```
2. 使用普通方式
```java
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
queryWrapper.eq("user.role", "admin").eq("user.is_deleted", 0)
.nested(i -> i.eq("user.role_id", "role.id").like("role.name", "管理员"));
List<User> userList = userMapper.selectList(queryWrapper);
```
以上示例中,我们通过 `eq` 方法指定了主表和关联表之间的条件,通过 `nested` 方法可以实现嵌套查询,从而实现关联查询。其中,Lambda 表达式方式可读性更高,而普通方式更灵活。
需要注意的是,以上代码仅为示例,实际使用时需要根据具体的实体类和关联关系进行调整。同时,如果使用的是 MyBatis 原生的 XML 映射文件,还需要在 XML 文件中编写相应的 SQL 语句来实现关联查询。
阅读全文