【问题解决】Mybatis一对多/多对多查询时只查出了一条数据
2017-08-24 13:32
537 查看
问题描述:
如果三表(包括了关系表)级联查询,主表和明细表的主键都是id的话,明细表的多条数据只能查询出来第一条/最后一条数据。
三个表,权限表(Permission),权限组表(PermissionGroup),权限组与权限的关系表(PermissionPermissionGroupKey)
实体类就不写上来了。
原出错映射文件:
这是因为主表和明细表的id字段名相同造成的。
问题的关键在于resultMap中如果不定义类似主键之类的能够区分每一条结果集的字段的话,会引起后面一条数据覆盖前面一条数据的现象。
解决方法一:
修改主表或者明细表的id名,保证不一致就行
解决方法二:
查询结果起别名
修改映射文件如下:
如上两种方法均能解决这个问题,希望对你有帮助
有知道出现这个问题的原理的大佬欢迎在评论区解释下,O(∩_∩)O谢谢
本文章由[谙忆]编写, 所有权利保留。
欢迎转载,分享是进步的源泉。
转载请注明出处:http://chenhaoxiang.cn
本文源自【人生之旅_谙忆的博客】
如果三表(包括了关系表)级联查询,主表和明细表的主键都是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
本文源自【人生之旅_谙忆的博客】
相关文章推荐
- [已解决]mybatis联合查询能查询到数据,但不能绑定到bean上去的问题
- Mybatis 查询int类型数据,返回记录条数为0时报错问题解决
- mybatis一对一关联查询无法查出关联对象的数据的解决
- 解决mybatis查询日期时间数据得到long类型数据的问题
- 解决mybatis查询日期时间数据得到long类型数据的问题
- 解决在mybatis中使用CTE进行oracle查询数据类型为long的字段出现流关闭问题
- mybatis学习之一对多查询如何避免只查出一条数据
- Mybatis 级联查询时只查出了一条数据
- MyBatis 【问题】解决java连接mysql查询含中文无数据的问题
- mybatis一对一关联查询无法查出关联对象的数据的解决
- 解决在mybatis中使用CTE进行oracle查询数据类型为long的字段出现流关闭问题
- 解决mybatis查询日期时间数据得到long类型数据的问题
- mybatis学习之一对多查询如何避免只查出一条数据
- SQL反模式学习笔记18 减少SQL查询数据,避免使用一条SQL语句解决复杂问题
- mybatis一对一关联查询无法查出关联对象的数据的解决
- Orace查询数据出现乱码的问题解决思路
- 解决EasyUi中的DataGrid删除一条记录后,被删除的数据仍处于被选中状态问题
- oracle分页查询数据重复问题的解决
- oracle insert中文数据,查询出现乱码问题解决
- 抛砖引玉:使用二进制位操作,解决铁道部火车票的数据查询和存储问题,超轻量级的解决方案