java: Can‘t generate mapping method with primitive return type
报错 java: Can't generate mapping method with primitive return type
- 问题描述
- 原因分析
- 错误原因说明
- 解决方案
问题描述
在启动 SpringBoot 项目时,遇到以下错误:
java: Can’t generate mapping method with primitive return type.
原因分析
错误提示 Can’t generate mapping method with primitive return type 表明代码中存在返回值为基本数据类型(如 int、boolean)的方法,但框架无法生成对应的映射实现。这通常与 MyBatis 的 SQL 映射方法相关,因为 MyBatis 需要通过 Mapper 接口生成代理实现类。
错误原因说明
org.mapstruct.Mapper是 MapStruct 框架的注解,用于对象映射
org.apache.ibatis.annotations.Mapper是 MyBatis 的注解,用于声明数据库映射接口
MapStruct 是对象映射工具,其 @Mapper 注解用于生成 JavaBean 转换代码,不支持数据库操作
MyBatis 的 @Mapper 注解用于声明 DAO 接口,需配合 SQL 映射文件或 @Select 等注解使用
当错误引入 MapStruct 的 @Mapper 时,MyBatis 无法识别这些接口为 DAO,导致映射方法生成失败
维度 | MapStruct @Mapper | MyBatis @Mapper |
---|---|---|
所属框架 | 对象映射工具(属性复制) | 数据持久层框架(SQL 执行) |
注解路径 | org.mapstruct.Mapper | org.apache.ibatis.annotations.Mapper |
核心作用 | 生成类型安全的 Bean 转换代码 | 声明数据库操作接口 |
处理阶段 | 编译期(通过 Annotation Processor 生成实现类) | 运行期(通过 Spring 动态代理生成 DAO 实现) |
返回值约束 | 必须为对象类型(如 DTO、Entity) | 支持任意类型(包括基本类型、集合、自定义对象) |
典型应用场景 | UserDTO toDTO(User entity) | @Select(“SELECT COUNT(*) FROM users”) int count() |
解决方案
检查项目代码后,发现 Mapper 接口错误地使用了非 MyBatis 的@Mapper注解:
import org.mapstruct.Mapper; // 错误的注解引入
import org.apache.ibatis.annotations.Mapper; // 正确的MyBatis注解