nested exception is org.apache.ibatis.executor.ExecutorException: No constructor found in com.chm.company.entity.RootSms matching [java.lang.Integer,
时间: 2025-03-08 21:00:53 浏览: 45
### 解析 MyBatis 构造函数匹配异常
当遇到 `org.apache.ibatis.executor.ExecutorException: No constructor found` 错误时,通常是因为 MyBatis 尝试通过反射创建实体对象实例失败。具体来说,在尝试映射数据库查询结果到 Java 对象时,MyBatis 需要找到一个与返回字段数量和类型相匹配的构造方法。
对于 `RootSms` 类型报告的错误:
```plaintext
No constructor found in RootSms matching [java.lang.Integer]
```
这意味着 MyBatis 正试图使用带有单个整数参数的构造器来初始化 `RootSms` 实例,但是未能成功定位这样的构造器[^1]。
#### 可能的原因及解决方案
- **缺少合适的构造器**
如果 `RootSms` 没有定义任何带参构造器,则应考虑添加相应的构造器或者确保存在无参默认构造器以便于框架自动处理。例如:
```java
public class RootSms {
private Integer id;
// 无参构造器供序列化和其他用途使用
public RootSms() {}
// 带有一个Integer类型的构造器用于满足当前需求
public RootSms(Integer id) {
this.id = id;
}
}
```
- **Lombok 注解缺失或版本不兼容**
由于项目中已经引入了 Lombok 库作为依赖项,因此还需要确认是否正确应用了必要的注解(如 `@AllArgsConstructor`, `@NoArgsConstructor`) 并且编译工具链支持这些特性。另外需要注意的是不同版本之间可能存在差异,建议升级至最新稳定版以获得更好的兼容性和功能支持[^2]。
- **配置文件中的 resultMap 设置不当**
有时即使提供了正确的构造器,但如果 XML 映射文件里的 `<resultMap>` 定义不合理也会引发此类问题。务必仔细核对 SQL 查询语句所涉及列名及其对应属性名称之间的关系,并适当调整映射规则使二者保持一致[^3]。
- **内部类相关的问题**
如果是非静态内部类导致的问题,那么将其改为静态内部类可能解决问题。因为非静态内部类会持有对外部类实例的隐式引用,这可能导致反序列化过程中出现问题[^4]。
```xml
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>latest_version_here</version>
<scope>provided</scope>
</dependency>
```
更新 lombok 版本并重启 IDE 和构建过程可以帮助解决潜在的插件冲突或解析错误。
阅读全文
相关推荐




