Python 官方文档:入门教程 => 点击学习
目录接收数据库中没有的字段问题描述问题的解决方法数据库中找不到相应的字段应该怎么做数据库中找不到相应的字段接收数据库中没有的字段 问题描述 浏览器页面想要通过E-hcart表格,展示
浏览器页面想要通过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_onecdata
WHERE
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;
至此问题解决!
有的字段是以符号、数字的形式存在,所以直接找不到。
1.首先找到映射表,在隐射表中包含我们想要的字段。
2.去相应的表中查找映射表中的字段。
注意1:我们想要的字段可能在映射表中有两个或更多的字段组合而成,所以去需要的表中分别找到这些不同的字段组合。
注意2:两个或更多的字段可能分别在不同的表中,此时需要联表。
注意3:–山东xxx和七xxxx河酒店hotelinfo.Product_typ=6,但是hotelinfo.Product_typ=‘11’ AND hotelinfo.Territory_cd='Z’才组合成换成其他系统,
但是因为Product_typ=6了,不能=11,
所以Product_typ=6 AND cust_LEVEL="Z"是换成其他系统,
可以在PMS系统中查到,换成其他系统的表头叫做“酒店级别”
所以并不是一对一组合,而是多对多的组合
并不是Para_typ=9AND para_CD=5营销部,Para_typ=10/11.。。AND para_CD="5"也营销部
注意4:Para_typ=9/10/11/…在另一个表中可能是属于不同的字段
举例如下:
完成上级给的任务时先让他看一遍,避免返工浪费时间
以上为个人经验,希望能给大家一个参考,也希望大家多多支持编程网。
--结束END--
本文标题: MyBatis接收数据库中没有的字段的解决
本文链接: https://lsjlt.com/news/142020.html(转载时请注明来源链接)
有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341
2024-03-01
2024-03-01
2024-03-01
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
2024-02-29
回答
回答
回答
回答
回答
回答
回答
回答
回答
回答
0