BUG现象
MyBatis 查询语句封装返回结果报错,表现形式常见以下三种:
简而言之,MyBatis 的 Mapper 中 resultType
指定类 没有无参构造方法
原因分析
出问题的代码如下
Device.java
DeviceMapper.xml
直接原因是使用了 lombok.Builder
注解 @Builder
,该注解为类生成全参数构造方法,导致类没有了无参构造方法
@Builder
副作用如下:
- 没有无参构造
- 默认值无效
最佳实践,在使用 @Builder
时配合 @Builder.Default
指定默认值,@Tolerate
修饰无参构造方法。
经验教训
基于 Spring Boot 的 Web Server 技术栈中常用反射创建对象,各种 VO
\ DTO
\ BO
\ PO
\ Entity
\ Model
等用户存储或传输数据的类,明确声明无参构造方法 是比较稳妥做法