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

一、項目介紹

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

二、軟件架構(gòu)

本項目提供后臺接口,不提供前端頁面顯示效果。

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

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

三、開發(fā)環(huán)境

  • JDK1.8以上 點擊下載
  • 開發(fā)工具IDEA 點擊下載
  • 代碼版本控工具是敏捷開發(fā)RTC內(nèi)置版本控制器
  1. 項目結(jié)構(gòu)


    image.png
  1. AOP自動記錄用戶操作日志

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

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

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

    TWO_PASSWORD_UNEQUAL(10001, "兩次輸入的密碼不同,請重新輸入。"),
    INCORRECT_CREDENTIALS(10002, "用戶名密碼不匹配,請重新輸入。"),
    ACCOUNT_EXIST(10003, "用戶已存在,請直接登錄。");

    //其余代碼省略
}


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

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

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

@Data
該注解使用在類上,該注解會提供getter、setter、equals、canEqual、 * hashCode、toString方法。

@Accessors(chain = true)
該注解使用在類上,該注解使類支持鏈式編碼,例         
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
該注解使用在類上,該注解提供一個全參數(shù)的構(gòu)造方法,默認不提供無參構(gòu)造。 

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

@Cleanup
該注解使用在屬性前,該注解是用來保證分配的資源被釋放,自動調(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包程序運行命令 java -jar 包名
  • war包 放在Tomcat webapps下啟動Tomcat即可

五、IDEA插件安裝

工欲善其事必先利其器

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


    image.png
  2. IDEA安裝jrebel熱部署插件,修改代碼自動編譯,增加開發(fā)效率


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

常用校驗注解

空檢查
@Null       驗證對象是否為null
@NotNull      驗證對象是否不為null, 無法查檢長度為0的字符串
@NotBlank 檢查約束字符串是不是Null還有被Trim的長度是否大于0,只對字符串,且會去掉前后空格.
@NotEmpty 檢查約束元素是否為NULL或者是EMPTY.

Booelan檢查
@AssertTrue     驗證 Boolean 對象是否為 true  
@AssertFalse    驗證 Boolean 對象是否為 false  

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

日期檢查
@Past        驗證 Date 和 Calendar 對象是否在當前時間之前  
@Future     驗證 Date 和 Calendar 對象是否在當前時間之后  
@Pattern    驗證 String 對象是否符合正則表達式的規(guī)則

數(shù)值檢查:建議使用在Stirng,Integer類型,不建議使用在int類型上,因為表單值為“”時無法轉(zhuǎn)換為int,但可以轉(zhuǎn)換為Stirng為"",Integer為null
@Min            驗證 Number 和 String 對象是否大等于指定的值  
@Max            驗證 Number 和 String 對象是否小等于指定的值  
@DecimalMax 被標注的值必須不大于約束中指定的最大值. 這個約束的參數(shù)是一個通過BigDecimal定義的最大值的字符串表示.小數(shù)存在精度
@DecimalMin 被標注的值必須不小于約束中指定的最小值. 這個約束的參數(shù)是一個通過BigDecimal定義的最小值的字符串表示.小數(shù)存在精度
@Digits     驗證 Number 和 String 的構(gòu)成是否合法  
@Digits(integer=,fraction=) 驗證字符串是否是符合指定格式的數(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遞歸的對關(guān)聯(lián)對象進行校驗, 如果關(guān)聯(lián)對象是個集合或者數(shù)組,那么對其中的元素進行遞歸校驗,如果是一個map,則對其中的值部分進行校驗.(是否進行遞歸驗證)
@CreditCardNumber信用卡驗證
@Email 驗證是否是郵件地址,如果為null,不進行驗證,算通過驗證。
@ScriptAssert(lang= ,script=, alias=)
@URL(protocol=,host=, port=,regexp=, flags=)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容