MyBatis-Plus 零 SQL 技巧:优雅摘取表字段最大值并规避空值风险
在使用 MyBatis-Plus 时,可以通过 `QueryWrapper` 和 `lambda` 表达式来实现查询表中某个字段的最大值,并且只返回该值。以下是一个示例代码,假设你有一个实体类 `User` 和一个对应的 `UserMapper`。 实体类 `User` ```java public class User { private Long id; private String name; private Integer age; // getters and setters } ``` Mapper 接口 `UserMapper` ```java import com.baomidou.mybatisplus.core.mapper.BaseMapper; public interface UserMapper extends BaseMapper<User> { } ``` 查询最大值的代码 ```java import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class UserService { @Autowired private UserMapper userMapper; public Integer getMaxAge() { LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.select(User::getAge).orderByDesc(User::getAge).last("limit 1"); return userMapper.selectOne(queryWrapper).getAge(); } } ``` 解释 1. LambdaQueryWrapper: 使用 `LambdaQueryWrapper` 来构建查询条件。 2. select: 指定查询的字段,这里只查询 `age` 字段。 3. orderByDesc: 按 `age` 字段降序排列。 4. last("limit 1"): 添加 SQL 的 `LIMIT 1` 子句,确保只返回一条记录。 5. selectOne: 执行查询并返回一个 `User` 对象。 6. getAge: 从返回的 `User` 对象中获取 `age` 字段的值。 注意事项 - 如果表中没有数据,`selectOne` 方法会返回 `null`,因此在实际使用中需要处理这种情况。 - 如果你需要处理更复杂的情况,可以考虑使用 `List<User>` 和 `stream` API 来处理结果集。 处理空值的情况 ```java public Integer getMaxAge() { LambdaQueryWrapper<User> queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.select(User::getAge).orderByDesc(User::getAge).last("limit 1"); User user = userMapper.selectOne(queryWrapper); return user != null ? user.getAge() : null; } ``` 这样,即使表中没有数据,也不会抛出 `NullPointerException`。 ######[AI写代码神器 | 532点数解答 | 2024-10-17 15:02:35]
- Java SQL语法错误:“select count(*)”语句出错,教你排查MariaDB SQL语法问题!( | 350点数解答 | 2024-04-25 08:26:19)397
- 巧用 MyBatis Plus 自定义拦截器实现数据权限控制(讯飞星火 | 567点数解答 | 2024-05-29 22:59:21)267
- MyBatis-Plus 纯代码实现联表查询:附详细示例代码(字节豆包 | 284点数解答 | 2024-10-17 11:46:14)218
- MyBatis-Plus 轻松实现:获取表中特定字段最大值全流程指南(阿里通义 | 527点数解答 | 2024-10-17 14:52:50)385
- MyBatis-Plus 代码示例:轻松实现取某个字段最大值! (字节豆包 | 237点数解答 | 2024-12-10 10:12:49)169
- MyBatis-Plus 轻松实现取某个字段最大值:附代码示例及注意事项(阿里通义 | 247点数解答 | 2024-12-10 10:13:04)328
- MyBatis-Plus处理Integer类型JSON数组:自定义TypeHandler实现及注意事项(DeepSeek | 660点数解答 | 2025-08-26 11:22:23)103
- MyBatis-Plus:自定义TypeHandler实现JSON数组转List<Integer>及注意事项(DeepSeek | 656点数解答 | 2025-08-26 11:26:36)145
- C++实现:根据三个整数关系输出对应结果(plus/minus/illegal)(DeepSeek | 98点数解答 | 2025-12-15 21:37:25)81
- MySQL 数据库操作:用德鲁伊连接池和 Spring JDBC 实现 MVC 架构下 Student 表操作及事务测试全解析(字节豆包 | 1115点数解答 | 2025-03-19 11:17:31)310
- Spring JDBC+德鲁伊连接池:MVC架构下MySQL学生表查询、事务验证及代码实现全解析(DeepSeek | 1275点数解答 | 2025-03-19 11:21:32)296
- 地下水及地基土腐蚀性分析:从代码优化到逻辑完善的全面攻略(DeepSeek | 498点数解答 | 2025-06-08 21:49:49)237