使用mybatis plus查询实体类的枚举属性

假设我们有一个实体类 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 的流操作进行数据处理。

  1. LambdaQueryChainWrapper:

    • LambdaQueryChainWrapper 是 MyBatis Plus 提供的一个类,它允许我们在 Mapper 层中使用 Lambda 表达式进行链式查询操作,而无需手动编写 SQL 语句。
  2. select(User::getGender):

    • 在这里,我们使用 select 方法指定要查询的字段,这里选择了 User 实体类中的 gender 属性。
  3. list():

    • list 方法执行查询并返回结果列表。
  4. stream():

    • 将结果列表转换为一个流,以便我们可以使用流操作对数据进行处理。
  5. map(User::getGender):

    • 使用 map 方法将 User 对象映射为其 gender 属性的值,这样我们就得到了一个存储了所有 gender 取值的 Stream。
  6. distinct():

    • 使用 distinct 方法去除重复的元素,确保最终结果中不包含重复的枚举值。
  7. collect(Collectors.toList()):

    • 最后使用 collect 方法结合 Collectors.toList() 收集流中的元素并构建为一个 List,最终返回包含去重后枚举属性取值的列表。

通过上述操作,我们实现了从数据库中查询所有用户记录中的枚举属性 gender 的取值,并且保证了返回的列表中不包含重复值。这样的代码结构简洁高效,利用了 MyBatis Plus 和 Java 8 的特性,使得查询和处理数据变得更加方便和灵活。

相关推荐
一条泥憨鱼3 分钟前
Java开发效率神器:Lombok从入门到精通!
java·后端·学习·开发·lombok
Jinkxs4 分钟前
Python基础 - 初识内置函数 Python自带的便捷工具
android·java·python
熠熠仔4 分钟前
Spring Boot 与 MyBatis-Plus 空间几何数据集成指南
spring boot·后端·mybatis
AI 小老六11 分钟前
Google AX 控制面拆解:分布式 Agent 如何把断点恢复、审计策略和执行调度收进同一条链路
人工智能·分布式·后端·ai·架构·ai编程
奥利奥夹心脆芙13 分钟前
零基础调试 Java 代码:Gemini 报错排查完整实操指南
java
YHHLAI14 分钟前
从零搭建一个 RESTful Todo 服务 —— Bun + TypeScript 全栈最小闭环
后端·typescript·restful
小闹54922 分钟前
一个 65 行的小需求,我让 Claude Code 跑了 25 个 agent、整整两小时
后端·claude
天青色等烟雨..24 分钟前
智慧农林核心遥感技术99个案例实践
运维·人工智能·spring boot·后端·自动化
西安邮电大学28 分钟前
贪心算法详细讲解
java·后端·其他·算法·面试
橙序员小站32 分钟前
从"夯"到"拉":谷歌苹果华为开发者大会,谁在裸泳?
人工智能·后端