項(xiàng)目框架基礎(chǔ)架構(gòu)

一悴侵、項(xiàng)目介紹

  • 元數(shù)據(jù)系統(tǒng)管理二期拭嫁,項(xiàng)目代號(hào)xy做粤。
  • 項(xiàng)目接口測(cè)試地址:http://192.168.x.xx:8088/xy/swagger-ui.html
  • 項(xiàng)目前端頁(yè)面地址:http://192.168.x.xx:8080

二、軟件架構(gòu)

本項(xiàng)目提供后臺(tái)接口妇垢,不提供前端頁(yè)面顯示效果闯估。

基礎(chǔ)架構(gòu):

  • Maven 構(gòu)建工具
  • SpringBoot 微框架
  • RestfulApi 風(fēng)格編程
  • Mybatis 持久層框架
  • Mybatis-Plus吼和, 是Mybatis的增強(qiáng)工具纹安,在 Mybatis 的基礎(chǔ)上只做增強(qiáng)不做改變砂豌,為簡(jiǎn)化開(kāi)發(fā)厢岂、提高效率而生。
  • Swagger2阳距,是一款RESTFUL接口的文檔在線自動(dòng)生成+功能測(cè)試功能軟件塔粒。
  • Redis 緩存數(shù)據(jù)庫(kù)
  • JWT(JSON WEB Token),是一種基于JSON的筐摘、用于在網(wǎng)絡(luò)上聲明某種主張的令牌(token)卒茬。
  • Lombok船老,可以減少很多重復(fù)代碼的書(shū)寫(xiě)。比如說(shuō)getter/setter/toString等方法的編寫(xiě)圃酵。
  • Druid,是阿里巴巴開(kāi)源平臺(tái)上一個(gè)數(shù)據(jù)庫(kù)連接池實(shí)現(xiàn)郭赐,可以很好的監(jiān)控DB池連接和SQL的執(zhí)行情況薪韩,可以說(shuō)是針對(duì)監(jiān)控而生的DB連接池。

三捌锭、開(kāi)發(fā)環(huán)境

  1. 項(xiàng)目結(jié)構(gòu)


    image.png
  1. AOP自動(dòng)記錄用戶操作日志

切面類 com.kingbase.xy.config.AopAspect

 * aop切面類
 *
 * 自動(dòng)記錄系統(tǒng)增刪改查操作日志
 *
 * @Dictionary
 * 可以根據(jù)自定義注解自動(dòng)匹配返回值中的字典值
 * 
 * @ColumnMapping
 * 可以根據(jù)自定義注解自動(dòng)替換返回值中的內(nèi)容
 * 例如數(shù)據(jù)庫(kù)存儲(chǔ)用戶ID,返回結(jié)果中可以自動(dòng)轉(zhuǎn)成用戶Name
 *
 *
 *
 * 詳見(jiàn)AopAspect代碼
  1. 通用增刪改查使用示例
/**
 * 系統(tǒng)注冊(cè)表-前端控制器
 * @author ghy
 * @date 2018-06-19
 */
@Api(description= "系統(tǒng)注冊(cè)表-前端控制器")
@RestController
@RequestMapping("/system")
public class SystemController extends BaseController<System,SystemDto> {
//此類繼承BaseController后就自動(dòng)支持增刪改查功能俘陷,具體實(shí)現(xiàn)詳見(jiàn)BaseController
//System對(duì)象是數(shù)據(jù)庫(kù)T_SYSTEM對(duì)應(yīng)實(shí)體類
//SystemDto對(duì)象是和頁(yè)面交互用的專屬對(duì)象,即接收頁(yè)面?zhèn)鬟f的參數(shù)使用DTO對(duì)象观谦,向頁(yè)面?zhèn)鬟f數(shù)據(jù)時(shí)也要用DTO對(duì)象
}
  1. 業(yè)務(wù)異常處理

/**
 * 自定義業(yè)務(wù)異常枚舉類
 * @author ghy
 */
public enum ExceptionEnum {

    TWO_PASSWORD_UNEQUAL(10001, "兩次輸入的密碼不同拉盾,請(qǐng)重新輸入。"),
    INCORRECT_CREDENTIALS(10002, "用戶名密碼不匹配豁状,請(qǐng)重新輸入捉偏。"),
    ACCOUNT_EXIST(10003, "用戶已存在,請(qǐng)直接登錄替蔬。");

    //其余代碼省略
}


可以根據(jù)實(shí)際業(yè)務(wù)情況throw異常告私,例注冊(cè)用戶時(shí)兩次輸入密碼不同即拋出異常
throw ExceptionEnum.TWO_PASSWORD_UNEQUAL.getEx();

  1. Lombok常用注解
@Getter
該注解使用在類上,提供get方法承桥。

@Setter
該注解使用在類上驻粟,提供set方法。

@Data
該注解使用在類上凶异,該注解會(huì)提供getter蜀撑、setter、equals剩彬、canEqual酷麦、 * hashCode、toString方法喉恋。

@Accessors(chain = true)
該注解使用在類上沃饶,該注解使類支持鏈?zhǔn)骄幋a,例         
SystemLog log = new SystemLog();
    log.setIp(ip)
        .setUserId(ConstantsUtil.USER_ID)
        .setMethodType(type)
        .setMethodAttr(attr!=null && attr.length()>8000?"":attr)
        .setMethodDesc(methodDesc)
        .setMethodName(methodName)
        .setModelName(classDesc)
        .setMethodUrl(uri)
        .setOperTime(new Date());

@AllArgsConstructor
該注解使用在類上轻黑,該注解提供一個(gè)全參數(shù)的構(gòu)造方法糊肤,默認(rèn)不提供無(wú)參構(gòu)造。 

@NoArgsConstructor
該注解使用在類上氓鄙,該注解提供一個(gè)無(wú)參構(gòu)造

@Cleanup
該注解使用在屬性前馆揉,該注解是用來(lái)保證分配的資源被釋放,自動(dòng)調(diào)用close()方法抖拦。

@Synchronized
該注解使用在方法上升酣,給方法加上同步鎖舷暮。

Log日志注解
@CommonsLog
private static final org.apache.commons.logging.Log log = org.apache.commons.logging.LogFactory.getLog(LogExample.class);
@JBossLog
private static final org.jboss.logging.Logger log = org.jboss.logging.Logger.getLogger(LogExample.class);
@Log
private static final java.util.logging.Logger log = java.util.logging.Logger.getLogger(LogExample.class.getName());
@Log4j
private static final org.apache.log4j.Logger log = org.apache.log4j.Logger.getLogger(LogExample.class);
@Log4j2
private static final org.apache.logging.log4j.Logger log = org.apache.logging.log4j.LogManager.getLogger(LogExample.class);
@Slf4j
private static final org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(LogExample.class);
@XSlf4j
private static final org.slf4j.ext.XLogger log = org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);

僅列出常用Lombok常用注解,其余感興趣自己學(xué)習(xí)噩茄。

四下面、部署環(huán)境

環(huán)境要求:jdk1.8+

maven可以將springboot程序打包成jar包或war包

jar包

<groupId>com.kingbase.xy</groupId>
<artifactId>metadata</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

war包

<groupId>com.kingbase.xy</groupId>
<artifactId>metadata</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
  • jar包程序運(yùn)行命令 java -jar 包名
  • war包 放在Tomcat webapps下啟動(dòng)Tomcat即可

五、IDEA插件安裝

工欲善其事必先利其器

  1. IDEA設(shè)置自動(dòng)引入包資源路徑和自動(dòng)去掉無(wú)用的import


    image.png
  2. IDEA安裝jrebel熱部署插件巢墅,修改代碼自動(dòng)編譯诸狭,增加開(kāi)發(fā)效率


    image.png
  1. IDEA安裝lombok插件,開(kāi)發(fā)工具必須裝lombok插件否則編譯不通過(guò)
    同上搜索Lombok plugin
  1. IDEA安裝阿里巴巴Java編碼指南插件支持
    同上搜索Alibaba Java Coding Guidelines

常用校驗(yàn)注解

空檢查
@Null       驗(yàn)證對(duì)象是否為null
@NotNull      驗(yàn)證對(duì)象是否不為null, 無(wú)法查檢長(zhǎng)度為0的字符串
@NotBlank 檢查約束字符串是不是Null還有被Trim的長(zhǎng)度是否大于0,只對(duì)字符串,且會(huì)去掉前后空格.
@NotEmpty 檢查約束元素是否為NULL或者是EMPTY.

Booelan檢查
@AssertTrue     驗(yàn)證 Boolean 對(duì)象是否為 true  
@AssertFalse    驗(yàn)證 Boolean 對(duì)象是否為 false  

長(zhǎng)度檢查
@Size(min=, max=) 驗(yàn)證對(duì)象(Array,Collection,Map,String)長(zhǎng)度是否在給定的范圍之內(nèi)  
@Length(min=, max=) 
驗(yàn)證字符串的長(zhǎng)度是否在給定的范圍之內(nèi)君纫,包含兩端

日期檢查
@Past        驗(yàn)證 Date 和 Calendar 對(duì)象是否在當(dāng)前時(shí)間之前  
@Future     驗(yàn)證 Date 和 Calendar 對(duì)象是否在當(dāng)前時(shí)間之后  
@Pattern    驗(yàn)證 String 對(duì)象是否符合正則表達(dá)式的規(guī)則

數(shù)值檢查:建議使用在Stirng,Integer類型驯遇,不建議使用在int類型上,因?yàn)楸韱沃禐椤啊睍r(shí)無(wú)法轉(zhuǎn)換為int蓄髓,但可以轉(zhuǎn)換為Stirng為"",Integer為null
@Min            驗(yàn)證 Number 和 String 對(duì)象是否大等于指定的值  
@Max            驗(yàn)證 Number 和 String 對(duì)象是否小等于指定的值  
@DecimalMax 被標(biāo)注的值必須不大于約束中指定的最大值. 這個(gè)約束的參數(shù)是一個(gè)通過(guò)BigDecimal定義的最大值的字符串表示.小數(shù)存在精度
@DecimalMin 被標(biāo)注的值必須不小于約束中指定的最小值. 這個(gè)約束的參數(shù)是一個(gè)通過(guò)BigDecimal定義的最小值的字符串表示.小數(shù)存在精度
@Digits     驗(yàn)證 Number 和 String 的構(gòu)成是否合法  
@Digits(integer=,fraction=) 驗(yàn)證字符串是否是符合指定格式的數(shù)字叉庐,interger指定整數(shù)精度,fraction指定小數(shù)精度会喝。

@Range(min=, max=) Checks whether the annotated value lies between (inclusive) the specified minimum and maximum.
@Range(min=10000,max=50000,message="range.bean.wage")
private BigDecimal wage;
@Valid遞歸的對(duì)關(guān)聯(lián)對(duì)象進(jìn)行校驗(yàn), 如果關(guān)聯(lián)對(duì)象是個(gè)集合或者數(shù)組,那么對(duì)其中的元素進(jìn)行遞歸校驗(yàn),如果是一個(gè)map,則對(duì)其中的值部分進(jìn)行校驗(yàn).(是否進(jìn)行遞歸驗(yàn)證)
@CreditCardNumber信用卡驗(yàn)證
@Email 驗(yàn)證是否是郵件地址陡叠,如果為null,不進(jìn)行驗(yàn)證,算通過(guò)驗(yàn)證肢执。
@ScriptAssert(lang= ,script=, alias=)
@URL(protocol=,host=, port=,regexp=, flags=)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末枉阵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子预茄,更是在濱河造成了極大的恐慌兴溜,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件耻陕,死亡現(xiàn)場(chǎng)離奇詭異拙徽,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)诗宣,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)膘怕,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人召庞,你說(shuō)我怎么就攤上這事岛心。” “怎么了篮灼?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵布讹,是天一觀的道長(zhǎng)京革。 經(jīng)常有香客問(wèn)我凫海,道長(zhǎng)化焕,這世上最難降的妖魔是什么宾符? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮蒸绩,結(jié)果婚禮上祭钉,老公的妹妹穿的比我還像新娘。我一直安慰自己它改,他們只是感情好疤孕,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著央拖,像睡著了一般祭阀。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上鲜戒,一...
    開(kāi)封第一講書(shū)人閱讀 51,287評(píng)論 1 301
  • 那天专控,我揣著相機(jī)與錄音,去河邊找鬼遏餐。 笑死伦腐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的失都。 我是一名探鬼主播柏蘑,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼粹庞!你這毒婦竟也來(lái)了咳焚?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤庞溜,失蹤者是張志新(化名)和其女友劉穎革半,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體强缘,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡督惰,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了旅掂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赏胚。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖商虐,靈堂內(nèi)的尸體忽然破棺而出觉阅,到底是詐尸還是另有隱情,我是刑警寧澤秘车,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布典勇,位于F島的核電站,受9級(jí)特大地震影響叮趴,放射性物質(zhì)發(fā)生泄漏割笙。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望伤溉。 院中可真熱鬧般码,春花似錦、人聲如沸乱顾。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)走净。三九已至券时,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間伏伯,已是汗流浹背橘洞。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留舵鳞,地道東北人震檩。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像蜓堕,于是被迫代替她去往敵國(guó)和親抛虏。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354

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

  • Spring Boot 參考指南 介紹 轉(zhuǎn)載自:https://www.gitbook.com/book/qbgb...
    毛宇鵬閱讀 46,808評(píng)論 6 342
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,098評(píng)論 25 707
  • 從0到1構(gòu)建一個(gè)spring boot + mybatis的項(xiàng)目 前言:為什么選擇spring boot套才?或許對(duì)于...
    第三只筷子閱讀 3,437評(píng)論 1 27
  • 受社會(huì)上有關(guān)于兒童走失迂猴、兒童被搶等等新聞的影響,在今天之前從來(lái)不敢讓兒子自己一人呆在家里背伴,不敢讓他獨(dú)自出...
    sunflower80閱讀 280評(píng)論 0 0
  • 當(dāng)你老了 皺紋爬滿額頭 青春的色彩也不愿 在你的臉上停留 被時(shí)間風(fēng)干的雙手 掩不住渾濁的雙眸 多少人 在替你懷念過(guò)...
    燕語(yǔ)南天閱讀 139評(píng)論 0 0