热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mybatis表1对多查询

在用mybatis写mysql语句时,遇到了1对多关系的问题先看看关系:以A表为基础查询,A表一条记录对应B表的一条记录,

在用mybatis写mysql语句时,遇到了1对多关系的问题

先看看关系:
这里写图片描述
以A表为基础查询,A表一条记录对应B表的一条记录,而A表的一条记录对应C表的n条记录,然后B表和c表是1对1的关系。这时候的查询语句为:



<mapper namespace&#61;"mapper.AMapper"><resultMap id&#61;"AMap" type&#61;"dto.A"><id column&#61;"A_ID" property&#61;"AId" jdbcType&#61;"DECIMAL" javaType&#61;"Long" /><result column&#61;"B_ID" property&#61;"BId" jdbcType&#61;"DECIMAL" javaType&#61;"Long" /><association property&#61;"B" javaType&#61;"dto.B"><id column&#61;"t_B_id" property&#61;"BId" jdbcType&#61;"DECIMAL" javaType&#61;"Long" />association><collection property&#61;"C" javaType&#61;"java.util.List" ofType&#61;"dto.C"><id column&#61;"C_C_ID" property&#61;"CId" jdbcType&#61;"DECIMAL" javaType&#61;"Long" /><result column&#61;"C_A_ID" property&#61;"AId" jdbcType&#61;"DECIMAL" javaType&#61;"Long" /><association property&#61;"C_B" javaType&#61;"dto.B"><id column&#61;"u_B_id" property&#61;"BId" jdbcType&#61;"DECIMAL" javaType&#61;"Long" />association>collection>resultMap><select id&#61;"selectA_WithC_ById" parameterType&#61;"java.lang.Long" resultMap&#61;"AMap">SELECT *FROMA LEFT JOINBONA.A_ID &#61; B.B_idLEFT JOINCONC.C_ID &#61; A.A_IDLEFT JOINB c_bONC.C_ID &#61; c_b.B_idWHEREA.A_ID &#61; #{id}select>
mapper>

查询原理&#xff1a;
这里写图片描述


注意&#xff1a;因为表会重复&#xff0c;所以相同的表&#xff0c;要起别名。同样的&#xff0c;相同的列名也要起别名&#xff0c;不然会出错的。还有一个问题&#xff0c;这个语句直接拿去mysql里面运行&#xff0c;和在项目里面运行&#xff0c;得到的结果条数可能不一样&#xff0c;因为在项目里面&#xff0c;已经把重复的数据和为一条&#xff0c;把不同的存入list中了。


这个有点复杂&#xff0c;但是慢慢的写就可以写好了&#xff0c;还好我写的时候没有报错。


推荐阅读
author-avatar
herogan
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有