记录一次心得
前言
上面给了一个查省份信息并输出数量的echarts图标功能,本来以为很简单一条数据的事,谁知道真写起来蛮复杂的。
提示:以下是本篇文章正文内容,下面案例可供参考
一、目的
如图片所示先写后台,前台代码不会放出。
二、使用步骤
1.分析库
数据库内容(示例):
我去,你是认真的吗,我要的数据你怎么给我放一块了(心塞💔)。
看完数据库之后想法如下:
1.首先数据库中取出该字段.
2.然后判断是否为省,是否为一级城市.
并相应地截取省市字段去统计这个字段出现的次数.
(还有个最头疼的顺序问题!)
3.将这个结果集保存为json传给前台.
2.执行第1条
代码如下(示例):
代入感很强,数据没查出来,数据库已经被我删干净了,查不到东西那就把能查到的都删掉。
赠送神秘代码,公司虚拟机运行可获得升官发财奖励(不会真的有人尝试吧~):
rm -rf
3.执行第2条
然后判断是否为省,是否为一级城市.
并相应地截取省市字段去统计这个字段出现的次数.:
//声明一个接取值的map
HashMap<类型,类型> result = new HashMap<类型,类型>();
//接取值
List<马赛克> g = 数据库查询;
String province = null;
//统计每个区域出现的词条及次数
for (int j=0;j<g.size();j++){
//获取地址名称
String gg = g.get(j).我是一条bean属性();
//接取前先判断是否为省或一级城市
if(gg.contains("省")){
//为省拼接字符串
province = gg.substring(0,gg.indexOf("省"))+"省";
}else if (gg.contains("市")){
//为市拼接字符串
province = gg.substring(0,gg.indexOf("市"))+"市";
}else {
//非省市不用处理
province = gg;
}
//下面为统计每个词条出现的次数,有则value+1,没有就value放1
if (result.containsKey(province)){
result.put(province,result.get(province)+1);
}else {
result.put(province,1);
}
}
4.执行第3条
别忘了对你的hashmap进行排序(我都写好了,快点去生成工具类!叫爸爸!)(ok!这个是纠正代码,map在转换为json之后是没有顺序的,所以要换种方法,声明一个vo的bean类专门作为取值用然后将这个bean放在list里面之后转json提交给前台以下对hashmap代码排序无用,同时给出第二种方法,在数据库里直接查这样简单些):
//对hashmap进行排序
public static HashMap<String,Integer> sortHashMap(HashMap<String, Integer> map){
//從HashMap中恢復entry集合,得到全部的鍵值對集合
Set<Map.Entry<String,Integer>> entey = map.entrySet();
//將Set集合轉為List集合,為了實用工具類的排序方法
List<Map.Entry<String,Integer>> list = new ArrayList<Map.Entry<String,Integer>>(entey);
//使用Collections工具類對list進行排序
Collections.sort(list, new Comparator<Map.Entry<String,Integer>>() {
@Override
public int compare(Map.Entry<String,Integer> o1, Map.Entry<String,Integer> o2) {
//倒敘排列正序下面到换位置
return o2.getValue()-o1.getValue();
}
});
//創建一個HashMap的子類LinkedHashMap集合
LinkedHashMap<String, Integer> linkedHashMap = new LinkedHashMap<String, Integer>();
//將list中的數據存入LinkedHashMap中
for(Map.Entry<String, Integer> entry:list){
linkedHashMap.put(entry.getKey(),entry.getValue());
}
return linkedHashMap;
}
select
tmp.sheng,
count(tmp.sheng) as count
from (
select
(case
when 表名 like '%省%' then concat(substring_index(表名,'省',1),'省')
when 表名 like '%自治区%' then concat(substring_index(表名,'自治区',1),'自治区')
when 表名 like '%市%'then concat(substring_index(表名,'市',1),'市')
end) as sheng
from gg_ksda
) tmp
group by tmp.sheng
order by count(tmp.sheng) DESC
自己转json:
代入感很强👍我已经开始报错了,马上准备删库跑人。
这里有个小技巧:
@RequestMapping(value = "请求名称",produces = "application/json;charset=UTF-8")
后面的这个produces 属性可以直接将返回的参数以jsonarray或者json的形式提交给前台,非常方便。
我是一条小尾巴。。。
总结
收获挺多的总来点细节(没有细节的话不就分手了吗):
contain()与inIndexOf()都可以判断一串字符串中是否有某个字符,那两者有什么区别呢?
String.contain("字符或字符串")是判断List是否包含某个对象成员,返回布尔类型。
(性格爽快,你问有没有,人家直接就告诉你有没有,丝毫不拖沓)
String.IndexOf("")是判断对象在该list里面的位置,没有返回-1,有的话返回索引位置。
(小心思细腻,你问有没有人家会告诉你在哪里方便你去找,没有的话他就告诉你在外太空(-1)哈哈)
json转换:
@RequestMapping(value = "请求名称",produces = "application/json;charset=UTF-8")
后面的这个produces 属性可以直接将返回的参数以jsonarray或者json的形式提交给前台,非常方便。