对于mapper层代码的理解

昨天在改需求的时候,改了一天,发现关于数据库映射那里出现了问题。

因为我对于后端的mapper层了解的并不深,所以导致我改了一天还没发现问题所在。当我好不容易发现了问题出在mapper层,结果我发现我不会改哈哈哈,还是借助了GPT来帮忙。

对于后端来讲,如果读懂了controller层的代码,service层的代码,mapper层的代码,数据库表也烂熟于心(知道每张数据库表是干什么的),基本上就对整个后端大致有一个初步的了解了。

今天,我们就来研究一下,这个mapper层的xml的代码。我就以我修改的那个需求的那片代码为例子:

先来看一个相对简单的:

<select id="getRoleUserInfo" resultType="com.csgholding.idmp.ums.dto.StakeHolderDTO">
        select u.id user_id ,u.user_name from t_role_info t
        LEFT JOIN t_user_role r ON t.id = r.role_id
        LEFT JOIN t_user_info u ON u.id = r.user_id
        <where>
            t.delete_flag = 0 AND u.delete_flag = 0 AND r.delete_flag = 0
            AND t.id IN
            <foreach collection='roleIdList' item='id' open='(' separator=',' close=')'>
                #{id}
            </foreach>
        </where>
    </select>

<select><select/>标签包裹着的就是SQL语句。

这行SQL语句大致的意思是:选择 id,user_name,这两个字段是从 t_role_info,t_user_role,t_user_info表中查到的,这三张表之间可以通过‘左连接’来连接起来。查出这些数据后还要对这些数据做一些筛选过滤。

其实我也不是很懂这个SQL语句是干什么的,如果遇到这些SQL语句,你也不需要自己能看的很懂,可以通过GPT来去搞懂就好了。包括你写SQL语句也是,你其实并不需要自己会写,你要把你的想法给描述出来告诉GPT,GPT会帮你写好的,所以不用担心。

那<select><select/>标签的内容是什么呢?

可以看看这里,id="getRoleUserInfo" ,意思是这个SQL语句对应的是mapper层的getRoleUserInfo的数据接口。

而 resultType="com.csgholding.idmp.ums.dto.StakeHolderDTO" 指的是那条SQL语句查出来的字段会映射到StakeHolderDTO里面。因为你一开始写StakeHolderDTO,你的StakeHolderDTO里面有很多个字段嘛,但是这些字段都是没有值的,你写SQL语句就是从数据库中查出这些字段的值,然后放到StakeHolderDTO里面。

接下来讲一下一些相对复杂一点的SQL语句,就像这条:

<select id="getTaskRoleInfo" resultMap="roleTaskInfoDTOMap">
        select t.id, r.user_id,t.role_name,u.user_name from t_role_info t
        LEFT JOIN t_user_role r ON t.id = r.role_id
        LEFT JOIN t_user_info u ON u.id = r.user_id
        <where>
            t.delete_flag = 0 AND u.delete_flag = 0 AND r.delete_flag = 0
            AND t.id IN
            <foreach collection='roleIdList' item='id' open='(' separator=',' close=')'>
                #{id}
            </foreach>
        </where>
    </select>

这条SQL语句的大致意思就是:找到 id, user_id, role_name, user_name 这些字段,这些字段从哪里找呢?从 t_role_info,t_user_role,t_user_info 这三张表中找,这三张表通过某些字段关联起来。

id="getTaskRoleInfo" 意思就是这条SQL语句其实是getTaskRoleInfo数据接口的SQL语句,就这个意思。

resultMap是什么?之前不是 resultType 吗?其实resultType对应的是很简单的情况,表示将查询结果将直接映射到 StakeHolderDTO 类。而这里的 resultMap 是 roleTaskInfoDTOMap,表示查询结果将按照 roleTaskInfoDTOMap 中定义的映射规则进行映射。

说实话,这个 roleTaskInfoDTOMap还真挺难写的,还是要花点时间才能写出来。但是好在有GPT,你只要把你写的那条SQL语句,以及RoleInfoDTO整个复制给GPT,叫他帮你写一个显式的映射,就搞定了。

感觉只要把mapper层的代码搞懂,然后把SQL语句搞懂,基本上对于mapper层就搞懂了。

至于数据库表,是要根据你的那个系统来的,你不可能一下子就把数据库表全部搞懂,都是要慢慢积累,做到某一个需求的时候弄懂与这个需求有关的数据库表,然后做多几个需求,你对于系统的数据库表就全部了解了。这还是需要时间去积累的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/875700.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

错误: 编码GBK的不可映射字符的解决方法

之前我一直用的eclipse来编写java代码&#xff0c;从来没有出现过这个错误&#xff0c;但是转到VS中后我写个中文注释都没法写&#xff0c;写了就报错&#xff0c;于是开始探索原因 出现这种问题大概率你是在官网下载的JDK&#xff0c;默认是国际版的&#xff0c;他在编译时如果…

QGis二次开发 —— 1、Windows10搭建Vs2017-QGis环境(附Vs2017环境效果)(附:Qt助手加入QGis接口说明文档)

OSGeo4W简介 更高级的 QGIS 用户应该使用 OSGeo4W 包。此安装程序可以并行安装多个版本的 QGIS&#xff0c;并且还可以进行更高效的更新&#xff0c;因为每个新版本仅下载和安装更改的组件。      OSGeo4W 存储库包含许多来自 OSGeo 项目的软件。包括 QGIS 和所有依赖项&a…

【图像识别】摄像头捕捉运动到静止视频帧(免费源码分享)

【图像识别】摄像头捕捉运动到静止视频帧(免费源码分享) 1. 本文摘要 本文实现了一个OpenCV和PyQT5 结合的摄像头视频捕捉和运动检测线程&#xff0c;实现了一款界面软件用于功能演示。主要使用帧差法实现&#xff0c;摄像头捕捉运动到静止的图片&#xff0c;捕捉到的图片可用…

朗迪锋亮相2024年中国国际服务贸易交易会

9月12日至14日&#xff0c;2024中国国际服务贸易交易会&#xff08;以下简称“服贸会”&#xff09;在国家会议中心和首钢园区成功举办。本届服贸会由商务部和北京市人民政府共同主办&#xff0c;继续秉承“全球服务 互惠共享”的宗旨&#xff0c;与参展企业一同聚焦“共享智慧…

高性能编程:无锁队列----MsgQueue代码实践

目录 概述 代码结构 1. 头文件解析 (msgqueue.h) 2. 实现文件解析 (msgqueue.c) 核心功能解析 2.1 创建队列 (msgqueue_create) 2.2 放入消息 (msgqueue_put) 2.3 获取消息 (msgqueue_get) 2.4 交换队列 (__msgqueue_swap) 2.5 阻塞与非阻塞模式 2.6 销毁队列 (msgq…

解决mp框架无法更新null值的问题

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、解决方法 前言 在使用mp框架过程中可能会遇到需要将某个字段为null的情况 但是mp自带的方法例如update默认是不支持更新null值的 一、解决方法 主要是这两…

分析图形学示例报告

一、实验任务 二、主要功能模块 三、代码 //自定义坐标系模块 CDC* pDC GetDC();//获得设备上下文 CRect rect;//定义矩形 GetClientRect(&rect);//获得矩形客户去大小 pDC->SetMapMode(MM_ANISOTROPIC);//自定义坐标系 pDC->SetWindowExt(rect.Width()/4, rect.He…

windows server2012 配制nginx安装为服务的时候,直接跳要安装.net框架,用自动的安装,直接失败的解决。

1、上一个已成功在安装过程中的图&#xff1a; 2、之前安装过程中错误的图&#xff1a; 3、离线安装解决&#xff1a; 下载.net framework 3.5&#xff0c;然后解压后&#xff0c;选择指定备用源路径&#xff0c;然后选择.net安装包所在目录&#xff1a; 只要指定上面全路径就…

Kubernetes 常用指令2

kubernetes 常用命 令 1. 编写 yaml 文件 2. kubectl create 通过配置文件名或标准输入创建一个集群资源对象&#xff0c;支 持 json 和 yaml 格式的文件 语法&#xff1a; kubectl create -f 文件名 kubectl create deployment 资源名 --image镜像名 kubectl create deplo…

Halcon 深度学习 分类预处理

文章目录 read_dl_dataset_classification 产生一个深度学习数据集算子split_dl_dataset 将样本分为训练、验证和测试子集create_dl_preprocess_param 使用预处理参数创建字典preprocess_dl_dataset 预处理DLDataset中声明的整个数据集write_dict 写入字典文件find_dl_samples …

Java wrapperr打包springboot项目到linux和Windows

Java wrapper打包springboot项目到linux和Windows 1 Java wrapper 说明2 linux的安装步骤2.1 解压 创建目录2.2 复制文件2.3 配置文件2.4 启动 3 windows3.1 配置文件3.2 复制文件3.3 启动 1 Java wrapper 说明 前提&#xff1a; 一定要有Java环境&#xff08;我使用的是jdk1.8…

C和指针:指针

内存和地址 程序视角看内存是一个大的字节数组&#xff0c;每个字节包含8个位&#xff0c;可以存储无符号值0至255,或有符号值-128至127。 多个字节可以合成一个字&#xff0c;许多机器以字为单位存储整数&#xff0c;每个字一般由2个或4个字节组成。 由于它们包含了更多的位&…

油耳用什么掏耳朵比较好?可视挖耳勺推荐平价

掏耳朵是一个轻松又舒服的感觉&#xff0c;很多人就会用棉签和普通耳勺越掏越进&#xff0c;在盲掏的过程中容易弄伤耳膜。所以我们在掏耳时要选好工具。市面上的智能可视挖耳勺&#xff0c;顶端带有摄像头&#xff0c;可以通过清楚的观察到耳道中的情况。但现在市面上关于可视…

在Linux中从视频流截取图片帧(ffmpeg )

Linux依赖说明: 说明: 使用到的 依赖包 1. ffmpegsudo apt update sudo apt-get install ffmpeg2. imagemagick (选装) (检测图像边缘信息推断清晰度,如果是简单截取但个图像帧>用不到<)sudo apt-get install imagemagick备注: 指令及相关参数说明核心指令: (作用: 执…

VSCode好用的插件推荐

1. Chinese 将vscode翻译成简体中文 2. ESLint 自动检查规范 3. Prettier - Code formatter 可以自动调整代码的缩进、换行和空格&#xff0c;确保代码风格统一。通过配置&#xff0c;Prettier可以在保存文件时自动格式化代码 https://juejin.cn/post/74025724757198274…

从 Postgres 到 ClickHouse:数据建模指南

本文字数&#xff1a;7149&#xff1b;估计阅读时间&#xff1a;18 分钟 作者&#xff1a;Sai Srirampur 本文在公众号【ClickHouseInc】首发 上个月&#xff0c;我们收购了专注于 Postgres CDC 的 PeerDB。PeerDB 使得数据从 Postgres 复制到 ClickHouse 变得既快速又简单。Pe…

Docker日志管理之Filebeat+ELK日志管理

所需安装包及镜像 安装步骤 把所需镜像导入到Docker容器 打开/etc/sysctl.conf配置文件&#xff0c;添加参数 打开资源限制配置文件&#xff0c;添加参数 创建一个网络 在根目录下创建一个项目目录 创建Elasticsearch子目录 在项目目录下创建Elasticsearch子目录 将安装Elast…

微生物分类检测系统源码分享

微生物分类检测检测系统源码分享 [一条龙教学YOLOV8标注好的数据集一键训练_70全套改进创新点发刊_Web前端展示] 1.研究背景与意义 项目参考AAAI Association for the Advancement of Artificial Intelligence 项目来源AACV Association for the Advancement of Computer V…

突发!OpenAI发布最强模型o1:博士物理92.8分,IOI金牌水平

梦晨 衡宇 发自 凹非寺量子位 | 公众号 QbitAI 参考ChatGPT&#xff1a;点击使用 来了来了&#xff01;刚刚&#xff0c;OpenAI新模型无预警上新&#xff1a; o1系列&#xff0c;可以进行通用复杂推理&#xff0c;每次回答要花费更长时间思考。 在解决博士水平的物理问题时&a…

Notepad++插件:TextFX 去除重复行

目录 一、下载插件 TextFX Characters 二、去重实操 2.1 选中需要去重的文本 2.2 操作插件 2.3 结果展示 2.3.1 点击 Sort lines case sensitive (at column) 2.3.2 点击 Sort lines case insensitive (at column) 一、下载插件 TextFX Characters 点【插件】-【插件管理…