Mybatis如何实现多表查询

2023-11-12

 一、按照配置文件的方式

        在Java端mybatis框架里写联查sql语句,通过orm模型解析,这里需要考虑一对一以及一对多的关系,按student和score表举例,student对于score是一对多的关系,score对于student来说是一对一的关系;

1,pojo

创建成绩类和学生类

一对一

2.score作为主表,student作为子表,存在一对一关系映射,使用association标签。

mapper文件:

public interface ScoreMapper {
 
	public List<Score> fundAllScore();
 
}
<?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">
 
<mapper namespace="mapper.ScoreMapper">
 
	<resultMap type="Score" id="studentmap">
		<result property="sid" column="sid" />
		<result property="cname" column="cname" />
		<result property="sc" column="sc" />
		<association property="student"
			javaType="Student">
			<id column="sid" property="sid" />
			<result property="sname" column="sname" />
			<result property="birthday" column="birthday" />
			<result property="ssex" column="Ssex" />
			<result property="classid" column="classid" />
		</association>
	</resultMap>
 
	<select id="fundAllScore" resultMap="score_student_map">
		select score.*,student.sname,student.birthday,student.Ssex,student.classid
		from score LEFT JOIN student on student.Sid = score.sid
	</select>
 
 
</mapper>

一对多

student作为主表,score作为子表,存在一对多关系映射,使用collection标签

3.mapper文件:

<?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">
 
<mapper namespace="mapper.StudentMapper">
 
	<resultMap type="Student" id="scoremap">
		<result property="sid" column="sid" />
		<result property="sname" column="sname" />
		<result property="birthday" column="birthday" />
		<result property="ssex" column="ssex" />
		<result property="classid" column="classid" />
		<collection property="slist" ofType="Score">
			<id property="sid" column="sid" />
			<result property="cname" column="cname" />
			<result property="sc" column="sc" />
		</collection>
	</resultMap>
 
	<select id="fundAllStudent" resultMap="student_score_map">
		select student.*,score.cname,score.sc from student
		LEFT JOIN score on
		student.Sid = score.sid;
	</select>
 
</mapper>

二、使用注解的方式

一对一

score为主表时,存在一对一关系,使用@One注解

public interface ScoreAnnotationMapper {
	
	@Select("select * from score")
	@Results({
		@Result(column = "sid",property = "sid"),
		@Result(column = "cname",property = "cname"),
		@Result(column = "sc",property = "sc"),
		@Result(property = "student",column ="sid",one = @One(select = "ScoreAnnotationMapper.fundStudentById") )
	})
	public List<Score> fundAllScore();
 
	@Select("select * from student where sid = #{sid}")
	public Student fundStudentById(@Param("sid")int sid);
 
}

一对多

student作为主表,score作为子表,存在一对多关系映射,使用@Many注解

public interface StudentAnnotationMapper {
	
	@Select("select * from student")
	@Results({
		@Result(column = "sid",property = "sid"),
		@Result(column = "sname",property = "sname"),
		@Result(column = "birthday",property = "birthday"),
		@Result(column = "ssex",property = "ssex"),
		@Result(column = "classid",property = "classid"),
		@Result(property = "scList",column ="sid",many = @Many(select = "        
 StudentAnnotationMapper.fundScoreById") )
	})
	public List<Student> fundAllStudent();
 
	@Select("select * from score where sid = #{sid}")
	public Score fundScoreById(@Param("sid")int sid);
 
}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mybatis如何实现多表查询 的相关文章

  • 如何使用 Apache POI API 将图像添加到 pptx 中添加的图像占位符?

    我已经预定义了带有文本和图像占位符的 pptx 模板 我如何从模板访问和修改这些占位符 我可以使用 POI pptx API 直接将图像和文本添加到幻灯片中 但如何将其添加到模板的占位符中 请参阅链接以了解如何添加占位符来创建固定模板 ht
  • Eclipse 在源代码管理中保存操作

    我们希望找到一种在签入之前执行代码标准的 轻量级 方法 我们真的很喜欢使用 Eclipse 内置的想法保存操作 go to Preferences gt gt Java gt gt Editor gt gt Save Actions 其中有
  • Hibernate注解放置问题

    我有一个我认为很简单的问题 我见过两种方式的例子 问题是 为什么我不能将注释放在字段上 让我举一个例子 Entity Table name widget public class Widget private Integer id Id G
  • 如何创建一个显示 Spinners 的 x 和 y 值的表格?

    我想创建一个位于图表右侧的表格 其中显示 2 列 x 和 y 值已输入到xSpin and ySpin旋转器 我已经画了一张我想要桌子放置的位置的图 我尝试过在网格窗格布局中使用文本框来创建表格并将值直接输入到文本框网格中 但是我无法将它们
  • Java:迭代 Collection 的最佳方法(此处为 ArrayList)

    今天 当我看到一段我已经使用了数百次的代码时 我很高兴地开始编码 迭代集合 此处为 ArrayList 出于某种原因 我实际上查看了 Eclipse 的自动完成选项 这让我想知道 在什么情况下以下循环比其他循环更好使用 经典的数组索引循环
  • Android在排序列表时忽略大小写

    我有一个名为路径的列表 我目前正在使用以下代码对字符串进行排序 java util Collections sort path 这工作正常 它对我的 列表进行排序 但是它以不同的方式处理第一个字母的情况 即它用大写字母对列表进行排序 然后用
  • OSGi:如果不取消服务会发生什么

    这是我获取 OSGi 服务的方式 ServiceReference reference bundleContext getServiceReference Foo class getName Foo foo Foo bundleContex
  • 按第一列排序二维数组,然后按第二列排序

    int arrs 1 100 11 22 1 11 2 12 Arrays sort arrs a b gt a 0 b 0 上面的数组已排序为 1 100 1 11 2 12 11 22 我希望它们按以下方式排序a 0 b 0 首先 如果
  • 当从服务类中调用时,Spring @Transactional 不适用于带注释的方法

    在下面的代码中 当方法内部 是从内部调用的方法外部 应该在交易范围内 但事实并非如此 但当方法内部 直接从调用我的控制器class 它受到事务的约束 有什么解释吗 这是控制器类 Controller public class MyContr
  • Java 文件上传速度非常慢

    我构建了一个小型服务 它从 Android 设备接收图像并将其保存到 Amazon S3 存储桶中 代码非常简单 但是速度非常慢 事情是这样的 public synchronized static Response postCommentP
  • 如何模拟从抽象类继承的受保护子类方法?

    如何使用 Mockito 或 PowerMock 模拟由子类实现但从抽象超类继承的受保护方法 换句话说 我想在模拟 doSomethingElse 的同时测试 doSomething 方法 抽象超类 public abstract clas
  • Calendar.getInstance(TimeZone.getTimeZone("UTC")) 不返回 UTC 时间

    我对得到的结果真的很困惑Calendar getInstance TimeZone getTimeZone UTC 方法调用 它返回 IST 时间 这是我使用的代码 Calendar cal Two Calendar getInstance
  • 使用 SQLITE 按最近的纬度和经度坐标排序

    我必须获得一个 SQLite SQL 语句 以便在给定初始位置的情况下按最近的纬度和经度坐标进行排序 这是我在 sqlite 数据库中的表的例句 SELECT id name lat lng FROM items EXAMPLE RESUL
  • Java 中的“Lambdifying”scala 函数

    使用Java和Apache Spark 已用Scala重写 面对旧的API方法 org apache spark rdd JdbcRDD构造函数 其参数为 AbstractFunction1 abstract class AbstractF
  • 普罗米修斯指标 - 未找到

    我有 Spring Boot 应用程序 并且正在使用 vertx 我想监控服务和 jvm 为此我选择了 Prometheus 这是我的监控配置类 Configuration public class MonitoringConfig Bea
  • Javafx过滤表视图

    我正在尝试使用文本字段来过滤表视图 我想要一个文本字段 txtSearch 来搜索 nhs 号码 名字 姓氏 和 分类类别 我尝试过在线实施各种解决方案 但没有运气 我对这一切仍然很陌生 所以如果问得不好 我深表歉意 任何帮助将不胜感激 我
  • spring中如何使用jackson代替JdkSerializationRedisSerializer

    我在我的一个 Java 应用程序中使用 Redis 并且正在序列化要存储在 Redis 中的对象列表 但是 我注意到使用 RedisTemplate 会使用 JdkSerializationRedisSerializer 相反 我想使用 J
  • FileOutputStream.close() 中的设备 ioctl 不合适

    我有一些代码可以使用以下命令将一些首选项保存到文件中FileOutputStream 这是我已经写了一千遍的标准代码 FileOutputStream out new FileOutputStream file try BufferedOu
  • hashcode 的默认实现为以相同方式构造的对象返回不同的值

    我在这里编写一个示例代码 public class Test private int i private int j public Test TODO Auto generated constructor stub public Test
  • 调整添加的绘制组件的大小和奇怪的摆动行为

    这个问题困扰了我好几天 我正在制作一个特殊的绘画程序 我制作了一个 JPanel 并添加了使用 Paint 方法绘制的自定义 jComponent 问题是 每当我调整窗口大小时 所有添加的组件都会 消失 或者只是不绘制 因此我最终会得到一个

随机推荐

  • oracle定义表注意事项,【TABLE】oracle表在线重定义注意事项

    下面是无法使用在线重定义的一些情况 点击 此处 折叠或打开 Tables with the following characteristics cannot be redefined online 9 0 1 Tables with no
  • (十三)Mybatis动态SQL各种标签的用法详解

    这篇文章主要讲述Mybatis动态SQL各种标签的用法详解 学习Mybatis动态sql看这一篇博客足够了 目录 什么是静态SQL 什么是动态SQL 动态SQL标签详解 IF标签的用法 where标签的用法 trim标签的用法 choose
  • java.lang.ClassNotFoundException: sun.misc.CharacterDecoder解决方案

    报错是因为引入了下面的包 import sun misc BASE64Decoder import sun misc BASE64Encoder 一如既往的百度 网上大神说需要操作eclipse 如果你使用的是eclipse的话 中的JRE
  • Google Protocol Buffer 的使用和原理

    转自 https www ibm com developerworks cn linux l cn gpb index html 简介 什么是 Google Protocol Buffer 假如您在网上搜索 应该会得到类似这样的文字介绍 G
  • Java中String对象作为引用类型传值"失效"的问题

    因为在调用的那个方法里边 又建立了一个新的引用 原来的引用和新的引用指向的内存不同 转载自 https blog csdn net jq ak47 article details 52727727
  • 各种分布函数:泊松分布、二项分布、伯努利分布、高斯分布、帕累托分布

    简单的说 伯努利是扔一次硬币 二值实验 二项分布是多次伯努利 即扔多次硬币 多次二值实验 泊松分布是 p p p 很小的二项 即扔好多好多次硬币 且扔出正面概率极小 正态分布是 n n n 很大的二项
  • window10安装CUDA7.0-8.0-9.0

    因为需求 没办法 window10 x64 家庭版 无所谓 VS 2013 专业版 x64 现在安装CUDA 顺序 CUDA 9 0 176 CUDA 8 0 61 CUDA 7 0 27 CUDA9 0是完整安装 8 0和7 0 不要安装
  • Centos7配置服务开机启动

    Background 这里记录方便自己以后查阅 配置开机启动的方法有三种 1 配置 etc rc local或 etc rc d rc local 2 配置 etc rc d init d 3 配置 usr lib systemd syst
  • Android数据的四种存储方式SharedPreferences、SQLite、ContenProvider

    作为一个完整的应用程序 数据存储操作是必不可少的 因此 Android系统一共提供了四种数据存储方式 分别是 SharePreference SQLite Content Provider File 由于Android系统中 数据基本都是私
  • Map&Set哈希桶(基础+常用方法总结)

    作者 渴望力量的土狗 博客主页 渴望力量的土狗的博客主页 专栏 数据结构与算法 工欲善其事必先利其器 给大家介绍一款超牛的斩获大厂offer利器 牛客网 点击免费注册和我一起刷题吧 目录 1 map set简介 1 1 概念及场景 1 2
  • centos7-elk之elasticsearch

    准备环境 centos7 4 jdk 1 8 安装jdk可见链接 https blog csdn net xuejinyan123 article details 102685458 下载 elasticsearch 版本 6 0 1 存放
  • mysql安装包及驱动下载

    1 下载MySQL安装包 mysql官网下载安装包地址 https downloads mysql com archives community 在页面选择希望下载的版本 运行环境 运行环境版本 下方会出现各种版本 MySQL数据库安装有y
  • 用于 3d 渲染应用程序的常见物体 IOR(折射率)值

    以下内容来源于 https www btbat com 12032 html 用于 3d 渲染应用程序的 IOR 折射率 值 那么支持的常用 3D 程序如下 如 NewTek Lightwave 3d Blender 3d Autodesk
  • 轻松实现crontab的使用

    一 什么情况下使用crontab crontab命令常见于Unix和类Unix的操作系统之中 用于设置周期性被执行的指令 二 如何编写crontab 1 安装crontab环境 bash内键入 crontab 如果提示command not
  • 人类学习 vs. 机器学习

    摘要 机器学习与人类学习的范式有一定的联系 本文发掘这些联系 作用是指导人类的学习 1 什么是学习 对于人类而言 学习是改造大脑皮层的过程 我们会发现 不同人学习不同东西的能力也不一样 如有些人数学厉害 有些人音乐厉害 同时 也有些牛人 学
  • 混沌神经网络的实际应用,进化算法优化神经网络

    人工神经网络的发展趋势 人工神经网络特有的非线性适应性信息处理能力 克服了传统人工智能方法对于直觉 如模式 语音识别 非结构化信息处理方面的缺陷 使之在神经专家系统 模式识别 智能控制 组合优化 预测等领域得到成功应用 人工神经网络与其它传
  • QFileDialog.getOpenFileName获取打开的文件路径

    前段时间要做一个打开文件并上传的功能 在不多加一个窗口的情况下选中那个打开的文件 def addButtonClicked self index try file name QFileDialog getOpenFileName self
  • Ubuntu20.04下编译测试RocksDB以及遇到的问题记录

    rockdb编译 git clone https github com facebook rocksdb git 如果上面的命令报错无法连接 则换成下面这句 git clone git github com facebook rocksdb
  • 大数据简历要点与模拟面试和项目介绍模板二

    15 模拟面试和项目介绍模板10 一 自我介绍 目前不知道怎么做 您好 我叫xxx 毕业于xxx学校 因为在大学里学过javase mysql web 数据结构与算法等计算机基础知识 在一份软件测试的实习中接触到数据仓库 用户画像 推荐系统
  • Mybatis如何实现多表查询

    一 按照配置文件的方式 在Java端mybatis框架里写联查sql语句 通过orm模型解析 这里需要考虑一对一以及一对多的关系 按student和score表举例 student对于score是一对多的关系 score对于student来