当前位置: 首页 > news >正文

sql语法- MyBatis 中 <association> 标签的作用 1对1的情况

之前我们都是普通查询, 现在我们有个疑问如果出现下面的定义的model 数据库能直接查询么, 就是sql查询出来能够映射 对象作为另外一个对象的属性

// 主对象publicclassProjInfoModel{privateLongprojId;privateStringprojName;privateProjAppInfoModelprojAppInfoModel;// 关联对象// getters / setters}// 子对象publicclassProjAppInfoModel{privateStringpreMoney;privateStringpostMoney;privateStringinveRole;privateStringinveType;privateStringsumActualPayAmount;privateDatestartDate;// getters / setters}
<resultMap id="ProjInfoResult"type="com.purvar.petou.ei.model.ProjInfoModel"><idcolumn="PROJ_ID"property="projId"/><resultcolumn="PROJ_NAME"property="projName"/></resultMap><resultMap id="ProjInfoResultInternal"type="com.purvar.petou.ei.model.ProjInfoModel"extends="ProjInfoResult"><association property="projAppInfoModel"javaType="com.purvar.petou.ei.model.ProjAppInfoModel"column="PROJ_ID"><!-- 这里其实不用于查询,仅作逻辑分组 --><resultcolumn="PRE_MONEY"property="preMoney"/><resultcolumn="POST_MONEY"property="postMoney"/><resultcolumn="INVE_ROLE"property="inveRole"/><resultcolumn="inve_types"property="inveType"/><resultcolumn="SUM_ACTUAL_PAY_AMOUNT"property="sumActualPayAmount"/><resultcolumn="START_DATE"property="startDate"jdbcType="TIMESTAMP"/></association></resultMap>
<selectid="selectProjInfoWithApp"resultMap="ProjInfoResultInternal">SELECTp.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_ID=a.PROJ_IDWHEREp.PROJ_ID=#{projId}</select>
ProjInfoModelproj=newProjInfoModel();proj.setProjId(1001L);proj.setProjName("AI项目");ProjAppInfoModelapp=newProjAppInfoModel();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 的所有属性,应该也可以合写

  1. 为什么需要 javaType
    MyBatis 在运行时通过反射创建对象。当你在 中定义一个嵌套对象(如 projAppInfoModel)时,MyBatis 无法仅从字段名推断出该对象的具体类型(尤其是当属性是接口、抽象类或泛型时)。因此,必须通过 javaType 明确告知

即使 MyBatis 能自动推断类型,显式写出 javaType 仍然是推荐做法,原因包括:
提高代码可读性:XML 配置自包含,无需跳转到 Java 类查看类型。
避免潜在错误:防止因字段类型变更(如改为接口)导致运行时异常。
兼容性保障:不同 MyBatis 版本对类型推断的实现可能有差异。

http://www.gsyq.cn/news/1628701.html

相关文章:

  • TB9051FTG与MKV42F64VLH16的直流电机静音驱动方案
  • 一张架构图看懂 CC Switch:AI Coding 工具链终于有了“控制中心”
  • 如何在Windows上轻松安装虚拟游戏控制器驱动:ViGEmBus完整指南
  • GPT-5.5 上下文缓存怎么用?Token降本方案与代码实战指南
  • AI 如何提升工程生产力:高管圆桌会议的关键洞察
  • 生产环境监控方案,Prometheus 加 Grafana 可视化显卡状态
  • 高精度4-20mA电流环设计:基于DAC161S997与PIC18F86K90
  • 如何快速实现RTSP到网页直播:简单3步完整指南
  • 别被“纯手工编程”情怀绑架!资深CTO坦白局:淘汰率最高的不是不会AI的人,而是不会评估AI输出的人
  • 百万年薪级别 AI工程师 面试题和答案集合
  • 2026年自动驾驶临界点:法规、芯片与EEA的协同突破
  • PyTorch 源码编译避坑,解决 AMD 平台常见的链接错误
  • 为何企业微信API集成总是难以做到跨地域灾备?
  • Fable 5限时回归7天,CTO如何抓住窗口期完成模型选型与成本优化 - 微元算力(weytoken)
  • GitHub今日热榜 | 2026-07-02:Facebook设计系统开源首秀
  • EXE一机一码加密实战:从硬件指纹到授权验证的完整方案
  • MAX9744与STM32嵌入式音频系统设计与优化
  • 2026年度API聚合平台横向评估:企业级Claude调用链路的架构选型逻辑
  • 我已严肃深扒Claude Code的源码,证明那段针对国内用户的代码是真的。
  • Playwright三大Agent实战:从测试生成到自愈的自动化测试新范式
  • 算力中心用电告急?氢能应急电源正成为“新刚需”
  • AI时代大模型入门指南:小白程序员抓住新机遇,未来职场生存必备技能
  • 前端Monorepo依赖管理优化:pnpm硬链接与按需安装实战
  • 7自由度开源机械臂:从零到一的完整搭建指南
  • 3步掌握MDUT数据库利用工具:从入门到高效实战
  • Anthropic 大面积封号,连大 V 都忍不了开喷了。
  • Appium会话启动失败:系统性排查与解决方案全解析
  • 为什么企微OA数据同步进入数仓总是产生断层?
  • 本地 API 服务搭建,用 Ollama 快速发布大模型接口
  • 缠论分析自动化终极指南:5分钟让通达信变身智能缠论分析平台