springboot使用mybatis一对多的关联查询问题记录

 更新时间:2022年01月26日 16:53:06   作者:__莫等闲  
这篇文章主要介绍了springboot使用mybatis一对多的关联查询问题记录,刚好最近有个需求需要做到关联的查询,时间也算充足,所以用sql来写,于是踩了很久坑,终于跳出来了,小小记录一下

springboot使用mybatis一对多的关联查询

由于刚开始写java不久,对sql语句的熟悉度还是不够熟练,虽然现在使用的mybatisPlus比较多,但我始终觉得sql不能忘也不能不用,刚好最近有个需求需要做到关联的查询,时间也算充足,所以用sql来写,于是踩了很久坑,终于跳出来了,小小记录一下。

一对多

# 我这里是一对多查询,一张主表两张副表,最后还要有一张VO表(就是做关联映射用的),主表和副表的实体我就不贴了,以下是VO实体

在这里插入图片描述

这是我的controller

@RequestMapping(value = "/queryChartAll", method = RequestMethod.GET)
public R<?> queryChartAll(){
    List<StatementEnteringVO> statementEnteringVO = statementEnteringMapper.queruMapperPage();
    if(statementEnteringVO != null){
        return R.data(statementEnteringVO);
    }else{
        return R.fail(ResultCode.ERROR);
    }
}

mapper

public interface StatementEnteringMapper extends BaseMapper<StatementEntering> {
    List<StatementEnteringVO> queruMapperPage();
}

mapper.xml(注意了,最难受也是最坑的)

为了展示方便,我贴少点的字段,不然老长的代码看球不明白,再注一下:一对多使用collection,一对一使用association,文章主讲一对多的。所以也不对association做解释了,感兴趣的朋友可以自己去了解一下,用法是一样的。

<?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="com.ld.ldstat.mapper.StatementEnteringMapper">
    <resultMap id="queryChartAllTwo" type="com.ld.ldstat.vo.StatementEnteringVO">
        <id property="id" jdbcType="BIGINT" column="sid"></id>
        <result property="theDate" jdbcType="DATE" column="the_date"></result>
        <result property="deptName" jdbcType="VARCHAR" column="dept_name"></result>
        <result property="deptId" jdbcType="BIGINT" column="dept_id"></result>
        
        <!--这里是对应vo实体的表1实体-->
        <collection property="cashCar" javaType="java.util.List" ofType="com.ld.ldstat.entity.CashCar">
            <id property="id" jdbcType="BIGINT" column="cid"></id>
            <result property="parentId" jdbcType="BIGINT" column="c_parent_id"/>
            <result property="projectName" jdbcType="VARCHAR" column="c_project_name"/>
            <result property="ninetyWithin" jdbcType="INTEGER" column="ninety_within"/>
            <result property="ninetyExcept" jdbcType="INTEGER" column="ninety_except"/>
            <result property="cashCar" jdbcType="INTEGER" column="cash_car"/>
        </collection>
        
        <!--这里是对应vo实体的表2实体-->
        <collection property="subtotalAll" ofType="com.ld.ldstat.entity.SubtotalAll">
            <id property="id" jdbcType="BIGINT" column="aid"></id>
            <result property="parentId" jdbcType="BIGINT" column="a_parent_id"/>
            <result property="projectName" jdbcType="VARCHAR" column="a_project_name"/>
            <result property="subtotalType" jdbcType="INTEGER" column="subtotal_type"/>
            <result property="task" jdbcType="INTEGER" column="task"/>
            <result property="theDay" jdbcType="INTEGER" column="the_day"/>
        </collection>
    </resultMap>
    <select id="queruMapperPage" resultMap="queryChartAllTwo">
        SELECT
        se.id sid,se.the_date,se.dept_name,
        ca.id cid,ca.project_name c_project_name,ca.parent_id c_parent_id,ca.ninety_Within,ca.ninety_except,ca.cash_car,
        sa.id aid,sa.project_name a_project_name,sa.parent_id a_parent_id,sa.task,sa.the_day
        FROM
        statement_entering se
        LEFT JOIN cash_car ca on se.id = ca.parent_id
        LEFT JOIN subtotal_all sa on se.id = sa.parent_id
        
        <!--        条件可根据自己的需求增加啦-->
    </select>
</mapper>

以下是需要注意的点(我就是在这里踩了好久的坑)

以下sql用的是左连接语句LEFT JOIN,具体的sql语句我也不解释了,因为要了解的太多了,【尴尬】

这里的这些字段必须要使用别名,为啥?因为几张表的字段相同所以会出现覆盖的问题,比如我副表1和副表2同时存在一个相同字段project_name,如果不给其声明别名,副表2该字段的数据会被副表1的该字段覆盖掉,原理我也解释不清楚,哈哈!!

在这里插入图片描述

对应的映射字段要使用别名,上图

在这里插入图片描述

线划的丑了些,将就吧!

看下最终获取到的数据结构

在这里插入图片描述

完美,理想中的效果。。。

至于最终效果图为啥这么多null,不用怀疑,这些是我没有写对应的映射

到此这篇关于springboot使用mybatis一对多的关联查询的文章就介绍到这了,更多相关springboot使用mybatis关联查询内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • springboot-controller的使用详解

    springboot-controller的使用详解

    本篇文章主要介绍了springboot-controller的使用详解,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • 仿钉钉流程轻松实现JSON转BPMN完整实现过程示例

    仿钉钉流程轻松实现JSON转BPMN完整实现过程示例

    这篇文章主要为大家介绍了仿钉钉流程轻松实现JSON转BPMN完整实现过程示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • 快速搭建Spring Boot+MyBatis的项目IDEA(附源码下载)

    快速搭建Spring Boot+MyBatis的项目IDEA(附源码下载)

    这篇文章主要介绍了快速搭建Spring Boot+MyBatis的项目IDEA(附源码下载),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-12-12
  • springboot开启Bean数据校验功能

    springboot开启Bean数据校验功能

    这篇文章主要介绍了springboot开启Bean数据校验功能,通过启用Bean属性校验导入JSR303与Hibernate校验框架坐标,使用@Validated注解启用校验功能,需要的朋友可以参考下
    2023-10-10
  • 消息队列-kafka消费异常问题

    消息队列-kafka消费异常问题

    这篇文章主要给大家介绍了关于kafka的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-07-07
  • JAVA中的注解机制解读

    JAVA中的注解机制解读

    这篇文章主要介绍了JAVA中的注解机制解读,通过调用Java的反射机制相关API来访问annotation信息,首先加载使用注解的类,得到class类,然后再得到类相应的方法,成员变量,需要的朋友可以参考下
    2023-10-10
  • Java日期时间使用方法汇总

    Java日期时间使用方法汇总

    这篇文章主要针对Java日期时间使用方法进行汇总,感兴趣的朋友可以参考一下
    2016-03-03
  • Java程序员应该遵守的10条纪律

    Java程序员应该遵守的10条纪律

    Java程序员有许多应遵循的守则或最佳实践方式。本文概述了每个开发者最应该遵循的10条守则或戒律,如果不遵循它们,将会导致灾难性后果。
    2015-09-09
  • 深入Java冒泡排序与选择排序的区别详解

    深入Java冒泡排序与选择排序的区别详解

    本篇文章是对Java冒泡排序与选择排序的区别进行了详细的分析介绍,需要的朋友参考下
    2013-05-05
  • Mybatis中的mapper是如何和XMl关联起来的

    Mybatis中的mapper是如何和XMl关联起来的

    这篇文章主要介绍了Mybatis中的mapper是如何和XMl关联起来的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-06-06

最新评论