簡介
QBasic快速開發(fā)框架,Q是Quick的縮寫,QBasic就是快速基礎之意。QBasic的開發(fā)初衷是為開發(fā)人員提供一款小而美,輕量而又靈活的項目腳手架。QBasic對目前主流的一些前后端框架做了整合,提供了一個軟件項目必須要有的身份驗證、權限校驗、日志、緩存、全局異常處理、API接口文檔等基礎功能。來新項目了,開發(fā)人員不必再從頭開發(fā)這些基礎功能,直接從業(yè)務功能開始開發(fā),減少了大量的重復性工作。
開發(fā)原則
- 編碼規(guī)范
- 遵循阿里巴巴Java開發(fā)手冊。
- 前后端職責分離
- 后端代碼中沒有任何HTML代碼,視圖層不包含任何后端業(yè)務邏輯代碼。
- 前端視圖層又做了職責分離,采用MVVM模式,將視圖UI和業(yè)務邏輯分開。
- 輕量
- 數(shù)據(jù)庫只有最基礎的表和字段。
- 框架只實現(xiàn)了最基礎的功能。
- 功能頁面前端只引用了Vue,jQuery,Element UI框架。
- 代碼簡潔
- Controller層沒有異常捕獲,權限驗證,請求參數(shù)檢驗,業(yè)務日志代碼,統(tǒng)一交給Aop切面處理,Controller層只有業(yè)務邏輯代碼。
- 使用Java8新特性lambda表達式,stream流。
- 性能優(yōu)化
- 能在應用服務器做的事,不交給數(shù)據(jù)庫做;能在客戶端做的事,不交給應用服務器做。
- 熱點數(shù)據(jù)做緩存,如用戶身份信息,權限列表做了緩存。
- Bootstrap模板AdminLTE的CSS和JS代碼做了深度精簡,只保留了主頁框架頁面的部分,加快主頁渲染速度。
技術選型
1、后端
- Java8:lambda表達式、stream流、optional可空類型等新特性。
- Spring Boot:內嵌式tomcat部署方便;約定大于配置,再不用繁瑣的XML配置。
- Spring+Spring MVC+Mybatis:標準的web應用三件套。
- Apache Shiro:安全框架,處理身份認證,授權,會話管理等。
- Thymeleaf:Spring官方推薦的模板引擎。
- Druid:阿里巴巴開源的高性能數(shù)據(jù)庫連接池。
- Ehcache:緩存框架。
- slf4j+logback:日志框架。
- Apache Commons Lang:常用工具包。
- fastJSON:JSON處理工具包。
- Joda-Time:日期處理工具包。
- Swagger:API接口文檔自動生成。
2、前端
- Vue+jQuery:基礎JS框架。
- Element UI:餓了嗎前端團隊開源的Vue組件庫,CSS苦手的福音。
- Bootstrap:UI框架。
- AdminLTE:Bootstrap模板。
- Font Awesome:圖標字體。
- CKEditor4:功能強大的富文本編輯器。
- moment:前端日期處理工具包。
后臺管理功能概述
- 用戶登錄/登出
- 權限校驗
- 用戶權限控制到按鈕級別
- 系統(tǒng)管理
- 用戶管理
- 角色管理
- 資源管理
- 機構管理
- 數(shù)據(jù)字典
- 系統(tǒng)配置
- 定時任務
- 數(shù)據(jù)集管理
- 運維工具
- 數(shù)據(jù)查詢
- 業(yè)務日志
- 錯誤日志
- 應用監(jiān)控
- 內容發(fā)布
- 內容管理
- 欄目管理
- 多級審核
- 全文檢索
- 文件存儲服務
- 本地磁盤
- 阿里云OSS服務
- 工作流引擎
- 流程分類
- 流程定義
- 流程配置
- 示例代碼庫
- 導出Word文檔
- 導出Excel文檔
- 全局異常處理
- 全局日志記錄
- 緩存
- 用戶身份信息
- 用戶權限信息
- Controller層用戶請求、響應參數(shù)封裝
- 用戶請求參數(shù)校驗
- 前端、后端請求參數(shù)Double Check
- 主頁框架頁
- 菜單樹
- 收縮側邊欄
- 面包屑導航
- 內容頁高度自適應
- 錯誤頁面
- 400頁面
- 401頁面
- 404頁面
- 500頁面
- 檢查當前用戶會話是否過期
- 避免出現(xiàn)點擊菜單鏈接內容頁嵌套登錄頁的情況
- 公共HTML模板頁
- API接口文檔
- 代碼生成器,生成單表的增刪改查全套代碼
接入說明
- 后臺管理站端口8000,管理員賬號:admin/123456,測試賬號:test/123456
- 后臺管理站接口文檔地址/docs,需要先登錄
- 業(yè)務日志不需要寫數(shù)據(jù)庫的API,請在Controller方法上添加DbLogIgnore注解
- RESTFUL API接口規(guī)范
請求參數(shù)示例
@ApiModel
public class EditParamReq extends BaseRequest {
@NotNull(message = "pId不能為空")
@Min(value = 1, message = "pId必須大于0")
private Integer pId;
@ApiModelProperty("字典類型")
@NotEmpty(message = "字典類型不能為空")
@Length(max = 50, message = "字典類型不能超過50個字符")
private String pType;
@ApiModelProperty("字典key")
@NotEmpty(message = "字典key不能為空")
@Length(max = 50, message = "字典key不能超過50個字符")
private String pKey;
@ApiModelProperty("字典value")
@NotEmpty(message = "字典value不能為空")
@Length(max = 50, message = "字典value不能超過50個字符")
private String pValue;
@ApiModelProperty("字典排序")
@NotNull(message = "字典排序不能為空")
@Range(min = 0, message = "字典排序不能小于0")
private Integer sort;
@ApiModelProperty("備注")
private String remark;
public Integer getpId() {
return pId;
}
public void setpId(Integer pId) {
this.pId = pId;
}
public String getpType() {
return pType;
}
public void setpType(String pType) {
this.pType = pType;
}
public String getpKey() {
return pKey;
}
public void setpKey(String pKey) {
this.pKey = pKey;
}
public String getpValue() {
return pValue;
}
public void setpValue(String pValue) {
this.pValue = pValue;
}
public Integer getSort() {
return sort;
}
public void setSort(Integer sort) {
this.sort = sort;
}
public String getRemark() {
return remark;
}
public void setRemark(String remark) {
this.remark = remark;
}
}
返回示例
{
"status": 200,
"msg":"成功",
"result": {
...
}
}
返回參數(shù)說明
| 參數(shù)名 | 類型 | 說明 |
|---|---|---|
| status | int | 響應狀態(tài)碼 |
| msg | String | 響應提示信息 |
| result | Object | 響應結果 |
status響應狀態(tài)碼說明
| 狀態(tài)碼 | 說明 |
|---|---|
| 200 | 請求成功 |
| 400 | 接口請求參數(shù)不合法,比如手機號不合法 |
| 401 | 身份校驗失敗 |
| 404 | 服務器找不到請求的API |
| 500 | 系統(tǒng)異常,操作失敗,需要客戶端做容錯處理 |