UAP 從前端到後端 詳細教程 (五) 後端
首先配置問題,在配置檔案裡 新增包的掃描
把對應的註解了的類,解析為相應元件:
配置檔案 命名規則為 xxxResource.xml ,我這裡叫 scanResource.xml.
包掃描,是掃描你的 controller 等類所在包位置
scanResource.xml 裡的 程式碼
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:module="http://www.sgcc.com.cn/schema/platform/module" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.sgcc.com.cn/schema/platform/module http://www.sgcc.com.cn/schema/platform/module/module.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd"> <context:component-scan base-package="top.jacktu.controller" /> <context:component-scan base-package="top.jacktu.bizc" /> </beans>
然後是程式碼結構,檢視. 我這裡沒怎麼用到 Emp 所以 有 Emp 字樣的 java類 你可以忽略它
bizc 是 業務邏輯層,controller 是對請求的處理方法. po 是放 javaBean 的.
===========================================================================================
================================== 分割線===================================================
實體類,Holiday.java
package top.jacktu.po; import java.io.Serializable; /** Holiday 實體類(JavaBean) */ public class Holiday implements Serializable { private static final long serialVersionUID = -2861040546555145433L; private int ID; private int USERID; private String REQUEST_DATE; private String REQUEST_REASON; private int REQUEST_DAYS; private int APPROVER_UID; private String STATE; // .... 後面構造方法,toStrig,getter ,setter 什麼的省略了... }
HolidayControllr.java 控制器
package top.jacktu.controller;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import top.jacktu.bizc.IHolidayBizc;
import top.jacktu.po.Holiday;
import com.sgcc.uap.rest.annotation.ItemResponseBody;
import com.sgcc.uap.rest.annotation.QueryRequestParam;
import com.sgcc.uap.rest.annotation.VoidResponseBody;
import com.sgcc.uap.rest.support.QueryResultObject;
import com.sgcc.uap.rest.support.RequestCondition;
import com.sgcc.uap.rest.utils.RestUtils;
@Controller
@RequestMapping("/holiday")
public class HolidayController {
@Autowired
IHolidayBizc holidayBizc;
/**
* 向前端返回 列表 有關資料
* 其中 PageIndex 和 PageSize 前端會自動反饋回來
* 這樣接收,反饋對應 頁面的 資料就可以了 前端 (就是做一個分頁查詢)
* 每次 翻頁 都會 向這裡請求一次
*/
@RequestMapping("/list")
public @ItemResponseBody
Object getHolidayList(HttpServletRequest reqeust,
@QueryRequestParam("params") RequestCondition param) {
System.out.println(param.getPageIndex());
System.out.println(param.getPageSize());
System.out.println(param.getColumns());
return holidayBizc.getHolidayList();
}
/** 前端載入元資料的請求地址,我這裡是空實現 和返回 */
@RequestMapping("/list/meta")
public @ItemResponseBody
Object getHolidayListMeta(HttpServletRequest reqeust) {
return "";
}
// {"ids":[2,3,4]} id 傳遞過來的形式
// 通過這個刪除資料庫 裡的一些資料,實現操作
@RequestMapping("/list/delete")
public @VoidResponseBody
Object delHoliday(HttpServletRequest reqeust,
@RequestBody Map<String, List<String>> values) {
holidayBizc.DeleteHolidayByIds(values.get("ids"));
return null;
}
/** 新建一條記錄 時的預填資料,也就是彈出 新建 表單時的 ,資料返回 */
@RequestMapping("/info/new")
public @ItemResponseBody
QueryResultObject newHoliday(HttpServletRequest reqeust,
@ModelAttribute Holiday holiday) {
Map<String, Object> map = holidayBizc.getNewInfo();
// return RestUtils.wrappQueryResult(map);
return RestUtils.wrappQueryResult(map);
}
/** 插入一條記錄 */
@RequestMapping("/new")
// ModelAttribute
public @VoidResponseBody
Object insertNewInfo(HttpServletRequest request,
@ModelAttribute Holiday holiday) {
holidayBizc.insertOneHoliday(holiday);
return null;
}
/** 點選編輯時的事件,彈出表單請求資料 時 ,資料返回 */
@RequestMapping("/info/{id}")
public @ItemResponseBody
QueryResultObject getHolidayInfo(HttpServletRequest reqeust,
@PathVariable Integer id, @RequestParam("params") String param) {
Map<String, Object> map = holidayBizc.getInfoById(id);
return RestUtils.wrappQueryResult(map);
}
/** 儲存對 假期的修改 */
@RequestMapping("/saveEdit")
// ModelAttribute
public @VoidResponseBody
Object saveEdit(HttpServletRequest request, @ModelAttribute Holiday holiday) {
holidayBizc.saveEdit(holiday);
return null;
}
}
HolidayBizc.java
package top.jacktu.bizc;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import top.jacktu.po.Holiday;
import com.sgcc.uap.persistence.IHibernateDao;
import com.sgcc.uap.rest.support.QueryResultObject;
import com.sgcc.uap.rest.utils.RestUtils;
/**
* 這個時 業務層(邏輯實現),又可以直接呼叫一些API 但是我沒用.
* 作為演示,很多sql 語句都是自己編寫的.
* @author jacktu
*
*/
@Service
public class HolidayBizc implements IHolidayBizc{
@Autowired
IHibernateDao hibernateDao;
// 獲取表單資料,這裡要做一個 分頁查詢.
//我這裡沒有寫,需要自己 根據 pageIndex 與 pageSize實現
@Override
public QueryResultObject getHolidayList() {
String sql = "select " +
"ID,"+
"USERID,"+
"TO_CHAR(REQUEST_DATE,'YYYY-MM-DD') REQUEST_DATE,"+
"REQUEST_REASON,"+
"REQUEST_DAYS,"+
"APPROVER_UID,"+
"STATE"+
" from holiday";
@SuppressWarnings("unchecked")
List<Map<String, Object>> list =
hibernateDao.queryForListWithSql(sql);
/** list後面那個10 是分頁查詢的一個重要資訊.前端會根據這個顯示有多少頁*/
return RestUtils.wrappQueryResult(list,10);
}
@Override
public void DeleteHolidayByIds(List<String> ids) {
String sql = "DELETE FROM HOLIDAY WHERE ID IN (?)";
sql = sql.replace("?",ids.toString().replace("[", "").replace("]", ""));
hibernateDao.updateWithSql(sql);
}
// 儲存編輯後的資料 時,邏輯實現
@Override
public void saveEdit(Holiday holiday) {
String sql = "UPDATE holiday SET " +
"USERID=?"+
",REQUEST_DATE=TO_DATE(?,'YYYY-MM-DD')"+
",REQUEST_REASON=?"+
",REQUEST_DAYS=?"+
",APPROVER_UID=?"+
",STATE=?"+
" WHERE id=?";
Object data [] = {
holiday.getUSERID(),
holiday.getREQUEST_DATE().replace("00:00:00", ""),
holiday.getREQUEST_REASON(),
holiday.getREQUEST_DAYS(),
holiday.getAPPROVER_UID(),
holiday.getSTATE(),
holiday.getID()};
try {
System.out.println("開始執行sql");
hibernateDao.updateWithSql(sql,data);
System.out.println("執行完畢,over");
} catch (Exception e) {
System.out.println(e.getMessage());
}
}
// 編輯時 的資料返回
@Override
public Map<String, Object> getInfoById(Integer id) {
String sql = "SELECT * FROM holiday WHERE ID=?";
@SuppressWarnings("unchecked")
List<Map<String, Object>> list =
hibernateDao.queryForListWithSql(sql,new Object[]{id});
return list.get(0);
}
/** 插入一條資料的 邏輯實現 */
@Override
public void insertOneHoliday(Holiday h) {
System.out.println("we do nothing but we pretend to do so much thing.");
String sql = "insert into holiday values(?,?,TO_DATE('"
+h.getREQUEST_DATE().substring(0, 10)+"','YYYY-MM-DD'),?,?,?,?)";
Object [] aobj = new Object[]{
h.getID(),h.getUSERID(),h.getREQUEST_REASON(),h.getREQUEST_DAYS()
,h.getAPPROVER_UID(),h.getSTATE()
};
hibernateDao.updateWithSql(sql, aobj);
}
// 新建時反饋的資訊
@Override
public Map<String, Object> getNewInfo() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("ID", getMaxID("holiday")+1);
map.put("USERID", "2");
map.put("REQUEST_DATE", new Date());
map.put("REQUEST_REASON", "例:身體不舒服,想去醫院看看.");
map.put("REQUEST_DAYS", "3");
map.put("APPROVER_UID", "1");
map.put("STATE", "待批准");
return map;
}
/** 獲取最大 的 ID,實現自增. 但是我們組不是這樣的,這裡只是示範 */
private int getMaxID(String string) {
String sql = "select max(ID) from holiday";
int maxInt = hibernateDao.queryForIntWithSql(sql);
return hibernateDao.queryForIntWithSql(sql);
}
}
基本就這些,程式碼粘過去哪裡不能實現.自行解決吧,應該也不會有什麼大問題.
相關推薦
UAP 從前端到後端 詳細教程 (五) 後端
首先配置問題,在配置檔案裡 新增包的掃描 把對應的註解了的類,解析為相應元件: 配置檔案 命名規則為 xxxResource.xml ,我這裡叫 scanResource.xml. 包掃描,是掃描你的 controller 等類所在包位置 scanResourc
PHP從基礎到高階詳細教程(完整版)
PHP基礎變數命名 變數型別 引用賦值型別 範圍 引號 字串連線符 自動(強制)轉換 判斷變數型別運算子 自增自減 三元運算子 優先順序if switch for while 四個跳出的區別形參 實參
Centos6.8從原始碼安裝Gitlab詳細教程
本人用的是1核2G的阿里雲伺服器,從原始碼安裝Gitlab中文版(英文版的安裝幾乎沒有差別,下詳)。安裝過程對於像我這樣的新手來說十分艱辛,中間遇到不少問題,但功夫不負有心人,最終還是安裝成功了。現分享安裝步驟。 各位覺得麻煩,建議用官網推薦的Omnibus 安裝方式。 安
Vue2+Koa2+Typescript前後端框架教程--02後端KOA2框架自動重啟編譯服務(nodemon)
上一篇講完搭建Typescritp版的Koa框架後,F5執行服務端,頁面進行正常顯示服務。 今天要分享的是,如果要修改服務端程式碼,如果讓編譯服務自動重啟,免去手動結束服務再重啟的過程。 自動重啟服務需要使用nodemon工具。nodemon可以自動檢測到目錄中的檔案更改時,通過重新啟動應用程式來除錯基於no
Vue2+Koa2+Typescript前後端框架教程--03後端路由和三層模式配置
昨天將Koa2的基礎框架和自動編譯除錯重啟服務完成,今天開始配置路由和搭建基礎的三層架構模式。 路由中介軟體:koa-router,即路由導航,就是我們平時使用最廣泛的get/post方法執行的URL路徑,其全部包括get、put、post、patch、delete、del,通過訪問路徑,指向不同的模組,指向
Web開發從前端、後端、程式語言、到框架的初學指南
[導讀] 作為一篇Web開發初學者指南,本文從學習什麼出發到如何專攻。從前端、後端,到程式語言,再到框架,或許對打算進軍Web開發的您有所幫助。如果你正在閱讀這篇文章,你可能是對Web開發有某種興趣,甚至你開始想去學 作為一篇Web開發初學者指南,本文從學習什麼
【】從前端(html)向後端(ashx)傳輸資料
整體思路: 想要從前端傳輸資料到後端,大體分三步:首先要從前端獲取值,然後用ajax的方式傳輸到後端,接著在後端接收資料 我這裡實現的是從html頁傳資料到ashx中使用 詳細實現: 1、從前端獲取值
angularJs 從前端到後端 json 串傳參
<%@ page language="java" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme(
Ajax如何實現從前端不重新整理頁面就可以到後端取到資料
提到axaj很多人總說很難,什麼回撥函式呀等等就讓人心煩,其實懂得ajax在js裡面是如何實現向伺服器請求資料的原理,那麼理解ajax也就不是很難了,現在我們一起來看看。 ajax作用:ajax技術的目的是讓javascript傳送http請求,與後臺通訊,獲取資料和資訊。實
從前端和後端兩個角度分析jsonp跨域訪問(完整例項)
一、什麼是跨域訪問 舉個栗子:在A網站中,我們希望使用Ajax來獲得B網站中的特定內容。如果A網站與B網站不在同一個域中,那麼就出現了跨域訪問問題。你可以理解為兩個域名之間不能跨過域名來發送請求或者請求資料,否則就是不安全的。跨域訪問違反了同源策略,同源策略的詳
jquery中ajax 從前端到後端 完整過程解析
幾個原則: 1.get方式訪問瀏覽器時,常加引數緣由: GET訪問瀏覽器是等冪的,就是一個相同的URL只有一個結果[相同是指整個URL字串完全匹配],所以第二次訪問的時候如果 URL字串沒變化,瀏覽器是 直接拿出了第一次訪問的結果。POST則認為是一個變動性訪問 (瀏覽器認為POST的提交必定是有改變的)
【面試】Web效能優化從前端到後端
效能優化 效能優化無非是,優化使用者體驗,減少網頁反應時間。原來在web效能優化書上看過 總的來分減少傳輸距離,減少傳輸量。具體從前端到後端來說 1、後端 存取速度原則是暫存器 > 記憶體 > 磁碟 1)操作資料庫耗時 2)存取檔案
從Git到GitHub,詳細教程
文件夾 想象 可能 機制 安裝完成 公開 style run 離線 眾所周知,一個稍微有點規模的項目,都不可能是一個人單打獨鬥完成的(能完成的大神別打我),所以,一個高效的項目團隊就需要一個NB的工具來進行有效的交流(曾經有人問我企鵝不就可以嗎,我竟無言以對),今天就把我學
跨域cors中如何傳遞cookie(前端為什麽無法向後端傳遞cookie?)
con sam bsp ble 情況 需求 nbsp 什麽 gin 沒有跨域 後端server只要在回應頭部‘set-cookie’,那麽就會有cookie產生並保存在客戶端client。 等到client再次向後端server發送請求時瀏覽器的機制就會自動攜帶cook
前端js上傳文件後端C#接收文件
rec anon res owa markdown 接收 post filename ted 本文粗略的講下前端文件上傳和後端文件接收的原理 前端代碼 html <form onsubmit="uploadFile(event)"> <inp
前端imageBuffer設置圖片src(後端到前端直傳buffer)
本質 string += array 前端 arr mage 設置圖 toa 本質為buffer轉base64 let bytes = new Uint8Array(imageBuffer.data); let data = ""; let len = bytes.byte
PHP PC端微信掃碼支付【模式二】詳細教程-附帶源碼(轉)
idt class pid 方法 按鈕 -c 商戶 開源 玩意兒 博主寫這破玩意兒的時候花了大概快兩天時間才整體的弄懂邏輯,考慮了一下~還是把所有代碼都放出來給大家~抱著開源大無私的精神!誰叫我擅長拍黃片呢?同時也感謝我剛入行時候那些無私幫過我的程序員們! 首先還是
前端入門教程(五)CSS樣式初見
閃爍 set key 缺陷 cad -c 入門教程 clas 需要 一 什麽是CSS CSS全稱Cascading Style Sheet層疊樣式表,是專用用來為HTML標簽添加樣式的。 樣式指的是HTML標簽的顯示效果,比如換行、寬高、顏色等等 層疊屬於CSS的三大
shop--11.前端展示系統--店鋪列表(後端)
ima mod col lmap eat time false ans rom 按照頁面原型設計 點擊全部商店後加載一級商鋪列表,加載對應的數據 點擊特定的一級商鋪列表,加載對應商鋪列表下的數據 區域顯示全部區域 店鋪列表頁面需要支持
shop--11.前端展示系統--店鋪詳情(後端)
agen ddr .data lin 父類 body 不能 color header 大多與店鋪列表展示頁面相同 shopdetail.html <!DOCTYPE html> <html> <head> &l