第一個完整的spring查詢功能學習筆記【Spring工程學習筆記(二)】

該功能用於查詢產品詳情:前端

先上代碼:java

思路:

前端的數據傳到後臺後給Controller層(控制層)——> 控制層會調用Service層(服務層)提供的方法,服務層只定義接口(interface)——> 接口的功能實現是由implement層(實現層)提供的 ——> implement層實現接口時會調用dao層的方法 ——> 一樣,dao層提供的也只是定義的接口(interface),即在數據庫查詢方法的方法名——>對數據庫的真實操做(sql語句)是在xml文件中寫的,mybatis會自動將同名的dao層接口和xml中的方法對應上。

接下來咱們一行行解析代碼:ajax

@註釋部分:

@ApiOperation

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

@ApiOperation爲API添加相關注解,它的參數說明以下:sql

@ApiOperation(value = 「接口說明」, httpMethod = 「接口請求方式」, response = 「接口返回參數類型」, notes = 「接口發佈說明」;其餘參數可參考源碼; 
複製代碼

Notes:

Swagger 是一款RESTFUL接口的文檔在線自動生成+功能測試功能軟件。數據庫

Swagger 的目標是爲REST APIs定義一個標準的,與語言無關的接口,令人和計算機在看不到源碼或者看不到文檔或者不能經過網絡流量檢測的狀況下能發現和理解各類服務的功能。 使用時須要集成Swagger-springmvc到咱們的項目中。編程

若是想得到以下頁面,還須要集成Swagger-UI。 json

@RequestMapping

RequestMapping是一個用來處理請求地址映射的註解。api

@RequestMapping(value = "getprodinfo", method = RequestMethod.POST)
//  value:指定請求的實際地址
//  URL: /api/dm/getprodinfo,這個地址是項目的接口文檔裏提供的接口路徑,value與接口相對應
//  method: 指定請求的method類型, GET、POST、PUT、DELETE等;
複製代碼

方法的定義:

@RequestBody

一、@RequestBody須要把全部請求參數做爲json解析,所以,不能包含key=value這樣的寫法在請求url中,全部的請求參數都是一個json瀏覽器

二、直接經過瀏覽器輸入url時,@RequestBody獲取不到json對象,須要用java編程或者基於ajax的方法請求,將Content-Type設置爲application/json(關於application/json參考www.cnblogs.com/Zhaols/p/62…)

解析前端傳輸的數據

由請求報文的表能夠看出用戶發送請求的參數是prodCode

方法getProdInfo的入參是msg,即Msg,想獲得content須要將msg解析出來。

JSON.parseObject 是將Json字符串轉化爲相應的對象;

.getString 是取得string類型數據用。

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

/**
 * 接口靜態變量
 */
public class IConstant {
	/**
	 * 消息體
	 */
	public static final String CONTENT="content";
	
}
複製代碼

從數據庫查數據

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

這個類與數據庫裏的cor_product表相對應,定義了一些變量,而且每一個變量有其默認的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;
	}
複製代碼

數據庫中的字段:

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

接口須要實現,此接口是在package com.cmge.foundation.impl.cor;中實現的。

這裏傳入的參數是proCode,與前面相對應。

return的同名方法屬於corProductMapper,是dao層的,dao層的mapper.java文件爲其提供定義的interface,其實現直接是數據庫的查詢,在.xml文件中。複製此方法名稱,在CorProductMapper.xml文件中找到此方法。

corProductMapper與CorProductMapper文件對應上是經過以下代碼(與上一段代碼在同一個類裏)

CorProductMapper.xml文件中的此方法,能夠完成對數據庫的查詢:

CorProductMapper.java 是dao層的java文件。

CorProductMapper.xmlCorProductMapper.java是經過mybatis結合的,.java文件也有同名函數,以下:

返回類型是 CorProductNewInfo

這裏回頭與service裏的方法對比一下:

處理數據庫中沒有的字段:

modifyTime 和 createTime須要單獨賦值,由於文檔以下:

前面全部獲取的數據都是prodInfo中的,屬於數據表cor_product,而這個表中並無這兩個時間,這兩個時間與proInfo同屬於content,因此須要單獨賦值。

把獲取的全部數據進行整合並返回給前端:

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

reContent.put("user", obj);  
複製代碼

obj是以前聲明的一個類的對象,好比爲user1,那麼就是把user這個對象放到了map容器中了,其中user只是對象的代號。

也能夠在調用的時候取出,代碼爲

reContent.get(user);  
複製代碼

參數是前面寫的代號,獲得的是user1這個對象。

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

相關文章
相關標籤/搜索