假设我们有一个实体类 User,其中包含一个枚举属性 Gender:
java
public class User {
private Long id;
private String name;
private Gender gender;
// 省略其他属性和方法
}
public enum Gender {
MALE,
FEMALE
}
Mapper 层:
java
@Repository
public interface UserMapper extends BaseMapper<User> {
default List<Gender> getAllGenders() {
return new LambdaQueryChainWrapper<>(this.getBaseMapper())
.select(User::getGender)
.list()
.stream()
.map(User::getGender)
.distinct()
.collect(Collectors.toList());
}
}
在这段代码中,我们添加了一个默认方法 getAllGenders()
到 UserMapper 接口中。这个方法使用 LambdaQueryChainWrapper 来调用 select 方法选择所有用户记录中的 gender 字段,并通过流操作对结果进行处理,最终返回去重后的枚举值列表。
Service 层:
java
@Service
public class UserService {
@Autowired
private UserMapper userMapper;
public List<User> getUsersByGender(Gender gender) {
return userMapper.getAllGenders();
}
}
在这段代码中,我们创建了一个 UserService 类,并编写了一个 getAllGenders()
方法用于调用 UserMapper 中的 getAllGenders()
方法来获取所有枚举属性 gender 的取值。
Controller 层:
java
@RestController
@RequestMapping("/users")
public class UserController {
@Autowired
private UserMapper userMapper;
@GetMapping("/genders")
public ResponseEntity<List<Gender>> getAllGenders() {
List<Gender> genders = userMapper.getAllGenders();
return ResponseEntity.ok(genders);
}
}
通过访问 "/users/genders" 路径,您将能够从 Controller 层调用 UserService 的方法获取所有用户记录中枚举属性 gender 的所有取值并返回给前端。
上述代码使用了 MyBatis Plus 中的 LambdaQueryChainWrapper 类来实现链式查询,并结合 Java 8 的流操作进行数据处理。
-
LambdaQueryChainWrapper:
- LambdaQueryChainWrapper 是 MyBatis Plus 提供的一个类,它允许我们在 Mapper 层中使用 Lambda 表达式进行链式查询操作,而无需手动编写 SQL 语句。
-
select(User::getGender):
- 在这里,我们使用 select 方法指定要查询的字段,这里选择了 User 实体类中的 gender 属性。
-
list():
- list 方法执行查询并返回结果列表。
-
stream():
- 将结果列表转换为一个流,以便我们可以使用流操作对数据进行处理。
-
map(User::getGender):
- 使用 map 方法将 User 对象映射为其 gender 属性的值,这样我们就得到了一个存储了所有 gender 取值的 Stream。
-
distinct():
- 使用 distinct 方法去除重复的元素,确保最终结果中不包含重复的枚举值。
-
collect(Collectors.toList()):
- 最后使用 collect 方法结合 Collectors.toList() 收集流中的元素并构建为一个 List,最终返回包含去重后枚举属性取值的列表。
通过上述操作,我们实现了从数据库中查询所有用户记录中的枚举属性 gender 的取值,并且保证了返回的列表中不包含重复值。这样的代码结构简洁高效,利用了 MyBatis Plus 和 Java 8 的特性,使得查询和处理数据变得更加方便和灵活。