MyBatis 接收数据库中没有的字段的解决

网友投稿 531 2022-08-22


MyBatis 接收数据库中没有的字段的解决

目录接收数据库中没有的字段问题描述问题的解决方法数据库中找不到相应的字段应该怎么做数据库中找不到相应的字段

接收数据库中没有的字段

问题描述

浏览器页面想要通过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中对应的映射文件是这样配置的:

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%'

这里有两个注意的点。一是:返回结果类型是resultMap=”BaseResultMap”。二,MyBatis是跟实体类映射,而不是跟数据库对应的表映射,所以可以直接写想要的Sql。最好用这个Do 来接收想要的数据。

至此,可以完美解决字段不对应的问题。

最后页面显示的效果:

数据通过渲染得到想要的效果。

说明一下:以前数据中获取不对应的字段时,我是用List集合里面放Map集合,获取所要的数据。

用来解码的http://代码如:

List legend = new ArrayList();

List serisData=new ArrayList();

List> data = car_Service.selectCarTypeCount();

int count = 0;

List car_typename= new ArrayList();

List car_typevalue = new ArrayList();

// Map mapdata= new HashMap<>();

// 遍历以Key - Value 形式遍历

for (Map map : data){

Map tarMap =new HashMap();

for (Map.Entry 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 series = new ArrayList<>();

series.add(new SeriesVO("总数比较", "pie",serisData));

EchartDataVO targetdata = new EchartDataVO(legend,null, shttp://eries);

// 获取 目标数据 jsON 格式

return targetdata;

至此问题解决!

数据库中找不到相应的字段应该怎么做

数据库中找不到相应的字段

有的字段是以符号、数字的形式存在,所以直接找不到。

1.首FYOMvd先找到映射表,在隐射表中包含我们想要的字段。

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/…在另一个表中可能是属于不同的字段

举例如下:

完成上级给的任务时先让他看一遍,避免返工浪费时间


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java十分钟入门多线程上篇
下一篇:详解Java子线程异常时主线程事务如何回滚
相关文章

 发表评论

暂时没有评论,来抢沙发吧~