【问题解决】Mybatis一对多/多对多查询时只查出了一条数据
来源:互联网 发布:怎样注销淘宝账号 编辑:程序博客网 时间:2024/06/12 19:12
问题描述:
如果三表(包括了关系表)级联查询,主表和明细表的主键都是id的话,明细表的多条数据只能查询出来第一条/最后一条数据。
三个表,权限表(Permission),权限组表(PermissionGroup),权限组与权限的关系表(PermissionPermissionGroupKey)
实体类就不写上来了。
原出错映射文件:
<resultMap id="permissionGroupResultMap" type="cn.kx59.admin.entity.PermissionGroup" > <id column="id" property="id" jdbcType="INTEGER" /> <result column="name" property="name" jdbcType="VARCHAR" /> <result column="decipher" property="decipher" jdbcType="VARCHAR" /> <result column="create_time" property="createTime" jdbcType="TIMESTAMP" /> <!-- 一个权限组 对应多个权限--> <collection property="permissionArrayList" ofType="cn.kx59.admin.entity.Permission"> <id column="id" property="id" jdbcType="INTEGER" /> <result column="url" property="url" jdbcType="VARCHAR" /> <result column="name" property="name" jdbcType="VARCHAR" /> <result column="explain" property="explain" jdbcType="VARCHAR" /> <result column="decipher" property="decipher" jdbcType="VARCHAR" /> <result column="create_time" property="createTime" jdbcType="TIMESTAMP" /> </collection> </resultMap> <!--查询所有的权限组以及权限组包含的权限--> <select id="selectAllPermissionGroupAndPermission" resultMap="permissionGroupResultMap" > SELECT * FROM [QPWebDB].[dbo].[permission_group] pg left join [QPWebDB].[dbo].[permission_permission_group] ppg on pg.id=ppg.permission_group_id left join [QPWebDB].[dbo].[permission] p on p.permission_id=ppg.permission_id </select>
这是因为主表和明细表的id字段名相同造成的。
问题的关键在于resultMap中如果不定义类似主键之类的能够区分每一条结果集的字段的话,会引起后面一条数据覆盖前面一条数据的现象。
解决方法一:
修改主表或者明细表的id名,保证不一致就行
解决方法二:
查询结果起别名
修改映射文件如下:
<resultMap id="permissionGroupResultMap" type="cn.kx59.admin.entity.PermissionGroup" > <id column="id" property="id" jdbcType="INTEGER" /> <result column="name" property="name" jdbcType="VARCHAR" /> <result column="decipher" property="decipher" jdbcType="VARCHAR" /> <result column="create_time" property="createTime" jdbcType="TIMESTAMP" /> <!-- 一个权限组 对应多个权限--> <collection property="permissionArrayList" ofType="cn.kx59.admin.entity.Permission"> <id column="p_id" property="id" jdbcType="INTEGER" /> <result column="url" property="url" jdbcType="VARCHAR" /> <result column="name" property="name" jdbcType="VARCHAR" /> <result column="explain" property="explain" jdbcType="VARCHAR" /> <result column="decipher" property="decipher" jdbcType="VARCHAR" /> <result column="create_time" property="createTime" jdbcType="TIMESTAMP" /> </collection> </resultMap> <!--查询所有的权限组以及权限组包含的权限--> <select id="selectAllPermissionGroupAndPermission" resultMap="permissionGroupResultMap" > SELECT pg.*, p.id p_id, p.url, p.name, p.explain, p.decipher, p.create_time FROM [QPWebDB].[dbo].[permission_group] pg left join [QPWebDB].[dbo].[permission_permission_group] ppg on pg.id=ppg.permission_group_id left join [QPWebDB].[dbo].[permission] p on p.id=ppg.permission_id </select>
如上两种方法均能解决这个问题,希望对你有帮助
有知道出现这个问题的原理的大佬欢迎在评论区解释下,O(∩_∩)O谢谢
本文章由[谙忆]编写, 所有权利保留。
欢迎转载,分享是进步的源泉。
转载请注明出处:http://chenhaoxiang.cn
本文源自【人生之旅_谙忆的博客】
阅读全文
1 0
- 【问题解决】Mybatis一对多/多对多查询时只查出了一条数据
- mybatis学习之一对多查询如何避免只查出一条数据
- 一对多查询 只显示一条数据 数据合并
- mybatis一对多查询过程只查询了一个结果
- mybatis 关联数据的查询 多对一 一对多
- mybatis一对多查询
- mybatis一对多查询
- Mybatis一对多查询
- Mybatis 一对多 查询
- mybatis 一对多查询
- Mybatis 一对多 查询
- Mybatis一对多查询
- Mybatis一对多查询
- Mybatis(一对多查询)
- mybatis关联查询一对多问题解决,将表中对应的多条数据以list形式存储
- mybatis 关联查询只返回一条数据
- mybatis collection高级映射 一对多管理查询只能查询出一条
- mybatis的一对多和多对多查询
- git module构建公共repo
- 浙大PAT甲级-1048
- 使用indent命令对代码进行格式化处理
- Django(三)模板
- AOP切面进行日志记录
- 【问题解决】Mybatis一对多/多对多查询时只查出了一条数据
- 黑盒测试基础之BUG三方评估
- 《Deep Learning》学习3——L2、L1正则化
- [设计模式]OOP设计模式·目录
- JSON详解
- eclipse如何修改maven报错
- 【原创】Selenium学习系列之(一)(二)—Selenium简介,环境搭建及使用
- selenium以及selenium driver对应各主流浏览器版本小结(计划持续更新)
- RN项目接入第三方SDK的封装包