1. 关于 lambdaQuery() 的参数引用问题


2. 关于 MyBatis-Plus 查询结果为空


3. 集合是否为 null 或空


4. 关于 throwreturn 后的代码


5. 实例方法引用与流的处理


6. 按 List<AddressVO> 中的 userId 分类


7. 枚举类的设计


8. 关于 paginationInnerInterceptor.setMaxLimit(1000)


9. paginationInnerInterceptor.setMaxLimit 的意义


10. MyBatis-Plus 不更新为 null 的字段

默认情况下,MyBatis-Plus 不会更新为 null 的字段。这是因为框架对 null 值的处理机制默认跳过。

相关设置:

mybatis-plus:
  global-config:
    db-config:
      logic-not-delete-value: "1"
      logic-delete-value: "0"
      update-strategy: NOT_NULL  # 改为 NULL 即可让 null 值也被更新

关键配置解释:


11. **call-setters-on-nulls**

如果你需要从数据库查询出的 null 值被赋给实体类的字段,同时也允许实体类的 null 值更新到数据库,你需要同时配置这两者。


12. @RequestParam 与实体类接收查询参数

示例:

@GetMapping("/users")
public List<UserVO> getUsers(UserQueryDTO queryDTO) {
    // queryDTO 自动绑定查询参数
    return userService.queryUsers(queryDTO);
}

请求示例:

GET /users?name=John&age=25

13. BaseMapper 和 Service 中的 LambdaQueryWrapper 和 lambdaQuery()

示例对比:

// BaseMapper
LambdaQueryWrapper<User> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(User::getAge, 25);
List<User> users = userMapper.selectList(wrapper);

// Service
List<User> users = userService.lambdaQuery().eq(User::getAge, 25).list();

14. BeanUtil.copyProperties 的行为

示例:

public class User {
    private String name;
    private Integer age;
    private String email;
    // Getters and Setters
}

public class UserVO {
    private String name;
    private Integer age;
    // Getters and Setters
}

User user = new User();
user.setName("John");
user.setAge(25);
user.setEmail("john@example.com");

UserVO userVO = new UserVO();
BeanUtil.copyProperties(user, userVO);
// userVO 仅复制 name 和 age,email 不会被复制。