resultMap中的collection集合出现只能读取一条数据的解决方法
查询数据时只能获得collection集合中的的一条数据,相关情况如下:
结果集resultMap:
<resultMap id="ManagerRolesAcls" type="com.meikai.shop.entity.TSystemManager">
<id column="ID" jdbcType="BIGINT" property="id" />
<result column="create_date" jdbcType="TIMESTAMP" property="createDate" />
<result column="update_date" jdbcType="TIMESTAMP" property="updateDate" />
<result column="manager_name" jdbcType="VARCHAR" property="managerName" />
<result column="nickname" jdbcType="VARCHAR" property="nickname" />
<result column="password" jdbcType="VARCHAR" property="password" />
<result column="avatar" jdbcType="VARCHAR" property="avatar" />
<result column="is_enable" jdbcType="INTEGER" property="isEnable" />
<result column="is_locked" jdbcType="INTEGER" property="isLocked" />
<result column="try_num" jdbcType="INTEGER" property="tryNum" />
<result column="locked_date" jdbcType="TIMESTAMP" property="lockedDate" />
<result column="is_forver" jdbcType="INTEGER" property="isForver" />
<result column="login_time" jdbcType="TIMESTAMP" property="loginTime" />
<result column="login_ip" jdbcType="VARCHAR" property="loginIp" />
<result column="email" jdbcType="VARCHAR" property="email" />
<result column="active_code" jdbcType="VARCHAR" property="activeCode" />
<!-- 拥有角色集合 -->
<collection property="roles" ofType="com.meikai.shop.entity.TSystemRole" javaType="java.util.ArrayList">
<id column="ID" jdbcType="BIGINT" property="id" />
<result column="role_name" jdbcType="VARCHAR" property="roleName" />
<!-- 拥有资源集合 -->
<collection property="acls" ofType="com.meikai.shop.entity.TSystemAcl" javaType="java.util.ArrayList">
<id column="ID" jdbcType="BIGINT" property="id" />
<result column="permission" jdbcType="VARCHAR" property="permission" />
</collection>
</collection>
</resultMap>
5表关联查询:
<!-- 根据用户ID获得用户及其角色和资源 -->
<select id="getRolesAndAclsByID" parameterType="Long" resultMap="ManagerRolesAcls">
SELECT m.*,r.ID,r.role_name,a.ID,a.permission
FROM t_system_manager m
LEFT JOIN
t_system_manager_role mr ON m.ID=mr.manager_id
LEFT JOIN t_system_role r ON mr.`role_id`=r.`ID`
LEFT JOIN t_system_role_acl ra ON r.`ID`=ra.`role_id`
LEFT JOIN t_system_acl a ON a.`ID`=ra.`acl_id`
WHERE m.ID=#{id,jdbcType=BIGINT};
</select>
根据ID获得管理员:
@RequestMapping(value= {"view"},method = { RequestMethod.GET })
@ResponseBody
public TSystemManager view(HttpServletRequest request,Long id) {
TSystemManager viewManager = managerService.getRolesAndAclsByID(id);
for(TSystemRole role : viewManager.getRoles()) {
System.out.append("拥有的角色是:"+role.getRoleName());
for(TSystemAcl acl : role.getAcls()) {
System.out.append("拥有的资源是:"+acl.getPermission());
}
}
return viewManager;
}
在mysql通过上述5表查询语句能查询多条关于角色和资源的记录,但是通过mybatis查询获得的只有单条角色和资源的数据。
在sqlyog的查询结果:

通过mybatis获得的结果:

排查许久发现原因是:
1、主表的id字段和从表的id字段一样;
2、collection集合中包含<id column="ID" jdbcType="BIGINT" property="id" />;
如果同时存在上面两种情况,就只能获得collection的一条数据。
解决方法:
去掉collection的<id column="ID" jdbcType="BIGINT" property="id" />后,才能查询出全部数据。
resultMap中的collection集合出现只能读取一条数据的解决方法的更多相关文章
- mui--使用mui中的图文表格组件时出现一条横线的解决方法
最近做的微信公众号点击链接跳转到H5页面,该H5页面使用mui做的,遇到的商品列表页出现一个横线的问题, 这个是修改前的图片 解决方法: <style type="text/css&q ...
- Mybatis一对多或多对多只能查出一条数据解决策略
原文:https://blog.csdn.net/ren814/article/details/81742242 <resultMap id="menuModelMap" t ...
- 转: 从Mysql某一表中随机读取n条数据的SQL查询语句
若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...
- 从Mysql某一表中随机读取n条数据的SQL查询语句
若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...
- java读取PHP接口数据的实现方法(四)
PHP文件: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 3 ...
- jquery easyui datagrid 多选只能获取一条数据
DataGrid属性: singleSelect ------如果为true,则只允许选择一行: idField ------- 指明哪一个字段是标识字段: 方法: 一:getSelections-- ...
- ckeditor出现错误“从客户端(***)中检测到有潜在危险的 Request.Form值”的解决方法
ckeditor出现错误“从客户端(***)中检测到有潜在危险的 Request.Form值”的解决方法 页面中使用ckeditor,提交文章时总是出错,“从客户端(TextBox1="&l ...
- 从客户端中检测到有潜在危险的Request.Form值的解决方法
描述:从客户端中检测到有潜在危险的Request.Form值的解决方法asp.net 2.0 通常解决办法将.aspx文件中的page项添加ValidateRequest="false&qu ...
- 在VMware 虚拟机中配置 windows2003系统的NLB负载均衡;0x800706D5错误的解决方法;没有接口可用于安装新的群集
首先在VM里面 我装了3个2003的系统, 分别为 webservice01 ,webservice 02 , 以及 webview 这3台. 前面两台用于配置负载均衡,后面的webview就是 ...
随机推荐
- css3 网格背景
background-image: -webkit-gradient(linear, 0 0, 100% 100%, color-stop(.25, rgba(255, 255, 255, .2)), ...
- CString char BSTR 转换
关于字符集不一的历史原因,可以参考: UNICODE与ANSI的区别 以下是网上转载的资料.我将辅以自己的实例,说明并总结关系. 一.CString, int, string, char*之间的转换 ...
- MAC下常用命令的中文帮助文档(man) 出现错误
MacdeMacBook-Pro:Desktop mac$ tar -xf manpages-zh-1.5.2.tar.bz2 MacdeMacBook-Pro:~ root# cd /Users/m ...
- java学习笔记 --- 多线程(多线程的控制)
1.线程休眠 public static void sleep(long millis) public class ThreadSleep extends Thread { @Override ...
- angularjs ng-if ng-show ng-hide区别
在使用anularjs开发前端页面时,常常使用ng-show.ng-hide.ng-if功能来控制页面元素的显示或隐藏,那他们之间有什么不同呢? 实现原理方面:ng-show/ng-hide是通过修改 ...
- PAT——1023. 组个最小数
给定数字0-9各若干个.你可以以任意顺序排列这些数字,但必须全部使用.目标是使得最后得到的数尽可能小(注意0不能做首位).例如:给定两个0,两个1,三个5,一个8,我们得到的最小的数就是1001555 ...
- sys_arch interface for lwIP 2.0.3
sys_arch interface for lwIP 2.0.3 Author: Adam Dunkels Simon Goldschmidt The operating system emulat ...
- linux文件系统写过程简析
linux写入磁盘过程经历VFS -> 页缓存(page cache) -> 具体的文件系统(ext2/3/4.XFS.ReiserFS等) -> Block IO ->设备 ...
- iOS 利用KeyChain+ IDFV + BundleID 来作为UUID,保证传给服务端的UUID唯一
查了相关资料,发现只有KeyChain + IDFV可以保证UUID唯一,参考以下代码 , UICKeyChainStore + (NSString*)identifierForVender{ UIC ...
- php无限极分类处理
/** * 无限极分类处理(通过递归方式实现) * @param $section 原始数据Array * @param $html 界面显示前缀,比如 |- * @param $spear 分级中所 ...