springboot整合mybatis实现简单的一对多级联查询功能
作者:qq_42212926 发布时间:2023-11-07 13:30:22
本文的目的是用springboot整合mybatis实现一个简单的一对多查询。(查询一个用户有多少件衣服)
第一步:数据库中,可以直接在navicat中建立两张我们需要用到的表
users
DROP TABLE IF EXISTS `users`;
CREATE TABLE `users` (
`id` int(0) NOT NULL AUTO_INCREMENT,
`name` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`county` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`age` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`date` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 3 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
DROP TABLE IF EXISTS `clothes`;
CREATE TABLE `clothes` (
`clothe_id` int(0) NOT NULL,
`clothe_color` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci NULL DEFAULT NULL,
`user_id` int(0) NULL DEFAULT NULL,
PRIMARY KEY (`clothe_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_0900_ai_ci ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
然后自己随便往里面造两条数据就可以了,我这里如下图所示
第二步:
接着就是在实体类下面对建立两个类,类中属性对应表中的字段建立即可,如果有mybatis的代码生成工具的话,可以自己一键生成,就不用写POJO,Mapper,Mapper.xml代码了。
因为我们这里的一对多的查询是查询一个用户有多少件衣服的一对多,所以在用户实体类中我们加上了List<Clothe>这个私有属性,是用来接收clothe这个实体类。
第三步:Mapper文件
因为我们这里只是对uesrMapper这个接口操作,所以我只给出UserMapper
这个接口声明了一个oneToMoreQuery的方法,参数为用户ID,返回的结果是一个列表,列表里面是用户实体类。
第四步:也是最重要的一步,写mybatis的xml文件
在xml文件中要注意有如下几点:
collection:因为我们在user实体类中加的是List<User>所以这里用的是collection,如果我们在User这个实体类中的加的是单个实体类,就用association。
property:这里的属性名一定要和我们前面实体类中定义的是一样的,上面实体类截图中,我已经标箭头的部分。
下面<select>标签中就是一个简单的查询,然后后面的resultMap用的就是我们上面定义的resultMap;
第五步:编写一个服务类
按照企业级的开发流程中,这里是应该现有一个service接口,然后在实现类的,这里为了省事,直接实现类了。
第六步:写一个controller(Usercontroller)
因为我用的是postman测试的,所以这里要有一个controller
第七步:通过postman测试验证结果是否正确
因为这里方法中就是一个整型的参数,所以在postman中就直接传一个整型的id,值为1,
最后出来的结果是:
[
{
"id": 1,
"name": "zdz",
"county": "sr",
"age": "21",
"date": "20210821",
"clothes": [
{
"clotheId": 1,
"clotheColor": "绿色",
"userId": null
},
{
"clotheId": 2,
"clotheColor": "红色",
"userId": null
}
]
}
]
回看表里面用户Id为一的用户在clothe表里面对应两条数据,然后同时还把user表中的信息全部查询出来了。一个简单的一对多的级联查询就完成了。
来源:https://blog.csdn.net/qq_42212926/article/details/119842599


猜你喜欢
- using System;using System.Collections.Generic;using System.Text;namesp
- 本文主要描述在C#中线程同步的方法。线程的基本概念网上资料也很多就不再赘述了。直接接入 主题,在多线程开发的应用中,线程同步是不可避免的。在
- 1.企业实际项目中Git的使用在实际的企业项目开发中,我们一般Java的项目在公司都有自己的局域网代码仓库,仓库上存放着很多的项目。以我工作
- 本文实例为大家分享了利用Java实现HDFS文件上传下载的具体代码,供大家参考,具体内容如下1、pom.xml配置<!--配置--&g
- 1. maven插件介绍springboot应用通过maven插件appassembler-maven-plugi生成启动脚本bat和sh。
- 前言: 哲学老师说,看待事物无非是了解它是什么,为什么,怎么做所以,首先,我们先了解一下什么是“内存泄漏”摘自百度的一段话:用动态存储分配函
- 1.在外部开启activity时需要新开一个task,从service里开启activity时出现了这个异常。W/System.err: a
- 本文实例为大家分享了C#实现飞行棋游戏的具体代码,供大家参考,具体内容如下游戏截图:管理类:using System;using Syste
- 1使用背景在实际项目中其中一部分逻辑可能会因为调用了外部服务或者等待锁等情况下出现不可预料的异常,在这个时候我们可能需要对调用这部分逻辑进行
- 两个对象进行比较相等,有两种做法:1、情况一:当仅仅只是判断两个对象是否相等时,只需重写equals()方法即可。这里就不用说明2、情况二:
- 关于java8 的stream排序用法这里不做多说,这里介绍下曾经在多字段排序时遇到过的一个坑。需求:需要根据id去分组,然后取出每组中行号
- 首先我先声明一点,本文单纯就是技术探讨,要从实际应用中来说的话,我并不建议这样去玩分布式事务、也不建议这样去玩多数据源,毕竟分布式事务主要还
- 1、实现效果:项目的整体的日志打印级别为ERROR,但在某个包下或某个类想打印INFO级别的日志。2、配置:FILE是ERROR级别日志打印
- Java对称加密Cipher实现对称加密public class EncrypDES { // 字符串默认键值 &
- 需求是在我按下按钮时,该变按钮颜色,使用户感觉到自己按了按钮,当松开的时候,变回原来的颜色。正常时:按下时:有人说,直接监听按钮的按下事件不
- JAVA 枚举单例模式及源码分析的实例详解 单例模式的实现有很多种,网上也分析了
- 【题目】 汉诺塔问题比较经典,这里修改一下游戏规则:现在限制不能从最左侧的塔直接移动到最右侧,也不能从最右侧直接移动到最左侧,而是必须经过中
- 你要学会:流的概念处理字节流的类处理字符流的类Java标准输入输出文件管理类Java语言的输入输出类库1.流的概念流是指计算机各部件之间的数
- spring task和线程池的研究最近因工作需求,研究了一下spring task定时任务,和线程池,有了一定收获,记录一下涉及如下内容1
- ProgressDialog的基本用法ProgressDialog为进度对话框。android手机自带的对话框显得比较单一,我们可以通过Pr