对于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层就搞懂了。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值