查询数据时只能获得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集合出现只能读取一条数据的解决方法的更多相关文章

  1. mui--使用mui中的图文表格组件时出现一条横线的解决方法

    最近做的微信公众号点击链接跳转到H5页面,该H5页面使用mui做的,遇到的商品列表页出现一个横线的问题, 这个是修改前的图片 解决方法: <style type="text/css&q ...

  2. Mybatis一对多或多对多只能查出一条数据解决策略

    原文:https://blog.csdn.net/ren814/article/details/81742242 <resultMap id="menuModelMap" t ...

  3. 转: 从Mysql某一表中随机读取n条数据的SQL查询语句

    若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...

  4. 从Mysql某一表中随机读取n条数据的SQL查询语句

    若要在i ≤ R ≤ j 这个范围得到一个随机整数R ,需要用到表达式 FLOOR(i + RAND() * (j – i + 1)).例如, 若要在7 到 12 的范围(包括7和12)内得到一个随机 ...

  5. 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 ...

  6. jquery easyui datagrid 多选只能获取一条数据

    DataGrid属性: singleSelect ------如果为true,则只允许选择一行: idField ------- 指明哪一个字段是标识字段: 方法: 一:getSelections-- ...

  7. ckeditor出现错误“从客户端(***)中检测到有潜在危险的 Request.Form值”的解决方法

    ckeditor出现错误“从客户端(***)中检测到有潜在危险的 Request.Form值”的解决方法 页面中使用ckeditor,提交文章时总是出错,“从客户端(TextBox1="&l ...

  8. 从客户端中检测到有潜在危险的Request.Form值的解决方法

    描述:从客户端中检测到有潜在危险的Request.Form值的解决方法asp.net 2.0 通常解决办法将.aspx文件中的page项添加ValidateRequest="false&qu ...

  9. 在VMware 虚拟机中配置 windows2003系统的NLB负载均衡;0x800706D5错误的解决方法;没有接口可用于安装新的群集

    首先在VM里面 我装了3个2003的系统,  分别为 webservice01 ,webservice 02 , 以及   webview 这3台. 前面两台用于配置负载均衡,后面的webview就是 ...

随机推荐

  1. 本地缓存和redis

    项目中的传统架构在服务启动时 读取数据库的大部分数据到本地内存,在看到redis的作用时发出疑问,到底有什么样的区别以及怎么选择呢,下面是别人的回答 使用本地缓存快还是使用redis缓存好? Redi ...

  2. java.lang.NoClassDefFoundError: org/aspectj/weaver/tools/PointcutPrimitive

    问题:使用Spring时,报错:java.lang.NoClassDefFoundError: org/aspectj/weaver/tools/PointcutPrimitive问题原因: 少了as ...

  3. 【小M的作物】

    这是一道我好像没写过的最小割 这道题如果没有那\(m\)条限制,我们完全可以贪心来做 但是硬要用网络流怎么办 可以转化为最小割模型 我们将源点\(S\)表示为耕地\(A\),汇点\(T\)表示为耕地\ ...

  4. 笔试面试之C++

    7 类B是类A的公有派生类, 类A和类B中都定义了虚函数func(), p 是一个指向类A对象的指针,则p->A::func()将() A 调用类A中的函数 B 调用类B中的函数 C 根据p所指 ...

  5. programming-languages学习笔记--第5部分

    programming-languages学习笔记–第5部分 */--> pre.src {background-color: #292b2e; color: #b2b2b2;} program ...

  6. deque详解

    deque是double-ended queue的简称,deque和vector几乎上是一样的,使用的非常少,定义在<deque>头文件里: deque和vector的区别在于: 1)de ...

  7. PAT——1070. 结绳

    给定一段一段的绳子,你需要把它们串成一条绳.每次串连的时候,是把两段绳子对折,再如下图所示套接在一起.这样得到的绳子又被当成是另一段绳子,可以再次对折去跟另一段绳子串连.每次串连后,原来两段绳子的长度 ...

  8. Luogu_3239 [HNOI2015]亚瑟王

    Luogu_3239 [HNOI2015]亚瑟王 vim-markdown 真好用 这个题难了我一下午 第一道概率正而八经\(DP\),还是通过qbxt讲解才会做的. 发现Sengxian真是个dal ...

  9. 我的QT5学习之路(一)——浅谈QT的安装和配置

    一.前言 说到Qt,不能不说到C++,这门伟大的语言.因为其面向对象的编程思想和陡峭的学习曲线,一开始学习起来很是吃力.Qt从QT4开始基本封装了很多C++的工具库和界面库,而且支持跨平台,这是它最大 ...

  10. 彻底弄懂JS原型与继承

    本文由浅到深,循序渐进的将原型与继承的抽象概念形象化,且每个知识点都搭配相应的例子,尽可能的将其通俗化,而且本文最大的优点就是:长(为了更详细嘛). 一.原型 首先,我们先说说原型,但说到原型就得从函 ...