springboot使用mybatis一对多的关联查询问题记录
作者:__莫等闲 发布时间:2023-05-25 14:31:03
标签:springboot,mybatis,关联查询,一对多
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
,不用怀疑,这些是我没有写对应的映射
来源:https://blog.csdn.net/qq_31676725/article/details/122674040
0
投稿
猜你喜欢
- 如下所示:JSONArray jsonArray1 = jsonObject.getJSONArray("result"
- 对某个类型中的方法进行拦截,然后加入固定的业务逻辑,这是AOP面向切面编程可以做的事,在springboot里实现aop的方法也有很多, s
- 本文实例讲述了java实现的简单猜数字游戏代码。分享给大家供大家参考。具体代码如下:import java.util.InputMismat
- 中文乱码问题真的是一个很棘手的问题,特别是从前台传到后台之后,都不知道问题出在哪里了。现在分享解决javaWEB中前后台中文乱码问题的3种方
- 导读本文主体为单项链表和双向链表的反转以及简单的测试,以便于理解链表相关的算法题目。链表特点便于增删数据,不便于寻址在内存中属于跳转结构单链
- bean的定义继承bean定义可以包含很多的配置信息,包括构造函数的参数,属性值,比如初始化方法,静态工厂方法名等容器的具体信息。子bean
- 图片的复制无非有两种方法,一种是图片直接上传到服务器,另外一种转换成二进制流的base64码目前限chrome浏览器使用首先以um-edit
- 本文实例讲述了java中struts2实现文件上传下载功能实现方法。分享给大家供大家参考。具体分析如下:1.文件上传首先是jsp页面的代码在
- 1.问题描述在我引入SpringCloud-gateway,运行时报错如下:org.springframework.beans.factor
- 废话不多说了,直接给大家贴java代码了。具体代码如下所示:/*支付流程*//****Controller.java 代码如下:*/@Req
- 本文介绍SpringBoot如何使用Prometheus配合Grafana监控。1.关于PrometheusPrometheus是一个根据应
- Spring Boot产生环形注入***************************APPLICATION FAILED TO STAR
- 一、场景描述建造者模式同工厂模式、抽象工厂模式一样,用于创建继承类对象。工厂模式:Java设计模式之工厂模式抽象工厂模式:Java设计模式之
- 一、前置说明本节大纲使用lombok插件的好处如何安装lombok插件使用lombok提高开发效率二、使用lombok插件的好处我们在jav
- 本文实例讲述了c#窗体传值用法。分享给大家供大家参考。具体分析如下:对于窗体间的数据传递,是刚开始从事.Net窗体应用程序开发人员碰到的一个
- Socket异常客户端异常java.net.ConnectException: Connection refused: connect。该异
- 建造者模式概述建造者模式(Builder Pattern)属于创建型模式。它是将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同
- Parallel类(https://www.jb51.net/article/244267.htm)的并行任务需要结束后才能运行后面的代码,
- 一、关键字关键字:被Java语言赋予特定含义的单词。组成关键字的字母全部小写。注:goto和const作为保留字存在,目前并不使用。main
- paras.xml文件<?xml version="1.0" encoding="UTF-8"