前言
轉(zhuǎn)眼又過去了兩個(gè)多月,時(shí)間就像一個(gè)隱形的精靈,總是在不經(jīng)意間從眼皮底下溜走,不知不覺已經(jīng)8月底了,金九銀十近在眼前,不知道小伙伴們有沒有跳槽的打算呢?相信此時(shí)你的心中已經(jīng)有了自己的答案。閑言少敘,經(jīng)過周末加上今天上午的趕工,終于把代碼生成器更新了一版,這次更新雖然在界面上只是加了一個(gè)添加權(quán)限管理的radio,但背后的工作卻一點(diǎn)不少,先讓我們一起來看一下效果吧。
實(shí)現(xiàn)效果
推薦大家通過idea插件的方式來使用代碼生成器,不容易出現(xiàn)問題。因?yàn)閑xe是我用ikvm把Java代碼編譯成dll,然后使用visual studio生成的,所以在個(gè)別的操作系統(tǒng)中會出現(xiàn)閃退等奇奇怪怪的現(xiàn)象,大概是因?yàn)橄到y(tǒng)缺少某個(gè)組件庫導(dǎo)致的,另外使用的時(shí)候360可能會誤報(bào),允許操作即可。
首先打開代碼生成器:


配置好數(shù)據(jù)庫信息,選擇添加權(quán)限管理選項(xiàng),使用權(quán)限管理功能會在配置的數(shù)據(jù)庫中建立下圖中的六張表,所以數(shù)據(jù)庫的用戶需要具備建表權(quán)限才可正常使用,否則生成后的代碼會不可用:

數(shù)據(jù)表配置,在這里我們寫一下表名,到時(shí)候默認(rèn)會生成跟表名一樣的菜單名:

回到主界面,點(diǎn)擊生成,稍等片刻,生成完畢(生成過程中如果之前已經(jīng)生成過權(quán)限相關(guān)表會提示已經(jīng)有相關(guān)表,是否重建,根據(jù)自身需求選擇是否即可):

導(dǎo)入生成后的項(xiàng)目到idea,啟動(dòng)生成后的項(xiàng)目,啟動(dòng)成功:

訪問http://localhost:8080/authtest/login,初始用戶名admin,密碼123456。
如下圖,已經(jīng)生成了系統(tǒng)管理模塊和測試表模塊,菜單管理用來維護(hù)菜單,菜單可以拖拽進(jìn)行排序等操作,角色管理可以設(shè)置不同角色顯示的菜單和按鈕:


在這里我們測試一下,去掉當(dāng)前用戶的測試表模塊信息管理菜單的刪除權(quán)限:

設(shè)置完之后,刷新當(dāng)前瀏覽器頁面(現(xiàn)在設(shè)置完權(quán)限后需要刷新頁面才可生效),點(diǎn)擊測試表的信息管理菜單,可以發(fā)現(xiàn)刪除按鈕已經(jīng)不見了:

然后我們再把刪除權(quán)限恢復(fù),刷新瀏覽器頁面,刪除按鈕重現(xiàn):


至此,我們已經(jīng)成功生成了一套較為完善的帶有權(quán)限管理功能的后臺管理系統(tǒng)!
實(shí)現(xiàn)原理
實(shí)現(xiàn)原理其實(shí)比較簡單,cm_sys_role表存儲角色相關(guān)信息,cm_sys_user表存儲用戶的相關(guān)信息,每個(gè)用戶都擁有自己的角色,cm_sys_menu和cm_sys_button分別存儲菜單和按鈕信息,cm_sys_role_menu和cm_sys_role_button來存儲角色對于角色和按鈕的分配關(guān)系,這樣通過當(dāng)前用戶的角色id便可以查詢到自己擁有的菜單和按鈕,實(shí)現(xiàn)頁面上的動(dòng)態(tài)顯示,按鈕主要是通過頁面上的元素id來進(jìn)行控制,其實(shí)只要是頁面上的元素,都可以配置好之后進(jìn)行顯示上的控制。
生成的邏輯則稍微復(fù)雜一些,生成代碼屬于逆向思維,首先需要生成所需的基本的六張表,插入初始化數(shù)據(jù),然后根據(jù)用戶配置的數(shù)據(jù)表信息來插入菜單和按鈕數(shù)據(jù),準(zhǔn)備工作完畢之后,需要花大精力來處理生成模板,同時(shí)還涉及到之前生成邏輯的兼容,模板修改完畢后,再根據(jù)模板編寫具體的生成代碼。本次更新我對生成代碼的核心方法做了進(jìn)一步的公共方法抽取,縮小了代碼體積,之前的代碼太過冗長,寫起來比較崩潰,現(xiàn)在舒服了很多,感興趣的朋友可以去自行閱讀源碼,代碼寫完后便是各方面的測試,測試完畢后再進(jìn)行線上的包發(fā)布,發(fā)布完之后,當(dāng)用戶打開軟件的時(shí)候便可以在線獲取更新,體驗(yàn)全新的功能,大體流程就是這樣,其實(shí)每次新版本發(fā)布之后都會有一些bug出現(xiàn),就在我寫這篇文章的時(shí)候,截圖的過程中還發(fā)現(xiàn)并修復(fù)了倆bug。。。
結(jié)語
其實(shí)任何一個(gè)在互聯(lián)網(wǎng)上線并且被大眾使用的開源軟件,能長期運(yùn)營下去都是不容易的,畢竟只是利用業(yè)余時(shí)間來開發(fā)維護(hù),而且沒有多少回報(bào),代碼生成器上線的這一年多來,每天都有人關(guān)注并且使用,我對此還是很感動(dòng)的,也許這就是我保持更新的動(dòng)力所在吧,工作的忙碌,生活的負(fù)擔(dān),壓的我們每天喘不過氣來,逐漸變得彷徨迷茫,但作為程序員的我們還是要堅(jiān)持學(xué)習(xí),每天進(jìn)步一點(diǎn),這樣不至于上了年紀(jì)被淘汰掉,我現(xiàn)在馬上27了,雖然正值壯年,但卻感覺以前的那股沖勁正在越來越淡,也許這就是所謂的老了吧,哈哈哈,時(shí)代永遠(yuǎn)是屬于年輕人的,雖然我們都在逐漸退出歷史舞臺,但能在退場之前留下屬于自己的一絲光亮也就無憾了。
金九銀十招聘季也近在咫尺,人挪活,換一個(gè)環(huán)境,也許恰巧是心之所向,當(dāng)然我不是鼓勵(lì)大家跳槽,通過面試了解行業(yè)走向,主流技術(shù)以及自己的市場價(jià)位是比較直接的方式,這對自己以后的職業(yè)發(fā)展大有裨益。最后,祝大家都能有所突破,早日實(shí)現(xiàn)自己的職業(yè)理想!
關(guān)注我的公眾號 螺旋編程極客,可獲取最新版代碼生成器及其源碼,同時(shí)定期分享專業(yè)知識福利,期待你的到來!