MyBatis 接收数据库中没有的字段(记一次工作总结)
来源:互联网 发布:ubuntu wifi 编辑:程序博客网 时间:2024/06/07 09:57
问题描述:浏览器页面想要通过E-hcart表格,展示一些数据。这些数据需要从数据库中计算而来。但是在数据库中没有的字段。比如说要查询某些记录。如车辆的在线数量,离线数量和无数据的数量。这些数据是通过MySql的聚合函数得到的。
sql语句如下:
SELECT sum( updatetime > date_sub(now(), INTERVAL 0.5 DAY) ) AS online, sum(updatetime IS NULL) nodata, count(1) - sum( updatetime > date_sub(now(), INTERVAL 0.5 DAY) ) - sum(updatetime IS NULL) AS offline,COUNT(1)FROM cx_onecdataWHERE kdgs = '顺丰'AND cartype LIKE '%gps%'
查询的结果如上图。
注意,这些统计的字段都是数据库中没有的。
那么问题来了,该如何获取这些数据呢?
问题的解决方法:在MyBaits中生成相对应的字段。比如,我的实体类中是这样的(也就是DO):
public class Sfcar { private Integer online; private Integer nodata; private Integer offline; public Integer getOnline() { return online; } public void setOnline(Integer online) { this.online = online; } public Integer getNodata() { return nodata; } public void setNodata(Integer nodata) { this.nodata = nodata; } public Integer getOffline() { return offline; } public void setOffline(Integer offline) { this.offline = offline; }
MyBatis中对应的映射文件是这样配置的:
<!-- GPS 车辆统计 --> <select id="findbySFCarGPS" resultMap="BaseResultMap"> SELECT sum( updatetime > date_sub(now(), INTERVAL 0.5 DAY) ) AS online, sum(updatetime IS NULL) nodata, count(1) - sum( updatetime > date_sub(now(), INTERVAL 0.5 DAY) ) - sum(updatetime IS NULL) AS offline FROM cx_onecdata WHERE kdgs = '顺丰' AND cartype LIKE '%gps%' </select>
这里有两个注意的点。一是:返回结果类型是resultMap=”BaseResultMap”。二,MyBatis是跟实体类映射,而不是跟数据库对应的表映射,所以可以直接写想要的Sql。最好用这个Do 来接收想要的数据。
至此,可以完美解决字段不对应的问题。
最后页面显示的效果:
数据通过渲染得到想要的效果。
说明一下:以前数据中获取不对应的字段时,我是用List集合里面放Map集合,获取所要的数据。
,用来解码的代码如:
List<String> legend = new ArrayList<String>(); List<Map> serisData=new ArrayList<Map>(); List<TreeMap<String,Integer>> data = car_Service.selectCarTypeCount(); int count = 0; List<String> car_typename= new ArrayList<String>(); List<String> car_typevalue = new ArrayList<String>(); // Map<String,String> mapdata= new HashMap<>(); // 遍历以Key - Value 形式遍历 for (Map<String, Integer> map : data){ Map tarMap =new HashMap(); for (Map.Entry<String, Integer> k : map.entrySet()){ count++; if (count % 2 == 0) { car_typename.add(k.getValue()+""); }else{ car_typevalue.add(k.getValue()+""); } } for (int i = 0; i < car_typename.size(); i++) { // 获取 List 中的 String 数组元素。 String cartype_name = car_typename.get(i); String cartype_value = car_typevalue.get(i); // mapdata.put(cartype_name, cartype_value); if (i== car_typename.size()-1) { legend.add(cartype_name); tarMap.put("value", cartype_value); tarMap.put("name", cartype_name); serisData.add(tarMap); } } } // 纵坐标 List<SeriesVO> series = new ArrayList<>(); series.add(new SeriesVO("总数比较", "pie",serisData)); EchartDataVO targetdata = new EchartDataVO(legend,null, series); // 获取 目标数据 JSON 格式 return targetdata;
至此问题解决!
《end》
阅读全文
0 0
- MyBatis 接收数据库中没有的字段(记一次工作总结)
- powerdesigner生成的数据库中没有字段说明的解决办法
- powerdesigner生成的数据库中没有字段说明的解决办法
- powerdesigner生成的数据库中没有字段说明的解决办法
- 字符串截取(记一次工作总结)
- 记一次工作总结
- Mybatis插入postgresql数据库中类型为UUID的字段
- oracle 将 timestamp 类型的数据库字段值通过mybatis插入到数据库中
- 【Oracle】记一次数据库连接没有关闭导致数据库宕机的排查过程
- mybatis中对数据库中字段值唯一处理
- 解决mybatis-generator-core 中数据库字段注释remarks读不出来的问题
- Mybatis中解决数据库字段名与实体类属性名不同的问题
- MyBatis执行一次数据库操作的原理以及顺序
- MyBatis使用@MapKey注解接收多个查询记录到Map中,以便方便地用get()方法获取字段的值
- 没有设置数据库字段ID属性为UNSIGNED的代价
- 从字符串中截取最长的没有重复字符的子字符串(一次循环)
- Mybatis中接收存储过程的 out型参数
- mybatis callSettersOnNulls 配置,解决数据库null字段的显示
- python读取外部数据之读取csv格式
- 自动账户确定之AUM
- 图的数据结构
- reorder-list Java code
- continue;go to;;break;return
- MyBatis 接收数据库中没有的字段(记一次工作总结)
- Centos上ShadowSocks搭建Socket5服务器
- POJ 3057:Evacuation (搜索+二分图匹配)
- 【1034】字符串大小写逆置
- Jmeter常用脚本开发之SOAP/XML-RPC Request
- Django调试工具django-debugtools的用法
- 单片机调用库函数设置单片机延时;
- MongoDB 查询篇
- SSH和SSM对比总结