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