如何通过MyBatis Java API实现ResultMap关联(对应XML的Association标签)?遇异常求助
解决MyBatis注解实现实体关联的异常问题
我来帮你搞定这个MyBatis注解方式关联实体的问题!你遇到的No typehandler found for property prop异常,主要是代码里的两个关键错误导致的:属性名称写错了,以及关联的ResultMap指向错误。下面一步步给你纠正并给出正确的实现方案。
先明确核心问题
你的实体类A里的关联属性是b,但代码里误写为prop;而且@One注解里的resultMap指向了A的ResultMap,这完全不对——应该指向B实体的ResultMap。这两个错误让MyBatis无法正确映射字段与实体属性,从而抛出类型处理器找不到的异常。
正确的实现方案
根据你的需求(从同一张表解析两个实体并关联),分两种常用场景给出代码:
场景1:嵌套结果(一次SQL查询映射两个实体)
这种方式适合同一张表包含A和B的所有字段,一次查询就能获取所有数据,然后通过ResultMap分别映射到A和B。
首先定义B的ResultMap,再在A的ResultMap里关联它:
public interface ADao { // 先定义B的ResultMap,用于映射表中属于B的字段 @Results(id = "bResultMap", value = { @Result(property = "number", column = "number"), // column对应你的表字段名 @Result(property = "description", column = "description") }) // 定义A的ResultMap,关联B实体 @Results(id = "aResultMap", value = { @Result(property = "id", column = "id"), @Result(property = "name", column = "name"), // 关键:property是A类里的b属性,one指向B的ResultMap(用全限定路径也可以,比如"com.yourcompany.dao.ADao.bResultMap") @Result(property = "b", javaType = B.class, one = @One(resultMap = "bResultMap")) }) @Select("SELECT id, name, number, description FROM your_table WHERE id = #{id}") A getAById(int id); }
场景2:嵌套查询(两次SQL查询,先查A再查B)
如果A和B的数据需要分开查询(比如B存在另一张表,或者需要单独过滤),可以用嵌套查询的方式:
首先定义B的查询Mapper:
public interface BDao { @Select("SELECT number, description FROM your_table WHERE id = #{aId}") B getBByAId(int aId); }
然后在A的Mapper里关联这个查询:
public interface ADao { @Results(id = "aResultMap", value = { @Result(property = "id", column = "id"), @Result(property = "name", column = "name"), // 用select指定查询B的方法,column传递A的id作为参数 @Result(property = "b", javaType = B.class, one = @One(select = "com.yourcompany.dao.BDao.getBByAId", fetchType = FetchType.EAGER)) }) @Select("SELECT id, name FROM your_table WHERE id = #{id}") A getAById(int id); }
关键注意事项
- 确保
@Result的property值和实体类中的属性完全一致:你的A类里是b,绝对不能写成prop! @One的resultMap必须指向B实体的ResultMap,而不是A的,否则MyBatis不知道怎么映射B的字段- 如果用嵌套查询,
select属性要写查询B的方法的全限定名(包名+接口名+方法名) - 所有
column值要和你的数据库表字段名一一对应,大小写敏感(取决于数据库配置)
内容的提问来源于stack exchange,提问作者Lukas Bard
相关产品推荐
相关产品推荐

