MyBatis 接收數(shù)據(jù)庫(kù)中沒(méi)有的字段的解決
接收數(shù)據(jù)庫(kù)中沒(méi)有的字段
問(wèn)題描述
瀏覽器頁(yè)面想要通過(guò)E-hcart表格,展示一些數(shù)據(jù)。這些數(shù)據(jù)需要從數(shù)據(jù)庫(kù)中計(jì)算而來(lái)。但是在數(shù)據(jù)庫(kù)中沒(méi)有的字段。比如說(shuō)要查詢某些記錄。如車輛的在線數(shù)量,離線數(shù)量和無(wú)數(shù)據(jù)的數(shù)量。這些數(shù)據(jù)是通過(guò)MySql的聚合函數(shù)得到的。
sql語(yǔ)句如下:
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%'
查詢的結(jié)果如上圖。
注意,這些統(tǒng)計(jì)的字段都是數(shù)據(jù)庫(kù)中沒(méi)有的。
那么問(wèn)題來(lái)了,該如何獲取這些數(shù)據(jù)呢?
問(wèn)題的解決方法
在MyBaits中生成相對(duì)應(yīng)的字段。比如,我的實(shí)體類中是這樣的(也就是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中對(duì)應(yīng)的映射文件是這樣配置的:
<!-- GPS 車輛統(tǒng)計(jì) --> <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>
這里有兩個(gè)注意的點(diǎn)。一是:返回結(jié)果類型是resultMap=”BaseResultMap”。二,MyBatis是跟實(shí)體類映射,而不是跟數(shù)據(jù)庫(kù)對(duì)應(yīng)的表映射,所以可以直接寫想要的Sql。最好用這個(gè)Do 來(lái)接收想要的數(shù)據(jù)。
至此,可以完美解決字段不對(duì)應(yīng)的問(wèn)題。
最后頁(yè)面顯示的效果:
數(shù)據(jù)通過(guò)渲染得到想要的效果。
說(shuō)明一下:以前數(shù)據(jù)中獲取不對(duì)應(yīng)的字段時(shí),我是用List集合里面放Map集合,獲取所要的數(shù)據(jù)。
用來(lái)解碼的代碼如:
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 數(shù)組元素。 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); } } } // 縱坐標(biāo) List<SeriesVO> series = new ArrayList<>(); series.add(new SeriesVO("總數(shù)比較", "pie",serisData)); EchartDataVO targetdata = new EchartDataVO(legend,null, series); // 獲取 目標(biāo)數(shù)據(jù) JSON 格式 return targetdata;
至此問(wèn)題解決!
數(shù)據(jù)庫(kù)中找不到相應(yīng)的字段應(yīng)該怎么做
數(shù)據(jù)庫(kù)中找不到相應(yīng)的字段
有的字段是以符號(hào)、數(shù)字的形式存在,所以直接找不到。
1.首先找到映射表,在隱射表中包含我們想要的字段。
2.去相應(yīng)的表中查找映射表中的字段。
注意1:我們想要的字段可能在映射表中有兩個(gè)或更多的字段組合而成,所以去需要的表中分別找到這些不同的字段組合。
注意2:兩個(gè)或更多的字段可能分別在不同的表中,此時(shí)需要聯(lián)表。
注意3:–山東xxx和七xxxx河酒店hotelinfo.Product_typ=6,但是hotelinfo.Product_typ=‘11’ AND hotelinfo.Territory_cd='Z’才組合成換成其他系統(tǒng),
但是因?yàn)镻roduct_typ=6了,不能=11,
所以Product_typ=6 AND cust_LEVEL="Z"是換成其他系統(tǒng),
可以在PMS系統(tǒng)中查到,換成其他系統(tǒng)的表頭叫做“酒店級(jí)別”
所以并不是一對(duì)一組合,而是多對(duì)多的組合
并不是Para_typ=9AND para_CD=5營(yíng)銷部,Para_typ=10/11.。。AND para_CD="5"也營(yíng)銷部
注意4:Para_typ=9/10/11/…在另一個(gè)表中可能是屬于不同的字段
舉例如下:
完成上級(jí)給的任務(wù)時(shí)先讓他看一遍,避免返工浪費(fèi)時(shí)間
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
idea中Stash與Unstash的使用及說(shuō)明
這篇文章主要介紹了idea中Stash與Unstash的使用及說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02Java基礎(chǔ)之淺談hashCode()和equals()
今天給大家?guī)?lái)的是關(guān)于Java基礎(chǔ)的相關(guān)知識(shí),文章圍繞著hashCode()和equals()展開,文中有非常詳細(xì)的介紹及代碼示例,需要的朋友可以參考下2021-06-06Springboot使用Junit測(cè)試沒(méi)有插入數(shù)據(jù)的原因
這篇文章主要介紹了Springboot使用Junit測(cè)試沒(méi)有插入數(shù)據(jù)的原因,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04Java定時(shí)調(diào)用.ktr文件的示例代碼(解決方案)
這篇文章主要介紹了Java定時(shí)調(diào)用.ktr文件的示例代碼,本文給大家分享遇到問(wèn)題及解決方法,對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-04-04java使用tess4j進(jìn)行圖片文字識(shí)別功能
Tess4J?是Java?(JNA)?對(duì)?Tesseract?OCR?API?的封裝,Tess4J是java直接可使用的jar包,而Tesseract?OCR是支持Tess4J進(jìn)文件文字識(shí)別的基礎(chǔ),Tess4J可直接使用Maven方式引入,這篇文章主要介紹了java使用tess4j進(jìn)行圖片文字識(shí)別,需要的朋友可以參考下2023-04-04Spring?Boot在Web應(yīng)用中基于JdbcRealm安全驗(yàn)證過(guò)程
這篇文章主要為大家介紹了Spring?Boot在Web應(yīng)用中基于JdbcRealm安全驗(yàn)證過(guò)程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪<BR>2023-02-02詳解基于java的Socket聊天程序——客戶端(附demo)
這篇文章主要介紹了詳解基于java的Socket聊天程序——客戶端(附demo),客戶端設(shè)計(jì)主要分成兩個(gè)部分,分別是socket通訊模塊設(shè)計(jì)和UI相關(guān)設(shè)計(jì)。有興趣的可以了解一下。2016-12-12SpringBoot配置Redis實(shí)現(xiàn)保存獲取和刪除數(shù)據(jù)
本文主要介紹了SpringBoot配置Redis實(shí)現(xiàn)保存獲取和刪除數(shù)據(jù),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06