MyBatis04:SpringBoot整合MyBatis——多表关联|延迟加载|MyBatisX插件|SQL注解

article/2025/6/21 14:44:00

目录

一、多表关联

1、数据库表结构

2、javaBean类

3、mapper接口

4、sqlMapper文件

5、测试

二、延迟加载

1、解决什么问题

2、嵌套查询

3、延迟加载

三、逆向工程MybatisX插件

1、下载插件

1. 通过 JetBrains 插件市场下载(推荐)

2. 手动下载(备用)

四、SQL注解(这个方法是MybatisX的方法,不使用sqlmapper文件映射,直接通过注解在java文件里面写sql语句,没有实现sql语句与java分离的初衷)


一、多表关联

1、数据库表结构

create table king(id int primary key auto_increment,name char(32)
);
​
create table queen(id int primary key auto_increment,name char(32),k_id int 
);
​
create table consort(id int primary key auto_increment,name char(32),k_id int 
);
​
insert into king(name) values ('拉玛十世'),('乾隆');
insert into queen(name,k_id) values ('苏提达',1),('富察氏',2);
insert into consort(name,k_id) values ('诗妮娜1号',1),('诗妮娜2号',1),('令妃',2),('香妃',2);select * from queen;        
select * from consort;      

2、javaBean类

@Data
public class King {private Integer id;private String name;//一对一映射private Queen queen;//王后对象//一对多映射private List<Consort> list;//妃子集合
}

3、mapper接口

@Mapper
public interface KingMapper {public List<King> getKings();
}

4、sqlMapper文件

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hl.mybatis03.mapper.KingMapper"><!--     public List<King> getKings();--><select id="getKings" resultMap="map1">select king.*,queen.id as qid,queen.name as qname,queen.k_id,c.id as cid,c.name as cname,c.k_id as ck_idfrom kingjoin queen on king.id = queen.k_idjoin consort c on king.id = c.k_id</select><!--type="预期的最终返回值类型"  autoMapping="true"开启结果集自动映射--><resultMap id="map1" type="King" autoMapping="true"><id property="id" column="id"></id><!--手动结果集映射-->
<!--        <result property="name" column="name"></result>--><!--一对一映射--><association property="queen" javaType="Queen"><!--给Queen类的属性赋值--><id property="id" column="qid"></id><result property="name" column="qname"></result><result property="kId" column="k_id"></result></association><!--一对多映射 autoMapping="true"自动映射  columnPrefix="c" 针对列名添加前缀--><collection property="list" ofType="Consort" autoMapping="true" columnPrefix="c"><id property="id" column="id"></id>
<!--            <id property="id" column="cid"></id>-->
<!--            <result property="name" column="cname"></result>-->
<!--            <result property="kId" column="ck_id"></result>--></collection></resultMap>
</mapper>

5、测试

二、延迟加载

多张表相关联情况下

1、解决什么问题

延迟加载主要用于解决嵌套查询的效率问题。

只针对嵌套查询。

2、嵌套查询

一个查询调用另一个查询。

3、延迟加载

当我们不需要另一个查询时,该查询先不执行。

当我们需要另一个查询的数据时,再执行该查询。

需要??:当我们访问这个关联属性时,进行查询;不访问关联属性时,不执行查询。

select="sql语句唯一标识" 嵌套查询

fetchType="eager" 立即加载

fetchType="lazy" 延迟加载,懒(延迟)加载要求所对应的类(javabean)以及相关类实现序列化接口Serializable 

@Data
@JsonIgnoreProperties({"handler", "hibernateLazyInitializer"})
public class Queen implements Serializable {private Integer id;private String name;private Integer kId;//国王id
​//一对一private King king;//间接  一对多private List<Consort> list;
}
@Mapper
public interface QueenMapper {public List<Queen> getQueens();
}
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""https://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.hl.mybatis03.mapper.QueenMapper"><!--public List<Queen> getQueens();--><!--查询王后信息--><select id="getQueens" resultMap="map1">select * from queen</select><!--  fetchType="eager" 数据的抓取策略:eager立即加载 lazy延迟加载 : 使用数据时查询(比如return返回时json序列化,或者debug模式看数据内容)--><resultMap id="map1" type="Queen" autoMapping="true"><id property="id" column="id"></id><association property="king" javaType="King"fetchType="lazy"select="findKing" column="k_id"></association><collection property="list" ofType="Consort"fetchType="lazy"select="selectConsort" column="k_id"></collection></resultMap><!--根据王后表中的国王id,找到国王信息--><select id="findKing" resultType="King">select * from king where id = #{id}</select>
​<!--根据国王id,找到妃子集合--><select id="selectConsort" resultType="Consort">select * from consort where k_id = #{kId}</select>
</mapper>

三、逆向工程MybatisX插件

1、下载插件

下载和安装 MybatisX 的地址和方法:

1. 通过 JetBrains 插件市场下载(推荐)

  • 在 IntelliJ IDEA 中直接安装

    1. 打开 IDEA,进入 FileSettingsPlugins

    2. 搜索 MybatisX,点击 Install 安装。

    3. 重启 IDEA 生效。

  • JetBrains 插件市场地址: MybatisX on JetBrains Marketplace

2. 手动下载(备用)

  • 如果无法通过 IDEA 直接安装,可以从 JetBrains 插件市场下载 .jar 文件:

    1. 访问上述链接,点击 Download 获取最新版本的 .jar

    2. 在 IDEA 的 Plugins 界面选择 Install Plugin from Disk,上传下载的 .jar 文件。

四、SQL注解(这个方法是MybatisX的方法,不使用sqlmapper文件映射,直接通过注解在java文件里面写sql语句,没有实现sql语句与java分离的初衷)

@Insert
@Options

@Update
@Delete
@Select

@Results
@Result
@One
@Many

package com.hl.mybatis03.mapper;import com.hl.mybatis03.pojo.Consort;
import com.hl.mybatis03.pojo.King;
import org.apache.ibatis.annotations.*;import java.util.List;
@Mapper
public interface ConsortMapper {@Select("select * from consort")public List<Consort> listAll();@Insert("insert into consort(name,k_id) values (#{name},#{kId})")//返回自增主键@Options(useGeneratedKeys = true,keyProperty = "id",keyColumn = "id")public int save(Consort consort);@Update("update consort set name=#{name},k_id=#{kId} where id=#{id}")public int update(@Param("id") Integer id, @Param("name") String name, @Param("kId") Integer kId);@Delete("delete from consort where id=#{id}")public int delete(Integer id);//关联妃子和王国@Select("select * from consort")@Results(value = {@Result(id = true,property = "id",column = "id"),@Result(property = "name",column = "name"),@Result(property = "king",javaType = King.class, column = "k_id",one=@One(select = "com.hl.mybatis03.mapper.ConsortMapper.getKingById"))})public List<Consort> list();@Select("select * from king where id=#{id}")public King getKingById(Integer id);}

作业

创建 用户类、角色类

用户表(id,username,phone,role_id)

zhangsan

lisi

角色表(id,name)

超级管理员

普通管理员

财务人员

市场人员

1)通过用户,查询当前用户信息和相关的角色信息

一对一

方式一:两张表join连接查询,相关数据(xml)

方式二:嵌套查询(xml、sql注解)

方式三:嵌套查询(sql注解)

2)通过角色,查询角色名和想的所有用户列表

一对多

方式一:两张表join连接查询,相关数据(xml)

方式二:嵌套查询(xml、sql注解)

方式三:嵌套查询(sql注解)


http://www.hkcw.cn/article/wSvhrLjZnf.shtml

相关文章

简单工厂模式

简单工厂模式&#xff08;Simple Factory Pattern&#xff09; 简单工厂模式&#xff08;又称静态工厂模式&#xff09;是一种创建型设计模式&#xff0c;它通过一个工厂类来封装对象的创建逻辑&#xff0c;客户端无需直接实例化具体类&#xff0c;而是通过工厂类获取所需对象…

司机回应冲入起火麦地抢收 救人救麦两不误

司机回应冲入起火麦地抢收 救人救麦两不误!6月1日,一段“男子开收割机冲入起火麦地抢收”的视频在网上引起广泛关注。视频中,不远处的麦田里浓烟滚滚,多处燃起火焰,火势借风力不断蔓延。这时,一台收割机朝着浓烟方向驶去,快速在麦田中开辟出一条隔火带。视频中,收割机司…

肖战遇强则强的表演张力 藏海复仇之路燃爆演技

肖战遇强则强的表演张力 藏海复仇之路燃爆演技。《藏海传》开篇即是一场灭门惨案,复仇之路充满荆棘,所遇之人可能皆为利用,真假难辨。肖战在剧中展现了细腻的演技,完美呈现了角色复杂的内心世界。从复仇少年到心怀天下的成长过程极具张力,在肖战的演绎下,观众可以看到藏海…

韩国大选最早明天凌晨有结果 五位候选人角逐总统

韩国第21届总统大选投票于6月3日6时正式开始,全国共设有14295个投票站。未参与提前投票的选民可凭身份证件前往指定投票站进行投票,投票将于当天20时结束。本次大选共有7位候选人登记参选,但其中两位先后宣布退出并支持国民力量党候选人金文洙,因此最终有5位候选人角逐总统…

小米YU7不开门亮相车展 观众排长龙 现象级热度引发关注

小米YU7不开门亮相车展 观众排长龙 现象级热度引发关注!2025年粤港澳大湾区车展上,小米汽车的展位异常热闹。6号馆06展位前,从早到晚都排着长队,不少观众顶着深圳三十五度的烈日等待,只为亲眼看看那台传说中“吊打Model Y”的小米YU7。有位带着孩子的宝妈在采访中说:“本…

【数据集】不同情景下全球城市扩张(2050年)

目录 数据概述数据输入模型架构数据下载参考数据概述 论文-J2019-Projecting global urban land expansion and heat island intensification through 2050 数据输入 使用了四个数据源:来自全球人类住区层的城市土地范围(Pesaresi等人,2013年)、来自联合国的城市人口(联合…

华为IPD流程研学:162页 华为研发IPD管理流程详解【附全文阅读】

该文档围绕华为研发 IPD 管理流程展开&#xff0c;核心是通过集成产品开发&#xff08;IPD&#xff09;体系优化产品开发全流程。首先介绍需求管理流程&#xff08;OR&#xff09;&#xff0c;强调统一需求收集与管理以提升交付质量&#xff1b;市场管理流程&#xff08;MM&…

三步锁定光储融合黄金配置

你是否遇到过这样的场景&#xff1f;花百万装光伏&#xff0c;结果因阴影遮挡发电量比预期少20%&#xff1b;配了储能却没赚到峰谷价差&#xff0c;反而因容量过剩多花30万…… 传统光储规划就像蒙眼开车&#xff0c;而光储模拟系统正在改变这一切。 一、多维度参数配置 1.量身…

多租户系统的实现方式

多租户系统的实现方式 一、多租户架构概述 多租户&#xff08;Multi-Tenancy&#xff09;是SaaS&#xff08;软件即服务&#xff09;模式的核心架构技术&#xff0c;允许多个租户&#xff08;客户/组织&#xff09;共享同一软件实例&#xff0c;同时保证数据隔离和安全。其核…

Sui 中文社区月度激励计划

为了进一步激发开发者的热情&#xff0c;推动Sui开源项目的进步&#xff0c;HOH 特别推出了 Sui开源激励计划&#xff0c;鼓励更多的开发者参与 &#x1fa75; &#x1f3af; 无论是刚刚起步的新手&#xff0c;还是经验丰富的资深开发者&#xff0c;都可以积极参与&#xff0c…

Java反射(黑马)

Java反射&#xff08;Reflection&#xff09;是Java语言的一个强大特性&#xff0c;它允许程序在运行时动态地检查和操作类、接口、字段和方法。通过反射&#xff0c;程序可以获取类的信息、创建对象、调用方法、访问字段等&#xff0c;而无需在编译时知道这些类的具体实现。这…

教育部开通2025高考举报电话 欢迎举报问题线索

近日,教育部公布了2025年高考举报电话,覆盖教育部及各省(区、市)。欢迎广大考生、家长和社会各界人士举报涉及2025年高考的问题线索。相关部门将根据举报线索迅速核查处理,坚决维护高考的公平公正。责任编辑:zhangxiaohua

揭秘绿发会与蒋雨融父亲关联 家庭背景引争议

近日,蒋雨融因在哈佛大学2025年毕业典礼上的发言和家庭背景引发争议。2022年3月,绿发会曾公开发布推文称,时任副理事长兼秘书长的周晋峰推荐了长期志愿者蒋雨融进入哈佛大学肯尼迪学院,蒋雨融的父亲蒋志明对此表示感谢。目前,在绿发会的公众号和微博账号搜索“蒋雨融”,均…

Alist Win 基本用法

1&#xff1a;Alist 简介 Alist 是一个支持多种存储的文件列表程序&#xff0c;具体使用方式可参考 https://alistgo.com/zh/。 使用指南&#xff1a;https://alistgo.com/zh/guide/ 配置指南&#xff1a;https://alistgo.com/zh/config/ 2&#xff1a;Alist 部署 2.1&…

YOLOv10改进|爆改模型|涨点|C2F引入空间和通道注意力模块暴力涨点(附代码+修改教程)

一、文本介绍 本文修改的模型是YOLOv10&#xff0c;YOLOv10无需非极大值抑制&#xff08;NMS&#xff09;进行后处理&#xff0c;其推理速度以及参数量上都优于现有的模型。C2f (Cross-Stage Partial-Connection with 2 convolutions) 模块是YOLOv6中引入的一种结构&#xff0…

38岁男子酒后拖拽6岁女童进巷被拘 警方迅速行动控制嫌疑人

警情通报2025年5月20日下午,嫌疑人刘某某(男,38岁)酒后行至娄底市娄星区涟滨中街附近,拖拽一名6岁女童进入居民区巷子,被居民及时制止并报警。接警后,民警迅速赶到现场将刘某某控制。经侦查,刘某某涉嫌寻衅滋事已被拘留,并将依法追究其刑事责任。公安机关坚决依法打击…

隔离防护产品防晒有效果吗 选购需谨慎

夏日来临,防晒化妆品迎来销售高峰。不少商家打出“防护+修复”的宣传口号,声称产品既能防晒,又能美白修复。然而,消费者购买使用后却发现,这些所谓“多效合一”的产品,其实很多都只是普通的化妆品。在北京多家日化用品销售店,防晒霜、防晒喷雾等产品被摆在最显眼的位置。…

俄将向乌移交6000具阵亡士兵遗体 谈判达成一致

俄罗斯与乌克兰两国代表团于6月2日在土耳其伊斯坦布尔进行了第二轮直接谈判。双方就交换阵亡士兵遗体及新一轮换俘达成一致。谈判持续了约1小时,俄罗斯总统助理、俄方谈判代表团团长梅金斯基表示,俄方将在下周单方面向乌方移交6000具阵亡士兵遗体。梅金斯基还提到,俄乌将成立…

计算机视觉---深度学习框架(Backbone、Neck、Head)

一、主干&#xff08;Backbone&#xff09;&#xff1a;视觉特征的“根基” 1. 核心定位与功能 定义&#xff1a; 作为网络的底层基础&#xff0c;主干负责从输入图像中提取多层次、多尺度的视觉特征&#xff0c;其输出的特征图&#xff08;Feature Map&#xff09;需兼顾空间…

使用Cursor自动创建Dify工作流

一、背景 AI时代&#xff0c;使用自然语言进行编程&#xff0c;让开发变成聊天一样容易。提升我们的效率&#xff0c;复杂的、重复性的工作交给AI 工具来做&#xff0c;本次尝试使用cursor自动创建dify工作流。 二、准备工作&#xff1a; 本地安装Cursor开发工具&#xff08…