Mybatis 一对一 关联查询 与 resultMap

Mybatis---一对一关联表查询 开发过程中表的关联查询几乎处处可见,Mybatis对关联查询可进行很好的处理,下面主要记录下一对一关联表的查询。 此处用到两个实体类及其关系如下: School与President为一对一关联,设计javaBean: //校长 public class President { private int id; private String name; @Override p 阅读详情

业务背景:

  公司跟品牌是一对一关系,根据品牌编号查询品牌信息,附带查询品牌所属的公司(一对一关联查询)


数据库结构:

  品牌表: t_brand

  公司表:t_corporation

CREATE TABLE t_brand (
  brandid int(11) NOT NULL AUTO_INCREMENT,
  brandname varchar(30) DEFAULT NULL,
  corpid int(11) DEFAULT NULL,
  PRIMARY KEY (brandid)
)  DEFAULT CHARSET=utf8 COMMENT='品牌';

INSERT INTO t_brand VALUES ('1', 'Apple 苹果', '1');
INSERT INTO t_brand VALUES ('2', '华为', '2');
INSERT INTO t_brand VALUES ('3', 'OPPO', '3');
INSERT INTO t_brand VALUES ('4', '小米', '4');


CREATE TABLE t_corporation (
  corpid int(11) NOT NULL AUTO_INCREMENT,
  name varchar(255) DEFAULT NULL,
  PRIMARY KEY (corpid)
)  DEFAULT CHARSET=utf8;


INSERT INTO t_corporation VALUES ('1', 'Apple Inc. ');
INSERT INTO t_corporation VALUES ('2', '华为技术有限公司');
INSERT INTO t_corporation VALUES ('3', '欧珀移动通信有限公司');
INSERT INTO t_corporation VALUES ('4', '小米科技有限责任公司');


实体类:

package com.cheese.pojo;

public class Corporation {
	private int corpid;
	private String name;	
	
	public int getCorpid() {
		return corpid;
	}
	public void setCorpid(int corpid) {
		this.corpid = corpid;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
}



package com.cheese.pojo;

public class Brand {
	private int brandid;
	private String brandname;
	
	private Corporation corp;//Corporation对象作为品牌的一个属性
	
	public int getBrandid() {
		return brandid;
	}
	public void setBrandid(int brandid) {
		this.brandid = brandid;
	}
	public String getBrandname() {
		return brandname;
	}
	public void setBrandname(String brandname) {
		this.brandname = brandname;
	}
	public Corporation getCorp() {
		return corp;
	}
	public void setCorp(Corporation corp) {
		this.corp = corp;
	}		
}


Mapper文件:brandMapper.xml

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!-- namespace的值设置成包名+sql映射文件名,保证namespace取值唯一 -->
<mapper namespace="com.cheese.mapping.brandMapper">

    <!-- 
            方式一:嵌套结果:使用嵌套结果来映射结果集
        select b.brandid,b.brandname,b.corpid,c.`name` from t_brand b,t_corporation c 
        where b.corpid=c.corpid and b.brandid=1;
    -->
    <select id="getBrand" parameterType="int" resultMap="BrandResultMap">
        select b.brandid,b.brandname,b.corpid,c.`name` from t_brand b,t_corporation c 
        where b.corpid=c.corpid and b.brandid=#{brandid}
    </select>
    <!-- resultMap映射实体类和字段之间的一一对应关系 -->
    <resultMap type="com.cheese.pojo.Brand" id="BrandResultMap">
        <id property="brandid" column="brandid"/>
        <result property="brandname" column="brandname"/>
        
        <association property="corp" javaType="com.cheese.pojo.Corporation">  <!--配置关联关系-->
            <id property="corpid" column="corpid"/>
            <result property="name" column="name"/>
        </association>
    </resultMap>
    
    <!-- 
          方式二:嵌套查询:通过单独的一个SQL语句来返回关联的对象
        select b.brandid,b.brandname,b.corpid from t_brand b where b.brandid=1;
        select c.corpid,c.`name` from t_corporation c where c.corpid=1;
    -->
     <select id="getBrand2" parameterType="int" resultMap="BrandResultMap2">
        select b.brandid,b.brandname,b.corpid from t_brand b where b.brandid=#{brandid}
     </select>
     <select id="getCorp" parameterType="int" resultType="com.cheese.pojo.Corporation">
        select c.corpid,c.`name` from t_corporation c where c.corpid=#{corpid};
     </select>       
     <!-- resultMap映射实体类和字段之间的一一对应关系 -->
     <resultMap type="com.cheese.pojo.Brand" id="BrandResultMap2">
        <id property="brandid" column="brandid"/>
        <result property="brandname" column="brandname"/>
        
        <association property="corp" column="corpid" select="getCorp"/>  <!--配置关联关系-->
     </resultMap>   


</mapper>


mybatis配置文件:config.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN" "http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <!-- 配置数据库连接信息 -->
            <dataSource type="POOLED">
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/base6?useUnicode=true&characterEncoding=UTF8"/>
                <property name="username" value="bts" />
                <property name="password" value="b111" />
            </dataSource>
        </environment>              
    </environments>
        
    <mappers>
        <!-- 注册brandMapper.xml文件  -->       
        <mapper resource="com/cheese/mapping/brandMapper.xml"/>

    </mappers>        
</configuration>


测试程序:

package com.cheese.test;


import org.apache.ibatis.session.SqlSession;
import org.junit.Test;import com.cheese.pojo.Brand;

public class TestQuery {
    
    @Test
    public void getBrand(){
        SqlSession sqlSession = SessionUtil.getSession();
    	/**
    	 * com.cheese.mapping.brandMapper.getBrand
		 * 定位到brandMapper.xml 中 id 为 getBrand 的语句
    	 */
        String getBrandStr = "com.cheese.mapping.brandMapper.getBrand";//
        //执行查询,返回Brand对象
        Brand brand = sqlSession.selectOne(getBrandStr,1);//查询t_brand表中brandid为1的记录
        sqlSession.close();
        System.out.println("品牌:" + brand.getBrandname() + " --> " + brand.getCorp().getName());
    }   
    
    @Test
    public void getBrand2(){
    	SqlSession sqlSession = SessionUtil.getSession();
    	/**
    	 * com.cheese.mapping.brandMapper.getBrand2
		 * 定位到brandMapper.xml 中 id 为 getBrand2 的语句
    	 */
    	String getBrandStr = "com.cheese.mapping.brandMapper.getBrand2";//
    	//执行查询,返回Brand对象
    	Brand brand = sqlSession.selectOne(getBrandStr,1);//查询t_brand表中brandid为1的记录
    	sqlSession.close();
    	System.out.println("品牌:" + brand.getBrandname() + " ==> " + brand.getCorp().getName());
    }   
}


手把手教你搭建硬件在回路(HIL)仿真系统:从Simulink建模到实时测试 本文详细介绍了如何从零开始搭建硬件在回路(HIL)仿真系统,涵盖Simulink建模、实时仿真、代码生成及调试等关键步骤。通过具体配置示例和优化技巧,帮助开发者解决复杂控制系统验证中的技术难题,提升半实物仿真的效率和可靠性。 阅读详情

相关推荐

信息抽取实战:三元组抽取(限定领域 vs 开放领域)(附代码)

信息抽取实战:三元组抽取 目录信息抽取实战:三元组抽取一、限定领域的三元组抽取比赛介绍数据分析序列标注模型关系分类模型三元组提取总结开放领域的三元组抽取标注平台文本分类新数据进行三元组抽取总结参考文献 一、限定领域的三元组抽取   本项目将会介绍在2019语言与智能技术竞赛的三元组抽取比赛方面的一次尝试。由于该比赛早已结束,当时也没有参加这个比赛,因此没有测评成绩,我们也只能拿到训练集和验证集。但是,这并不耽误我们在这方面做实验。 比赛介绍   该比赛的网址为:http://lic2019.ccf.org.

南有芙蕖 2万+

mybatis高级查询-一对一查询

查询结果: 项目结构: 全局配置文件中扫描包: 一对一查询需求: 根据用户的订单,查询出订单信息和该订单关联的用户信息(eg:用户名和地址) 一对一查询有两种实现: 建议:一般情况建议采用方式一,因为比较简单,不需要自己定义resultMap,如果出现查询出的列名与java中的pojo类中的属性名不对应,可以采用在查询语句中用别名的方式来解决. 方式一: 采用resultType

YvesHe的专栏 1259

从命令到对话:LLM如何重塑车载语音交互与软件定义汽车体验

自动语音识别和自然语言处理是智能交互的核心基础技术,它们使机器能够理解和响应人类语音指令。其原理在于通过声学模型和语言模型将声音信号转化为文本,再解析文本背后的用户意图。这项技术的价值在于提供了一种自然、高效且能解放双手的人机交互方式,极大地提升了在特定场景(如驾驶)下的安全性与便利性。随着技术演进,其应用场景已从简单的命令控制扩展到复杂的多轮对话和跨域任务执行。当前,软件定义汽车的架构变革为车载语音提供了统一的控制平台,而大型语言模型的引入则带来了范式革命,使其从功能触发器进化为真正的智能任务执行者。本文

weixin_42669344的博客 563

mybatis中resultMap简单使用以及关联查询

文章目录1. resulttype和resultMap2. resultMap简单使用2.1 实体类2.2 数据库字段2.3 controller层2.4 dao层2.5 mapper层结果3. 使用resultMap进行关联查询3.1 一对一查询3.1.1 实体类3.1.2 数据库字段3.1.3 mapper 层3.1.4 查询结果3.2 一对多查询3.2.1 修改实体类3.2.2 修改mapper3.2.3 结果 1. resulttype和resultMap 当查询接口需要查询数据库时,通常我们会封装

yyclassmvp的博客 3376

流媒体协议-RTMP简介

与rtsp 不同,RTSP(Real-Time Streaming Protocol)是一个控制协议,负责控制媒体流的传输,但不传输媒体数据本身。RTSP 可以通过 TCP 或 UDP 传输 RTP 包来传输音视频数据。 RTMP(Real-Time Messaging Protocol)是一个综合性的协议,不仅可以传输音视频数据,还可以传输信令控制指令。RTMP 使用 TCP 作为传输协议,可以直接在 TCP 连接上传输音视频数据,也可以传输控制指令,实现了音视频流的实时传输和控制

xiaoshuaijinniu的博客 4550

比NTP还牛逼的时间同步协议:1588v2,亚微秒级!

1588v2,又称为Precision Time Protocol Version 2,即精密时间协议的第二版本,或称为PTPv2,是一种精密时间同步协议标准,旨在实现网络中设备之间的高精度时间同步。该协议由IEEE标准组织发布,并在网络测量和控制系统中得到广泛应用。1588v2的主要目的是在计算机网络中提供高度准确的时间同步。它可用于确保不同设备之间的时钟同步,从而协调它们的操作。这对于需要协同工作的系统、无线通信基站等具有关键性的应用非常重要。

网络技术联盟站 4277

ResultMap详解

前言MyBatis是基于“数据库结构不可控”的思想建立的,也就是我们希望数据库遵循第三范式或BCNF,但实际事与愿违,那么结果集映射就是MyBatis为我们提供这种理想与现实间转换的手段了,而resultMap就是结果集映射的配置标签了。 在深入ResultMap标签前,我们需要了解从SQL查询结果集到JavaBean或POJO实体的过程。从SQL查询结果到领域模型实体  通过JDBC查询得到

bear_wr的专栏 15万+

基于 STM32 单片机的实验室多参数安全监测系统设计与实现

本系统以 STM32F103C8T6 单片机为核心,集成温湿度监测、烟雾检测、气体泄漏报警、人体移动监测等功能模块,通过 OLED 显示屏实时显示数据,并支持 Wi-Fi 远程传输。系统可对实验室异常环境参数(如高温、烟雾、燃气泄漏)及非法入侵实时报警,保障实验室安全。本文从硬件选型、电路设计到软件实现提供了完整的实验室安全监测系统方案,可根据实际需求调整传感器类型和通信方式,适用于科研、教学等场景的环境安全防护。:可增加继电器模块控制通风设备或切断电源,集成 ZigBee 组网实现多实验室联动监测。

weixin_42300449的博客 1284

MyBatis-Plus不写任何resultMap和SQL执行一对一、一对多、多对多关联查询

多对多表结构:course: (course_id, name) child: (child_id, name) student_course:(id, student_id, course_id)一对一表结构:(实际可以减少一方) woman: (woman_id, name, lao_gong_id) man: (man_id, name, lao_po_id)// 原Mybatis-Plus的ServiceImpl的各种查询,被重写过后,都可以自动关联,

sunqinshan的博客 1700

36 Agent Memory:如何让智能体记住该记的东西

Agent 会调用工具,只能说明它有了行动能力。要让它跨会话、跨任务持续工作,还需要一套可治理的 Memory 系统。本文讲清上下文窗口、RAG 和 Agent Memory 的区别,以及工作记忆、情景记忆、语义记忆、程序记忆该如何分层设计。

老于的笔记的专栏 88

ABAP Development Tool for Visual Studio Code 里使用 MCP server

本文讨论了SAP ABAP开发环境中,除GitHub Copilot外,其他可作为MCP客户端接入ABAP开发工具(MCP server)的编码代理(coding agent)。GitHub Copilot是官方确认可用的工具,而其他代理如Claude Code、Cursor、Windsurf Cascade、Cline和Continue虽然理论上支持MCP协议,但要实际用于ABAP开发还需满足两个关键条件:兼容MCP协议,并能处理VS Code虚拟工作区文件系统。这些工具需要单独验证是否支持ABAP开发工

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 252

Mybatis关联查询 ResultMap的继承

先来看看 resultMap 节点的官方定义:复制代码会把列名和属性名进行绑定,该节点一共有 4 个属性:1. id :表示该 resultMap,共其他的语句调用2. type:表示其对于的pojo类型,可以使用别名,也可以使用全限定类名3. autoMapping:如果设置这个属性,MyBatis将会为这个ResultMap开启或者关闭自动映射。这个属性会覆盖全局的属性 autoMappingBehavior。默认值为:unset。

很多时候犯错都是在不知情的情况下发生的 3897

把云端打印带回办公室:通信场景 SAP_COM_0466 打通 SAP BTP ABAP environment 与本地打印机的 Pull Integration 实战

摘要: 本文探讨云端SAP系统如何通过SAP_COM_0466通信场景实现与本地打印机的安全连接。核心方案采用Pull Integration模式,由本地组件(如SAP Cloud Print Manager或第三方OMS)主动从云端打印队列拉取任务,避免网络边界冲突。配置流程涵盖通信安排创建、打印队列绑定及权限管理,并强调队列类型必须选择"Pull Integration Queue"的关键细节。方案通过分离云端生产与本地打印环节,既保障安全性又便于运维监控,适用于SAP BTP AB

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 139

javaEE Mybatis,一对一、一对多关联查询,resultMap配置关联属性的映射

Mybatis的Jar包下载:https://pan.baidu.com/s/16P-MGgn53e1EtCL6wQ9VWA  密码:1azq   OrderMapper.xml(实体类的Sql配置文件,resultMap配置一对一、一对多关联属性的映射): &lt;?xml version="1.0" encoding="UTF-8" ?&gt; &lt;!DOCTYPE mapper ...

houyanhua1的专栏 1307

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

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

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

MyBatis基础入门《七》ResultMap 高级映射:一对一 & 一对多关联查询

本文介绍了MyBatis中实现多表关联映射的两种方法。通过用户与订单的一对多关系案例,详细讲解了使用<resultMap>的collection标签实现嵌套查询(N+1方式)和单条SQL+JOIN查询(推荐方式)的具体实现。同时扩展了一对一关联的association用法,并提供了单元测试示例。文章还总结了避坑指南,强调必须指定主键、使用唯一别名等注意事项,推荐优先使用JOIN+嵌套结果方式以获得更好性能。最后通过"一对多用collection,一对一用association&quot

小二丶的博客 507

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

【SSM - MyBatis篇05】映射器 - resultMap结果映射 - 级联关系 - 一对一、一对多、多对多关联查询

文章目录映射器XML映射器1. select元素【**】2. insert元素2.1 insert元素特有的属性:2.2 insert元素主键回填(设置为自动递增的主键)2.3 自定义主键(实现主键自动递增)3. update、delete元素4. resultMap元素(结果映射)【*****】级联关系【*****】4.1 一对一关联查询 (association) - 用javaType来指定对象类型4.2 一对多、多对多关联查询 (collection) - 用ofType来制定对象类型 映射器  

Java小皮孩 5617

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

使用mybatis-关联查询一对一 resultMap

使用resultMap方法来进行关联查询 两个数据库表一个对一个 首先随便建立两个数据库表 UserMapper.java 接口类代码 UserMapper.xml SQL语句 UserVo 包装类代码 (需要注意的是,在idea里面我不知道toString方法怎么把User表中的三个数据导进去,所以我自己添加了User表里的三个数据然后再用 Alt + Ins直接导入getter和set...

hwkyeon的博客 343

mybatis之resultmap的使用及其与一对一关联查询一对多关联查询的结合

1.一对一关联查询(在ordermapper.xml中配置): &lt;resultMap type="order" id="order_user_map"&gt;          &lt;!-- &lt;id&gt;用于映射主键 --&gt;          &lt;id property="id" column="id"/&gt;          &am

Alex的博客 1334

SSM之MyBatis_02_07关联查询——实现一对一_模型里面有模型(必须使用resultMap)_resultMap的方式实现

系列文章目录 文章目录系列文章目录前言一、关联查询——实现一对一_模型里面有模型总结 前言 接着上一篇 一、关联查询——实现一对一_模型里面有模型 其实很简单 非常简单,如上图所示外,我们再加一个关联的标签即可 新写一个接口 接口里面就不再返回扩展类了 而是返回Order 下一步我们做什么呢?直接用?非也非也 如果模型里面有模型,必须使用resultMap 这是上一篇文章留下的坑 现在这里把它补上 association意思就是关联 所以上一篇我们留下的坑就是,没有模型里面有模型,仅此而已 有

小良的博客 304

mybatis关联查询(一对一与一对多)

以前在写小demo的时候对于具有关联关系的对象,都是分别查的,但其实mybatis可以直接进行关联查询,今天就来详细讲一下用mybatis怎样进行一对一和一对多的关联查询. 一对一关系: 需求:假设有一个User类,一个Car类,一个User对应这一辆Car,查询User信息的同时查询出他的Car的信息. 期望查询结果: User.java package com.wantao.bean; im...

Selenium的博客 2872

mybatis 实现关联查询

比如user表和role表有关联关系,有这样一条语句:查询uesr的同时将user的某一列数据作为参数一并查询role表符合条件的数据,限范围模块及模块下的菜单,可使用collection将模块映射到模块list中,将菜单列表映射到模块对象的。菜单list属性中,这样的作的目的也是方便对查询结果集进行遍历查询。订单与订单详情是一对多关系,订单详情与商品是一对一关系,反之商品与订单详情是一对多关系,订。场合:常见一些明细记录的展示,比如用户购买商品明细,将关联查询信息全部展示在页面时,此时可。

m0_68274160的博客 1114

006 mybatis关联查询(一对一、一对多)

006 mybatis关联查询(一对一、一对多)

m0_46695127的博客 1432

MyBatis快速入门第六讲——一对一关联映射和一对多关联映射

在实际开发中我们不可能只是对单表进行操作,必然要操作多表,本文就来讲解多表操作中的一对一关联映射和一对多(或多对一)关联映射,至于多对多关联映射实质上也是两个一对多(或多对一)关联映射,所以在这里我并不打算讲解。先从一对一关联映射讲起。本文案例代码的编写是建立在前文MyBatis框架的学习(四)——Mapper.xml文件中的输入和输出映射以及动态sql案例基础之上的!一对一关联映射我以商品订单数据

李阿昀的博客 9299

mybatis中实现一对一关联查询的两种方法

需求:查询所有订单信息,关联查询下单用户信息。 注意:因为一个订单信息只会是一个人下的订单,所以从查询订单信息出发关联查询用户信息为一对一查询。如果从用户信息出发查询用户下的订单信息则为一对多查询,因为一个用户可以下多个订单。 sql语句: SELECT o.id, o.user_id userId, o.number, o.createtime, o.note, u.user...

A_jungle的博客 1万+

五 Mybatis一对一关联查询的两种方式(基于resultType&基于resultMap)

关联查询: 一个用户对应多个订单,一个订单只有一个用户 订单关联用户:两种方式 一:基于resultTYpe,一个与表关系一样的pojo实现 主表订单,从表用户 首先要有一个与关联查询表关系一样的pojo 在代理接口添加方法,配置代理映射 最后进行单元测试 二 :基于resultMap(推荐,更符合面向对象思想) pojo:在订单类中放置用户类对象,...

weixin_30522095的博客 234

Mybatis中一对一关联查询resultMap

SmbmsUser中有个属性是private SmbmsRole role

江黎 485
上一篇: Mybatis CRUD 操作
下一篇: Mybatis 一对多 关联查询 (单方关联配置)
子澈课堂
博客等级 码龄21年 2万+粉丝 84原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值