第一個(gè)完整的spring查詢功能學(xué)習(xí)筆記【Spring工程學(xué)習(xí)筆記(二)】

該功能用于查詢產(chǎn)品詳情:

先上代碼:

image

思路:

image

前端的數(shù)據(jù)傳到后臺(tái)后給Controller層(控制層)——> 控制層會(huì)調(diào)用Service層(服務(wù)層)提供的方法,服務(wù)層只定義接口(interface)——> 接口的功能實(shí)現(xiàn)是由implement層(實(shí)現(xiàn)層)提供的 ——> implement層實(shí)現(xiàn)接口時(shí)會(huì)調(diào)用dao層的方法 ——> 同樣,dao層提供的也只是定義的接口(interface),即在數(shù)據(jù)庫查詢方法的方法名——>對(duì)數(shù)據(jù)庫的真實(shí)操作(sql語句)是在xml文件中寫的,mybatis會(huì)自動(dòng)將同名的dao層接口和xml中的方法對(duì)應(yīng)上。

接下來我們一行行解析代碼:

@注釋部分:

image

@ApiOperation

@ApiOperation不是spring自帶的注解,而是來自swagger里的
com.wordnik.swagger.annotations.ApiOperation(swagger見下面的Notes)

@ApiOperation為API添加相關(guān)注解,它的參數(shù)說明如下:

@ApiOperation(value = “接口說明”, httpMethod = “接口請(qǐng)求方式”, response = “接口返回參數(shù)類型”, notes = “接口發(fā)布說明”;其他參數(shù)可參考源碼; 

Notes:

Swagger 是一款RESTFUL接口的文檔在線自動(dòng)生成+功能測(cè)試功能軟件。

Swagger 的目標(biāo)是為REST APIs定義一個(gè)標(biāo)準(zhǔn)的,與語言無關(guān)的接口,使人和計(jì)算機(jī)在看不到源碼或者看不到文檔或者不能通過網(wǎng)絡(luò)流量檢測(cè)的情況下能發(fā)現(xiàn)和理解各種服務(wù)的功能。
使用時(shí)需要集成Swagger-springmvc到我們的項(xiàng)目中。

如果想獲得如下頁面,還需要集成Swagger-UI。


image

@RequestMapping

RequestMapping是一個(gè)用來處理請(qǐng)求地址映射的注解。

@RequestMapping(value = "getprodinfo", method = RequestMethod.POST)
//  value:指定請(qǐng)求的實(shí)際地址
//  URL: /api/dm/getprodinfo,這個(gè)地址是項(xiàng)目的接口文檔里提供的接口路徑,value與接口相對(duì)應(yīng)
//  method: 指定請(qǐng)求的method類型, GET、POST、PUT、DELETE等;

方法的定義:

image

@RequestBody

1、@RequestBody需要把所有請(qǐng)求參數(shù)作為json解析,因此,不能包含key=value這樣的寫法在請(qǐng)求url中,所有的請(qǐng)求參數(shù)都是一個(gè)json

2、直接通過瀏覽器輸入url時(shí),@RequestBody獲取不到json對(duì)象,需要用java編程或者基于ajax的方法請(qǐng)求,將Content-Type設(shè)置為application/json(關(guān)于application/json參考https://www.cnblogs.com/Zhaols/p/6274899.html)

解析前端傳輸?shù)臄?shù)據(jù)

image
image

由請(qǐng)求報(bào)文的表可以看出用戶發(fā)送請(qǐng)求的參數(shù)是prodCode

方法getProdInfo的入?yún)⑹莔sg,即Msg,想得到content需要將msg解析出來。

JSON.parseObject 是將Json字符串轉(zhuǎn)化為相應(yīng)的對(duì)象;

.getString 是取得string類型數(shù)據(jù)用。

IConstant.CONTENT是在package com.cmge.foundation.contants定義的接口靜態(tài)變量,放在同一個(gè)類中管理可以使代碼更加清晰,定義形式如下:

/**
 * 接口靜態(tài)變量
 */
public class IConstant {
    /**
     * 消息體
     */
    public static final String CONTENT="content";
    
}

從數(shù)據(jù)庫查數(shù)據(jù)

image

1、CorProductNewInfo是在package com.cmge.foundation.vo.cor;中定義的一個(gè)類:

這個(gè)類與數(shù)據(jù)庫里的cor_product表相對(duì)應(yīng),定義了一些變量,并且每個(gè)變量有其默認(rèn)的get、set方法。

package com.cmge.foundation.vo.cor;

public class CorProductNewInfo {
    private Integer id;
    private String prodCode;
    ……
    
    public Integer getId() {
        return id;
    }
    public void setId(Integer id) {
        this.id = id;
    }
    public String getProdCode() {
        return prodCode;
    }
    public void setProdCode(String prodCode) {
        this.prodCode = prodCode;
    }

數(shù)據(jù)庫中的字段:

image

2、findCorProductByProdCode是在package com.cmge.foundation.service.cor;中定義的接口:

image

接口需要實(shí)現(xiàn),此接口是在package com.cmge.foundation.impl.cor;中實(shí)現(xiàn)的。

image

這里傳入的參數(shù)是proCode,與前面相對(duì)應(yīng)。

return的同名方法屬于corProductMapper,是dao層的,dao層的mapper.java文件為其提供定義的interface,其實(shí)現(xiàn)直接是數(shù)據(jù)庫的查詢,在.xml文件中。復(fù)制此方法名稱,在CorProductMapper.xml文件中找到此方法。

corProductMapper與CorProductMapper文件對(duì)應(yīng)上是通過如下代碼(與上一段代碼在同一個(gè)類里)

image

CorProductMapper.xml文件中的此方法,可以完成對(duì)數(shù)據(jù)庫的查詢:

image

CorProductMapper.java 是dao層的java文件。

CorProductMapper.xmlCorProductMapper.java是通過mybatis結(jié)合的,.java文件也有同名函數(shù),如下:

image

返回類型是CorProductNewInfo

這里回頭與service里的方法對(duì)比一下:

image

處理數(shù)據(jù)庫中沒有的字段:

image

modifyTime 和 createTime需要單獨(dú)賦值,因?yàn)槲臋n如下:

image

前面所有獲取的數(shù)據(jù)都是prodInfo中的,屬于數(shù)據(jù)表cor_product,而這個(gè)表中并沒有這兩個(gè)時(shí)間,這兩個(gè)時(shí)間與proInfo同屬于content,所以需要單獨(dú)賦值。

把獲取的所有數(shù)據(jù)進(jìn)行整合并返回給前端:

image

在第一句的聲明中,reContent就是一個(gè)容器,主要調(diào)用put()、get()方法;

reContent.put("user", obj);  

obj是之前聲明的一個(gè)類的對(duì)象,比如為user1,那么就是把user這個(gè)對(duì)象放到了map容器中了,其中user只是對(duì)象的代號(hào)。

也可以在調(diào)用的時(shí)候取出,代碼為

reContent.get(user);  

參數(shù)是前面寫的代號(hào),得到的是user1這個(gè)對(duì)象。

注意最后一句要把reContent成功返回

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,428評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,024評(píng)論 3 413
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,285評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經(jīng)常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,548評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,328評(píng)論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,878評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,971評(píng)論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,098評(píng)論 0 286
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,616評(píng)論 1 331
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,554評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,725評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,243評(píng)論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,971評(píng)論 3 345
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,361評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,613評(píng)論 1 280
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,339評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,695評(píng)論 2 370

推薦閱讀更多精彩內(nèi)容