关于ibatis映射问题

mapper.xml的查询语句如下 返回类型为一个map

<select id="segmentFault" resultType="java.util.HashMap">
        select u.password, //User
                u.salt, //User
                 r.role,//Role
                  r.description //Role
            from sys_user u,sys_user_role ur,sys_role r
            where u.id=ur.user_id
            and r.id=ur.role_id 
            and u.username='zms'
</select>

dao层接收返回值类型为 User 实体类

List<User> segmentFault();

查询出的数据从map转换为一个javaBean
我的困惑是 遍历 这个list 得到的是User对象这没问题
但是当我在controller层

  @RequestMapping(value="segmentFault",method=RequestMethod.POST)
  @ResponseBody
  public ResponseBean segmentFault(){
      List<User> result=userService.segmentFault();
      return new ResponseBean(ResponseBean.SUCCESS,"大佬万岁!",result);
  }

返回一个Json时

{
"code": "0",
"data": [
    {
        "description": "用户管理角色集合",
        "role": "user",
        "password": "7dfa79b6d4aab34222c9b8b14f32122c",
        "salt": "682944961e87d6f80cefbbd0a8c64292"
    },
    {
        "description": "菜单管理角色集合",
        "role": "menu",
        "password": "7dfa79b6d4aab34222c9b8b14f32122c",
        "salt": "682944961e87d6f80cefbbd0a8c64292"
    },
    {
        "description": "权限管理角色集合",
        "role": "permission",
        "password": "7dfa79b6d4aab34222c9b8b14f32122c",
        "salt": "682944961e87d6f80cefbbd0a8c64292"
    },
    {
        "description": "角色管理角色集合",
        "role": "role",
        "password": "7dfa79b6d4aab34222c9b8b14f32122c",
        "salt": "682944961e87d6f80cefbbd0a8c64292"
    },
    {
        "description": "系统管理浏览角色",
        "role": "brower",
        "password": "7dfa79b6d4aab34222c9b8b14f32122c",
        "salt": "682944961e87d6f80cefbbd0a8c64292"
    },
    {
        "description": "微信小程序管理角色",
        "role": "weixin",
        "password": "7dfa79b6d4aab34222c9b8b14f32122c",
        "salt": "682944961e87d6f80cefbbd0a8c64292"
    }

实体类Role里面的数据也出来了 1.我mapper里面映射类型是一个map 2.当dao层接收这个返回结果集的时候 对这个map进行了转换 转换成User 3. 但是我controller @ResponseBody 转换以后Role这个实体类的数据也出来了 那么我的疑问就来了 map转换为User List<Map<String,Object>> 变为List<User> , 那么Role去哪了 那么@ResponseBody 是直接对未转型前的 List<Map<String,Object>> 操作?

阅读 3.2k
3 个回答

private transient Object[] elementData;
这是list源码里面的方法 真正保留数据的数组在这里面 Map<String,Object> 是我mapper映射出来的第一级的数据
存放在此 List<User> 只是用User对这个类型进行了一下形式上的转换而已 并没有改变真正保留的数据

User 类的结构是啥

建议你 xml返回user,然后打印一个user看看

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题