返回给前端目标 :
一个大map
map中两个键值对,长度是2
一个是返回的数据总数 resultMap.put(“total”, total != -1 ? total : size)
一个是list集合 resultMap.put(“data”, getNsrxwfxList);
请求参数(json)
前端传递json数据,@RequestBody Map<String, Object> parameter 把参数接收 ,parameter 中四对键值对
详细Controller层
@RequestMapping("/getNsrxwfxMsg")
@ResponseBody //@rsponsebody:将返回的对象(返回值)转化成jason字符串
public Map<String, Object> getNsrxwfxMsg(@RequestBody Map<String, Object> parameter, HttpServletRequest req) { //可以将ajax传递来的json字符串转换成java实体对象、List或Map
System.out.println("请求成功");
Map<String, Object> resultMap = new HashMap<String, Object>();//最后返回给前端的map
if (!parameter.containsKey("swjgDm")) {
parameter.put("swjgDm", UserService.getLoginDepartmentId(req));
parameter.put("swry", UserService.getLoginUserId(req));
}
String rqq=(String) parameter.get("rqq");
String rqz=(String) parameter.get("rqz");
parameter.put("rqq", rqq);
parameter.put("rqz", rqz);
System.out.println("请求成功2");
List<Map<String,Object>> getNsrxwfxList= nsrxwfxservice.getNsrxwfxMsg(parameter); /*查询结果返回list类型的map,list是最外面壳子,装了13个map 为山西13个市 每个map有这么几个键值对
dtywl大厅业务量 dtzb大厅占比 swjg_dm bm zzywl自助业务量 zzzb 自助占比 dzywl dzzb
因为这些数据没法封装成对象 所以封成map比较好 适合存放零散数据
*/
int total = PageUtil.getTotalCount();
int size = getNsrxwfxList == null ? 0 : getNsrxwfxList.size();//总记录数
//最后返回给前端map map把getNsrxwfxList和size 放进去
resultMap.put("data", getNsrxwfxList); //map里放了个list(list里本身是键值对)
resultMap.put("total", total != -1 ? total : size);
System.out.println(resultMap);
return resultMap;
}
dao层xml文件
<select id="getNsrxwfxMsg" parameterType="java.util.Map" resultType="java.util.Map">
select root_swjg_dm swjg_dm,root_swjg_bm bm,zywl,
dtywl,
nvl ((case when zywl>0
then to_char(dtywl / zywl * 100,'FM990.00') end ) ,0) dtzb,
dz,
nvl ((case when zywl>0
then to_char(dz / zywl * 100, 'FM990.00') end ) ,0) dzzb,
zz,
nvl ((case when zywl>0
then to_char(zz / zywl * 100, 'FM990.00') end ) ,0) zzzb
from (select root_swjg_dm,
root_swjg_bm,
nvl( (sum(dtywl) + sum(dz) + sum(zz)),0) zywl,
nvl(sum(dtywl),0) dtywl,
nvl(sum(dz),0) dz,
nvl(sum(zz),0) zz
from (select connect_by_root swjg_dm root_swjg_dm,
connect_by_root swjg_bm root_swjg_bm,
swjg_dm,
swjg_bm
from dm_gy_swjg
where swjgbz = '0'
and yxbz = 'Y'
start with sjswjg_dm =#{swjgDm}
connect by prior swjg_dm = sjswjg_dm) jg,
(select slswjg_dm, sum(ywl) dtywl
from jscq_sxslxx_ywrtj
where lrr_dm = 1
AND lrrq between #{rqq,jdbcType=VARCHAR}
AND #{rqz,jdbcType=VARCHAR}
group by slswjg_dm) dt,
(select SWJG_DM,
sum(decode(pjqd_dm, '02', ywl, 0)) dz,
sum(decode(pjqd_dm, '04', ywl, 0)) zz
from hcp_pjjg_dprtj
WHERE 1 = 1
AND pjrq between to_date(#{rqq}, 'yyyy-MM-dd')
and to_date(#{rqz}, 'yyyy-MM-dd')
GROUP BY SWJG_DM) other
where jg.swjg_dm = dt.slswjg_dm(+)
and jg.swjg_dm = other.swjg_dm(+)
group by root_swjg_dm, root_swjg_bm)
order by root_swjg_dm, root_swjg_bm
</select>
到dao层xml应该resultType写什么?
思路:可以把山西13地市数据封装成map 每一个地市是一个map list装map map中每个键值对是查出来的数据, 调用controller接口返回list即可把要查数据拿到,如下
List<Map<String,Object>> getNsrxwfxList= nsrxwfxservice.getNsrxwfxMsg(parameter);插入代码片
返回值类型始终写想让Mybatis把每一条记录封装成什么类型
所以,每一条数据是map,resultType写map的全类名java.util.Map或者mybatis提供的默认别名map
如下是getNsrxwfxList
最后F12查看下后端返回给前端的数据格式
看response更直观 如下
{
"total": 13,
"data": [
{
"dtywl": 137,
"swjgDm": "11400001400",
"dz": 0,
"dtzb": "100.00",
"bm": "二分局",
"rowId": 1,
"zz": 0,
"zzzb": "0.00",
"zywl": 137,
"dzzb": "0.00"
},
{
"dtywl": 7239,
"swjgDm": "11403000000",
"dz": 415,
"dtzb": "94.33",
"bm": "阳泉市",
"rowId": 4,
"zz": 20,
"zzzb": "0.26",
"zywl": 7674,
"dzzb": "5.41"
}
]
}