之前我们都是普通查询, 现在我们有个疑问如果出现下面的定义的model 数据库能直接查询么, 就是sql查询出来能够映射 对象作为另外一个对象的属性// 主对象publicclassProjInfoModel{privateLongprojId;privateStringprojName;privateProjAppInfoModelprojAppInfoModel;// 关联对象// getters / setters}// 子对象publicclassProjAppInfoModel{privateStringpreMoney;privateStringpostMoney;privateStringinveRole;privateStringinveType;privateStringsumActualPayAmount;privateDatestartDate;// getters / setters}resultMap idProjInfoResulttypecom.purvar.petou.ei.model.ProjInfoModelidcolumnPROJ_IDpropertyprojId/resultcolumnPROJ_NAMEpropertyprojName//resultMapresultMap idProjInfoResultInternaltypecom.purvar.petou.ei.model.ProjInfoModelextendsProjInfoResultassociation propertyprojAppInfoModeljavaTypecom.purvar.petou.ei.model.ProjAppInfoModelcolumnPROJ_ID!-- 这里其实不用于查询仅作逻辑分组 --resultcolumnPRE_MONEYpropertypreMoney/resultcolumnPOST_MONEYpropertypostMoney/resultcolumnINVE_ROLEpropertyinveRole/resultcolumninve_typespropertyinveType/resultcolumnSUM_ACTUAL_PAY_AMOUNTpropertysumActualPayAmount/resultcolumnSTART_DATEpropertystartDatejdbcTypeTIMESTAMP//association/resultMapselectidselectProjInfoWithAppresultMapProjInfoResultInternalSELECTp.PROJ_ID,p.PROJ_NAME,a.PRE_MONEY,a.POST_MONEY,a.INVE_ROLE,a.inve_types,a.SUM_ACTUAL_PAY_AMOUNT,a.START_DATEFROMproject_info pLEFTJOINproject_app_info aONp.PROJ_IDa.PROJ_IDWHEREp.PROJ_ID#{projId}/selectProjInfoModelprojnewProjInfoModel();proj.setProjId(1001L);proj.setProjName(AI项目);ProjAppInfoModelappnewProjAppInfoModel();app.setPreMoney(500万);app.setPostMoney(600万);app.setInveRole(领投);app.setInveType(VC);// ...proj.setProjAppInfoModel(app);// 自动注入我们仔细的看下查询 首先使用了 resultMap , 映射类型都是type“com.purvar.petou.ei.model.ProjInfoModel” 第二个resultMap 有个 extends“ProjInfoResult” 就是继承了第一个resultMap 的所有属性,应该也可以合写为什么需要 javaTypeMyBatis 在运行时通过反射创建对象。当你在 中定义一个嵌套对象如 projAppInfoModel时MyBatis 无法仅从字段名推断出该对象的具体类型尤其是当属性是接口、抽象类或泛型时。因此必须通过 javaType 明确告知即使 MyBatis 能自动推断类型显式写出 javaType 仍然是推荐做法原因包括提高代码可读性XML 配置自包含无需跳转到 Java 类查看类型。避免潜在错误防止因字段类型变更如改为接口导致运行时异常。兼容性保障不同 MyBatis 版本对类型推断的实现可能有差异。