在数据库中查询数据为以下表格,想转换为json
id:20170719,name:李四,code:“1001”,“1002”,“1003”
所以需要将code合并
id | name | code |
---|---|---|
20170719 | 李四 | 1001 |
20170719 | 李四 | 1002 |
20170719 | 李四 | 1003 |
20170718 | 王五 | 1001 |
20170718 | 王五 | 1002 |
20170718 | 王五 | 1003 |
思路如下
已知code固定为1001,1002,1003 将这些code存到itemList里
定义这个数据库查出来的数据为totalList
建立一个这种数据的VO 属性为 id,name,code
建立一个返回类型VO2 属性为id,name,status
开始先将totalList去重 得到 lessList数据如下
id | name | code |
---|---|---|
20170719 | 李四 | 1001 |
20170718 | 王五 | 1003 |
在这个小的list里循环,将VO的id,name赋值
同样在这个循环里建立一个双重循环,lessList和itemList
itemList的循环里赋值code给VO 这样就得到了一个VO对象
使用list的contains方法来判断totalList存在这个VO对象则将这个code并给予标识,如果没有给予另一个标识
即通过自己建立的一个对象来在总的数据里查找是否存在
代码块
大致代码如下:
for(VO vo :lessList){
// 筛查编号
vo.setId();
vo2.setId();
// 获取姓名
vo.setName();
vo2.setId();
// 存放状态
Map<String, Object> status = new HashMap<String, Object>();
for(int i = 0; i<lessList.size(); i++){
for(int j =0; j<itemList.size();j++){
vo.setCode(itemList.get(j));
if(totalList.contains(masterTemplateVO)){
// 1为做过项目
status.put(itemList.get(j),1);
}else{
// 0未做过项目
status.put(itemList.get(j),0);
}
}
}
vo2.setStatus(JsonUtils.toJson(status));
voList.add(vo2);
}
更新 2017-7-20
发现mysql内置函数 GROUP_CONCAT(列)可以直接将重复的放在一行,用逗号拼接。
MYsql内置长度为1024 通过在查询窗口运行以下两行数据将拼接长度设置为最大,需重启mysql
SET GLOBAL group_concat_max_len=-1;
SET SESSION group_concat_max_len=-1;