從零開(kāi)始搭建項(xiàng)目锥惋,沒(méi)有好用的腳手架怎么行!最近發(fā)現(xiàn)一款高顏值的前后端分離腳手架
sa-plus
臣嚣,自帶代碼生成器净刮,可一鍵生成前端剥哑、后端硅则、API文檔代碼,推薦給大家株婴!
sa-plus簡(jiǎn)介
一款基于SpringBoot的快速開(kāi)發(fā)框架怎虫,內(nèi)置代碼生成器。
項(xiàng)目特點(diǎn):
- 集成常用開(kāi)發(fā)功能困介,包括文件上傳大审、角色授權(quán)、全局異常處理座哩、Redis控制臺(tái)徒扶、API日志統(tǒng)計(jì)等。
- 內(nèi)置代碼生成器根穷,高自動(dòng)化代碼生成姜骡,可一鍵生成后端、前端和API文檔代碼屿良。
- 通過(guò)給表添加注釋來(lái)生成代碼圈澈,數(shù)據(jù)庫(kù)表建好了,項(xiàng)目也就開(kāi)發(fā)一半了尘惧。
項(xiàng)目架構(gòu)
sa-plus
前后端使用的技術(shù)棧還是非常主流的康栈,下面我們來(lái)看下。
使用技術(shù)棧
- 后端技術(shù)棧:MySql 5.7喷橙、SpringBoot啥么、Mybatis-Plus、Druid贰逾、PageHelper悬荣、Redis、Sa-Token似踱、Lombok隅熙、Hutool稽煤、FastJson
- 前端技術(shù)棧:Vue、Element-Ui囚戚、WangEditor酵熙、Jquery、Layer驰坊、Swiper匾二、Echarts
模塊介紹
- sp-server:SpringBoot后端代碼。
- sp-admin:Vue管理系統(tǒng)前端代碼拳芙。
- sp-apidoc:Docsify API接口文檔代碼察藐。
- sp-generate:代碼生成器,可生成后端舟扎、前端分飞、API文檔。
- sp-devdoc:sa-plus本地文檔睹限。
- doc:其它文件譬猫,存放SQL腳本。
快速開(kāi)始
sp-server
羡疗、sp-admin
染服、sp-apidoc
為sa-plus的主要項(xiàng)目模塊,我們先把它們啟動(dòng)起來(lái)叨恨。
sp-server
- 先在MySql中創(chuàng)建
sp-dev
數(shù)據(jù)庫(kù)柳刮,導(dǎo)入項(xiàng)目doc
目錄下的sa-plus.sql
腳本,導(dǎo)入成功后將生成如下表痒钝;image.png - 將
sp-server
模塊導(dǎo)入到IDEA中秉颗,導(dǎo)入成功后項(xiàng)目結(jié)構(gòu)如下;image.png - 修改項(xiàng)目的配置文件
application-dev.yml
午乓,將MySql和Redis配置修改為你自己的連接配置站宗;
spring:
# 數(shù)據(jù)源配置
datasource:
type: com.alibaba.druid.pool.DruidDataSource
url: jdbc:mysql://127.0.0.1:3306/sp-dev?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC
username: root
password: root
# redis配置
redis:
# Redis數(shù)據(jù)庫(kù)索引(默認(rèn)為0)
database: 1
# Redis服務(wù)器地址
host: 127.0.0.1
# Redis服務(wù)器連接端口
port: 6379
# Redis服務(wù)器連接密碼(默認(rèn)為空)
# password:
# 連接超時(shí)時(shí)間(毫秒)
timeout: 5000ms
- 運(yùn)行啟動(dòng)類
SpServerApplication
的main
方向,至此后端服務(wù)啟動(dòng)成功益愈。
2021-08-09 16:46:00.478 INFO --> Initializing ExecutorService 'applicationTaskExecutor'
____ ____ ___ ____ _ _ ____ _ _
[__ |__| __ | | | |_/ |___ |\ |
___] | | | |__| | \_ |___ | \|
DevDoc:http://sa-token.dev33.cn (v1.24.0)
GitHub:https://github.com/dromara/sa-token
2021-08-09 16:46:00.744 INFO --> Initializing ExecutorService 'taskScheduler'
2021-08-09 16:46:00.778 INFO --> Starting ProtocolHandler ["http-nio-8099"]
2021-08-09 16:46:00.792 INFO --> Tomcat started on port(s): 8099 (http) with context path ''
2021-08-09 16:46:00.802 INFO --> Started SpServerApplication in 3.871 seconds (JVM running for 4.797)
------------- sa-plus (dev) 啟動(dòng)成功 --by 2021-08-09 16:46:00 -------------
sp-admin
-
將
sp-admin
模塊導(dǎo)入到IDEA中梢灭,導(dǎo)入成功后項(xiàng)目結(jié)構(gòu)如下;image.png -
打開(kāi)
index.html
頁(yè)面蒸其,點(diǎn)擊右上角按鈕運(yùn)行到瀏覽器即可敏释;image.png -
使用默認(rèn)賬號(hào)密碼登錄后,即可訪問(wèn)
sa-plus
的首頁(yè)摸袁,界面還是挺炫酷的钥顽;image.png -
我們可以稍稍體驗(yàn)下
sa-plus
的基礎(chǔ)功能,比如Redis控制臺(tái)
功能靠汁,可以查看Redis狀態(tài)和管理Redis中的數(shù)據(jù)蜂大;
image.png -
還有
API請(qǐng)求日志
功能闽铐,可以查看API請(qǐng)求記錄和請(qǐng)求耗時(shí);image.png -
還有權(quán)限管理中的
角色管理
功能奶浦,可以創(chuàng)建角色并給角色分配權(quán)限兄墅;image.png -
還有權(quán)限管理中的
菜單管理
,其實(shí)我們可以發(fā)現(xiàn)sa-plus
中的菜單和權(quán)限是綁定在一起的澳叉,而菜單是從前端的路由中獲取的隙咸,給角色分配了菜單即分配了菜單下的權(quán)限,這樣做的話想做到接口級(jí)權(quán)限就比較麻煩了成洗;image.png -
還有權(quán)限管理中的
用戶管理
五督,可以管理用戶信息。image.png
sp-apidoc -
將
sp-apidoc
模塊導(dǎo)入到IDEA中瓶殃,導(dǎo)入成功后項(xiàng)目結(jié)構(gòu)如下充包;image.png -
打開(kāi)
index.html
頁(yè)面,點(diǎn)擊右上角按鈕運(yùn)行到瀏覽器即可碌燕,此時(shí)我們可以發(fā)現(xiàn)API文檔中還沒(méi)有任何內(nèi)容误证。image.png
代碼生成器
使用代碼生成器继薛,可以根據(jù)數(shù)據(jù)庫(kù)表直接生成前端修壕、后端及API文檔代碼,讓我們來(lái)體驗(yàn)下它有何神奇之處遏考。
- 將
sp-generate
模塊導(dǎo)入到IDEA中慈鸠,導(dǎo)入成功后項(xiàng)目結(jié)構(gòu)如下;image.png - 然后往MySql中導(dǎo)入測(cè)試數(shù)據(jù)灌具,導(dǎo)入項(xiàng)目
doc
目錄下的test-data.sql
腳本青团,導(dǎo)入成功后新增如下表;image.png - 接下來(lái)修改
SpGenerateApplication
中的MySql連接配置和代碼生成目錄配置咖楣;
@SqlFlySetup
@SpringBootApplication
public class SpGenerateApplication {
// 直接運(yùn)行代碼生成器
public static void main(String[] args) {
// 啟動(dòng)springboot
SpringApplication.run(SpGenerateApplication.class, args);
// =================================== 設(shè)置連接信息 ===================================
FlyConfig config = new FlyConfig();
config.setDriverClassName("com.mysql.jdbc.Driver");
config.setUrl("jdbc:mysql://127.0.0.1:3306/sp-dev?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=UTC");
config.setUsername("root");
config.setPassword("root");
config.setPrintSql(true); // 是否打印sql
FlyObjects.setConfig(config); // 注入到框架中
// =================================== 一些全局設(shè)置 ===================================
GenCfgManager.cfg
.setProjectPath("D:/developer/demo/sa-plus/") // 總項(xiàng)目地址 (生成代碼的路徑)
.setServerProjectName("sp-server") // 服務(wù)端 - 項(xiàng)目名稱
// .setServerProjectName("sp-com/sp-core") // 服務(wù)端 - 項(xiàng)目名稱 (sp-com多模塊版填此格式)
.setCodePath("src/main/java/") // 服務(wù)端代碼 - 存放路徑
.setPackagePath("com.pj.project") // 服務(wù)端代碼 - 總包名
.setPackage_utils("com.pj.utils.sg.*") // 服務(wù)端代碼 - util類包地址
.setAuthor("macrozheng"); // 服務(wù)端代碼 - 代碼作者
}
}
- 然后運(yùn)行啟動(dòng)類
SpGenerateApplication
的main
方法生成代碼督笆,運(yùn)行成功后,sp-server
的project
包下會(huì)生成后端代碼诱贿;image.png -
sp-admin
的sa-html
目錄下會(huì)生成前端代碼娃肿,還會(huì)在menu-list.js
中追加菜單信息;image.png -
sp-apidoc
的project
目錄也下會(huì)生成API文檔代碼珠十;image.png -
重新運(yùn)行前后端代碼后料扰,我們暫時(shí)還無(wú)法看到新增的菜單,還需要給角色分配權(quán)限才可以查看焙蹭;image.png
-
之后我們可以看到晒杈,對(duì)于商品表來(lái)說(shuō),列表頁(yè)面和添加頁(yè)面已經(jīng)給我們生成好了孔厉;image.png
- 其實(shí)
sa-plus
是通過(guò)解析數(shù)據(jù)庫(kù)表中的注釋來(lái)生成代碼的拯钻,我們可以看下商品表的SQL語(yǔ)句帖努,其中有很多包含[]
的注釋,sa-plus
就是根據(jù)這些規(guī)則來(lái)生成代碼的粪般;
CREATE TABLE `ser_goods` (
`id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '記錄id [num no-add]',
`name` varchar(200) DEFAULT NULL COMMENT '商品名稱 [text j=like]',
`avatar` varchar(512) DEFAULT NULL COMMENT '商品頭像 [img]',
`image_list` varchar(2048) DEFAULT NULL COMMENT '輪播圖片 [img-list]',
`content` text COMMENT '圖文介紹 [f]',
`money` int(11) DEFAULT '0' COMMENT '商品價(jià)格 [num]',
`type_id` bigint(20) DEFAULT NULL COMMENT '所屬分類 [num]',
`stock_count` int(11) DEFAULT '0' COMMENT '剩余庫(kù)存 [num]',
`status` int(11) DEFAULT '1' COMMENT '商品狀態(tài) (1=上架,2=下架) [j]',
`create_time` datetime DEFAULT NULL COMMENT '創(chuàng)建日期 [date-create]',
`update_time` datetime DEFAULT NULL COMMENT '更新日期 [date-update]',
PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=1005 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT COMMENT='商品表\n[table icon=el-icon-a
-
這里的規(guī)則比較多然磷,大家可以自行對(duì)照下表查看;image.png
-
最后我們?cè)賮?lái)看下已經(jīng)生成好的API文檔刊驴,商品表的CRUD接口文檔都有了姿搜,非常詳細(xì);image.png
-
而且API文檔中還提供了接口測(cè)試功能捆憎,是不是很貼心舅柜!image.png
總結(jié)
通過(guò)上面的一波實(shí)踐,我們可以發(fā)現(xiàn)sa-plus確實(shí)是個(gè)有意思的框架躲惰。不僅提供了項(xiàng)目的基礎(chǔ)功能致份,還提供了代碼生成器,可以一鍵生成前后端及API文檔代碼础拨,大大提高了開(kāi)發(fā)效率氮块。但是沒(méi)有一種代碼生成器是萬(wàn)能的,復(fù)雜的代碼還是需要手寫(xiě)诡宗。sa-plus的權(quán)限功能把菜單和權(quán)限綁定在了一起滔蝉,使用起來(lái)不太靈活,還是可以改進(jìn)下的塔沃。
參考資料
官方文檔:http://sa-plus.dev33.cn/
項(xiàng)目地址
https://gitee.com/click33/sa-plus