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

Mybatis中Mapper标签总结大全 文章目录一、标签分类二、标签总结1. 基础SQL标签1.1 查询select1.2 增删改1.3 其他基础标签1.3.1 sql 标签1.3.2 include 标签1.3.3 if 标签1.3.4 别名2. collection与association标签3. resultMap标签 4. foreach标签5. where标签6. set标签7. trim标签8. choose、when、ot... 阅读详情

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

// 主对象
public class ProjInfoModel {
    private Long projId;
    private String projName;
    private ProjAppInfoModel projAppInfoModel; // 关联对象

    // getters / setters
}

// 子对象
public class ProjAppInfoModel {
    private String preMoney;
    private String postMoney;
    private String inveRole;
    private String inveType;
    private String sumActualPayAmount;
    private Date startDate;

    // getters / setters
}
<resultMap id="ProjInfoResult" type="com.purvar.petou.ei.model.ProjInfoModel">
    <id column="PROJ_ID" property="projId"/>
    <result column="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"> <!-- 这里其实不用于查询,仅作逻辑分组 -->
        <result column="PRE_MONEY" property="preMoney"/>
        <result column="POST_MONEY" property="postMoney"/>
        <result column="INVE_ROLE" property="inveRole"/>
        <result column="inve_types" property="inveType"/>
        <result column="SUM_ACTUAL_PAY_AMOUNT" property="sumActualPayAmount"/>
        <result column="START_DATE" property="startDate" jdbcType="TIMESTAMP"/>
    </association>
</resultMap>
<select id="selectProjInfoWithApp" resultMap="ProjInfoResultInternal">
    SELECT 
        p.PROJ_ID,
        p.PROJ_NAME,
        a.PRE_MONEY,
        a.POST_MONEY,
        a.INVE_ROLE,
        a.inve_types,
        a.SUM_ACTUAL_PAY_AMOUNT,
        a.START_DATE
    FROM project_info p
    LEFT JOIN project_app_info a ON p.PROJ_ID = a.PROJ_ID
    WHERE p.PROJ_ID = #{projId}
</select>
ProjInfoModel proj = new ProjInfoModel();
proj.setProjId(1001L);
proj.setProjName("AI项目");

ProjAppInfoModel app = new ProjAppInfoModel();
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 版本对类型推断的实现可能有差异。

mybaits一对一, 一对多,原生直接sql mybaits 一对一 一对多 原生 sql 配置 方法 立即下载

相关推荐

Visio 2013 Professional密钥安装激活全攻略:版本匹配与故障排查

产品密钥是软件授权体系中的核心凭证,用于验证用户对软件的使用权限。在微软Office产品线中,Visio 2013 Professional采用25位字符的密钥机制,通过联网或电话方式完成激活。正确使用密钥不仅能确保软件功能完整,还能避免因授权问题导致的工作中断。对于企业IT运维和个人用户而言,掌握密钥类型辨析、安装包匹配规则以及激活失败排查方法,是保障老版本软件稳定运行的关键。本文围绕Visio 2013 Professional,详细讲解密钥输入、激活流程及常见错误代码处理,帮助读者高效完成部署与维护。

weixin_28487433的博客 333

【 SQL映射】映射元素、一对一(association)、一对多(collection)

association:映射到JavaBean的某个“复杂类型”属性,比如JavaBean类。resultMap自动映射匹配前提:字段名column与属性名property一致。resultMap自动映射匹配前提:字段名column与属性名property一致。collection:映射到JavaBean的某个“复杂类型”属性,比如集合。resultMap:数据库字段信息与对象属性不一致;result:映射到JavaBean的某个“简单类型”属性。property:映射数据库列的实体对象的属性。

m0_70083523的博客 3753

Silvaco Atlas入门指南——从零开始掌握半导体器件仿真

本文为Silvaco Atlas半导体器件仿真软件的入门指南,详细介绍了从零开始掌握该工具的核心流程。内容涵盖Atlas的基本概念、仿真流程、核心文件(输入、结构、输出文件)、交互式与批处理两种操作模式,并逐步演示了如何从定义网格、划分区域、设置电极到进行掺杂、选择物理模型并求解,最终获取和分析器件特性的完整步骤。旨在帮助微电子相关专业人员和工程师快速上手这一强大的“数字实验室”,提升半导体器件设计与研发效率。

weixin_29306317的博客 401

MyBatis复杂sql:多对一处理(association)和一对多(collection)

多对一(association标签) 老师和学生的例子 以学生为出发点,就是一个多对一的例子,即多个学生关联一个老师! 首先搭建数据库 CREATE TABLE `teacher` ( `id` INT(10) NOT NULL, `name` VARCHAR(30) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=INNODB DEFAULT CHARSET=utf8 INSERT INTO teacher(`id`, `name`) VALUES (1, '

积极羊 1736

图神经网络学习笔记-点云数据处理(专题七)

本教程解释了如何利用图神经网络(Graph Neural Networks,GNNs)来处理和训练点云数据。尽管点云默认情况下不具有图结构,但我们可以利用 PyG 的转换工具,将其转化为适合 PyG 所提供的全套 GNN 模型的形式。关键思想是从点云数据中创建一个,通过 GNN 的消息传递机制,从中学习有意义的局部几何结构。这些点的表示可以被用于例如点云分类或分割等任务。

351

测风数据垂直外推(原理及Windowgrapher操作示范)

垂直外推

weixin_46713695的博客 894

mybatis <association> 标签的使用

mybatis 标签的使用

果酱 の 博客 1万+

CSP-J2019普及组复赛T4:加工零件

CSP-J2020普及组复赛T1:优秀的拆分,广度优先遍历求最短路。

少儿编程乔老师 1854

Mybatis动态sql知识 :association和collection的区别

Mybatis动态sql知识总结 一、association和collection的区别 association关联,用于一对一或多对一查询 collection 集合,用于一对多查询, 举个例子: 在一个班级中, 多个学生对应一个班级,这就是多对一的关系; 一个班级对应多个学生,这就是一对多的关系。 一个学生表中含有:id ,name ,relname ,sex , age ,classid 一个班级表中含有:班级id,班级name。 其中学生表的classid和班级id为主外键关系。 如果我们想查询一个

张超的博客 2863

提升YOLOv8性能:用Swin Transformer替换Backbone的详细实现与分析【YOLOv8】

YOLOv8作为目标检测领域的最新版本,在速度和精度之间取得了良好的平衡。然而,随着计算机视觉任务的复杂性不断增加,YOLOv8的标准主干网络(Backbone)在处理高分辨率图像或多尺度目标时,可能存在一定的局限性。为了进一步提升YOLOv8的性能,我们可以引入Swin Transformer替换其主干网络,以增强模型的全局感知能力和多尺度特征提取能力。本文将详细介绍如何在YOLOv8中用Swin Transformer替换原有的Backbone,提供代码示例,并深入探讨其中的原理和效果。

博客 1717

js逆向第24例:FastMoss数据分析网站Fm-Sign加密字段破解

破解:FastMoss数据分析网站Fm-Sign加密字段。FastMoss主要是TikTok为主的大数据分析服务的一个网站

花臂不花Home 2153

Mybaits中Association元素使用

一、适用场景 Association元素适用于处理一对一类型关系,如下结构 OrderFlow和custInfo是一对一的,OrderFlow和OrderFlowInvoice也是一对一的 这种一对一的关系可以在一个表中也可以在多个表中 例子中的OrderFlow和custInfo在一个表中,OrderFlow和OrderFlowInvoice在两个表中 1、OrderFlow表的SQL如

欲穷千里目,更上一层楼 1687

手把手教你ensp仿真搭建校园网(含防火墙及无线网络)系列(一)校园网核心交换机配置

本系列博客将带你从零开始,使用 华为 eNSP(Enterprise Network Simulation Platform) 仿真搭建一个完整的校园网络,涵盖 核心层、汇聚层、接入层、防火墙安全策略、无线AC+AP组网 等实战场景。无论你是网络初学者还是希望深化实战经验的工程师,都能通过本教程掌握企业级网络的规划、配置与排错技巧。

echo的博客 3797

MyBatis入门-association标签使用

MyBatis高级结果映射 本篇主要介绍 association一对一查询 介绍-一对一映射 一对一映射因为不需要考虑是否存在重复数据,使用简单,可以直接使用MyBatis自动映射。 实践-自动映射 要求一个用户对应一个角色,类定义如下 public class SysUser implements Serializable { private static final long serialVersionUID = 854674092994608168L; ..... priva

weixin_43169156的博客 8624

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

MyBatis 中 resultMap、association、collection标签详解

MyBatis映射标签详解:resultMap定义基础映射规则,association处理一对一关系(如订单关联用户),collection处理一对多关系(如订单包含多个订单项)。通过JOIN查询和合理配置映射,可实现高效的对象关联查询,避免嵌套查询的性能问题。典型应用场景包括订单-用户-订单项等层级数据模型。

dfsdcvbhjnj的博客 1275

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

mybatis解析-association实现原理详解

mybatis中的标签association主要用于解决“有一个”类型的关系,它表示一个对象至多有一个关联对象。比如一般情况下,每个人都一个身份证,可能有些人没有(比如黑户和婴儿),人和身份证的关系就可以使用association表示。 本文接下来介绍association的三种用法,然后介绍其实现原理。 一、使用association 先定义两个类,一个是Person,一个是IDCard,分别表示人和身份证。 public class Person{ private int id; pri

龚厂长的博客 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Mybatis中标签大全

文章目录 一、标签分类 二、标签总结 1. 基础SQL标签 1.1 查询select 1.2 增删改 1.3 其他基础标签 1.3.1 sql 标签 1.3.2 include 标签 1.3.3 if 标签 1.3.4 别名 2. collection与association标签 3. resultMap标签 4. foreach标签 5. where标签 6. s...

子墨秋风 4182

Mybatis association标签用途

association标签用于一对一关系 就是 将另一张表的字段 关联过来 然后一起映射到实体类; 而实体类可以 关联另一张表的实体对象,也可以另一张表中所需的字段; 就是两张表的关联查询, 然后映射到实体类中; 如下实现的是在实体类Clientconsist 中有三个属性 分别是: private integer rkId; private String rkName; ...

weixin_43521767的博客 6992

Mybatis中“association”标签多层嵌套问题

mybatis里查询使用嵌套association标签时,发现内层的association查询的结果一直为null 排查: 检查sql执行情况,发现有数据返回,排除 检查property的值是否和pojo中的对应,值一致,排除 检查column的值是否和数据库的相对应,相对应,排除 那么应该是mybatis没有把数据映射到位了,经过排查是association中columnPrefix被不对应...

零一零零一 4082

mybatis 查询中collection和association 标签的使用

准备两个表员工和部门,关系是一个部门下有多个员工,表数据如下 员工: 部门: 对应的实体: 员工: @Data public class Emp { private Integer id; private String empName; private String sex; private String email; private Dept dept; } 部门: @Data public class Dept { pr

csdnmuyi的博客 1818

MyBatis-结果映射association标签的使用

association标签的部分说明 可参考的DTD规范 &lt;!ELEMENT association (constructor?,id*,result*,association*,collection*, discriminator?)&gt; &lt;!ATTLIST association property CDATA #REQUIRED column CDATA #...

@siye 1724

mybatis的association以及collection的用法

注意,只有在做select查询时才会用到这两个标签,都有三种用法,且用法类似。先看如下代码(省略set、get方法): 以上是实体类、dao层的设计以及在UserDao.xml中queryById方法的sql语句的编写,因为不论用association的哪种方式,sql语句都是一样的写,不同的只是userMap的写法,所以这里先给出这段代码。User询Card是一对一关系,在数据库中,tb_user表通过外键card_id关联tb_card表。下面分别用association的三种用法来实现queryBy

justleavel的博客 5476

Mybatis-association和collection标签的使用

主要是关于员工表和部门表的查询,建表语句在后面。数据库和实体类中的字段名是相同的//部门表//部门编号//部门名称//员工集合@Overridereturn "部门:"+did+" "+dname+" "+employeeList;//员工表//员工编号//部门信息@Overridereturn "员工:"+id+" "+eid+" "+name+" "+age+" "+email+" "+did+" "+department1;

qq_62649563的博客 4903

MyBatis:association和collection标签 - 分步查询

MyBatis:association和collection标签 - 分步查询 mybatis这两个标签都可以实现单步查询和分步查询,单步查询很好理解,如下: 参考 mybatis中collection和association的作用以及用法 关联查询的实现方法-使用mybatis框架 Left join 语句 deptDaoMapper.xml:部门对应员工(1对多的关系) <resultMap type="com.hw.entity.Dept" id="deptinfo"><!--

qq_33934427的博客 1773

mybatis中一对一关系association标签的使用

association字面翻译为联合之意,Java项目开发中常遇到一对一关系的结果,例如,一个商品对应一个生产商,在查询结果中如果某两个对象是一对一关系一般使用association标签,用法有两种: 1,嵌套的resultMap,一次性查询出所有结果的相关字段,结果把所有字段映射到不同的对象的类变量中; &lt;resultMap id="map01" type="Model01"&gt;...

shenzhenNBA的专栏 3256

Mybatis中association标签的用法

【代码】Mybatis中association标签的用法。

qq_56444564的博客 2062
上一篇: sql语法-批量插入
下一篇: sql语法- MyBatis 中 <collection> 标签的作用 1对多的情况
han_hanker
博客等级 码龄13年 35粉丝 106原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值