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

作者:__莫等闲 时间:2023-05-25 14:31:03 

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

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

一对多

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

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

这是我的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的该字段覆盖掉,原理我也解释不清楚,哈哈!!

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

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

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

线划的丑了些,将就吧!

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

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

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

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

来源:https://blog.csdn.net/qq_31676725/article/details/122674040

标签:springboot,mybatis,关联查询,一对多
0
投稿

猜你喜欢

  • android实现简单的画画板实例代码

    2023-02-21 05:46:02
  • 解析spring boot与ireport 整合问题

    2021-12-15 17:49:25
  • Opencv实现画笔功能

    2023-04-03 11:10:24
  • Android使用TextView跑马灯效果

    2022-05-20 20:07:20
  • 基于C#实现的仿windows左侧伸缩菜单效果

    2023-01-22 18:44:54
  • Flutter简洁实用的图片编辑器的实现

    2021-10-31 08:30:44
  • C#.Net ArrayList的使用方法

    2022-01-17 05:29:14
  • Java线程同步的四种方式详解

    2021-09-02 19:57:36
  • 详解如何热更新线上的Java服务器代码

    2021-05-26 01:29:33
  • java读取xml配置参数代码实例

    2023-11-25 03:03:17
  • Json传输出现中文乱码问题的解决办法

    2022-06-23 06:38:04
  • Java中的functor实现

    2023-11-26 08:30:50
  • Java基于递归和循环两种方式实现未知维度集合的笛卡尔积算法示例

    2021-07-19 04:41:18
  • C#中方法的详细介绍

    2023-08-06 12:31:21
  • Java 实战项目锤炼之网上花店商城的实现流程

    2021-09-14 04:51:45
  • Android App开发中创建Fragment组件的教程

    2022-05-18 04:34:38
  • Android自定义ProgressDialog加载图片

    2022-07-28 22:08:39
  • Android重力传感器实现滚动的弹球

    2023-05-04 05:49:28
  • Android使用Room操作数据库流程详解

    2023-03-21 21:00:31
  • 浅谈JDK8中的Duration Period和ChronoUnit

    2023-01-07 20:10:01
  • asp之家 软件编程 m.aspxhome.com