当前位置: 首页 > 后端技术 > Java

整个小东西,PO,DAO,Mapper

时间:2023-04-02 01:26:57 Java

鍦↖DEA涓嚜鍔ㄧ敓鎴愪綔鑰咃細浠樺摜鍗氬锛歨ttps://bugstack.cn婧愮爜锛歨ttps://github.com/fuzhengwei/CodeGuide/wiki娌夋穩锛屽垎浜紝鎴愰暱锛岃浣犲拰鍏朵粬浜洪兘鑳芥湁鎵€鏀惰幏锛侌煒?.鍓嶈█鍙互鐢紝鐏垫椿杩愮敤锛佷竴浠朵簨鎯呮湁濂藉嚑濂楋紝閮芥槸涓轰簡鎺ㄥ箍鑰屽仛鐨勩€傛嬁鍒版垚缁╁氨寰楄窇锛屼互鍚庡厔寮熶滑鍐嶅缓锛佸嚑骞村墠锛屽ぇ瀹惰繕涓嶆槸杩欐牱銆傞偅鏃跺€欒繕鏈夊緢澶氬彲浠ュ垱鏂扮殑涓滆タ銆備贡涓栬嫳闆勬€昏兘鏈濅竴涓柟鍚戜慨鐐硷紝鍋氬嚭涓€绯诲垪濂界敤鐨勪骇鍝佸姛鑳姐€佹鏋舵湇鍔°€佹妧鏈粍浠剁瓑銆備絾鍚庢潵杩欑鎯呭喌浼间箮寮€濮嬪噺灏戯紝鍙栬€屼唬涔嬬殑鏄噸澶嶃€佹妱琚€佹妱琚紝鍙樻垚浜嗕竴涓柊鐨偆锛屾柊椋庢牸锛屾柊鍚嶅瓧銆傛湁鏃跺€欎竴涓叕鍙告垨鑰呬竴涓粍缁囧氨鍍忎竴涓锛屽彧鏄閲岀殑涓滆タ涓€鑸兘鏄潖浜嗚淇紝鍧忎簡杩樺彲浠ユ崲銆備絾鏄病鏈変汉鏈夊崼鐢熼棿鏈夐┈妗讹紝鍘ㄦ埧鏈夐┈妗讹紝瀹㈠巺鏈夐┈妗讹紝鍗у鏈夐┈妗躲€傛槸鐨勶紝铏界劧浣犵殑鏂伴┈妗跺彲浠ヨ嚜鍔ㄥ柗姘淬€傚洜姝わ紝鍦ㄦ瀯寤哄ソ鐨勪骇鍝佸姛鑳芥椂锛屽敖閲忓€熼壌閭d簺宸茬粡寰堜紭绉€鐨勪骇鍝侊紝姣斿IDEA銆丟itHub銆丮ysql绛夈€侷DEA鎻愪緵浜嗘弧瓒崇敤鎴锋墿灞曞姛鑳界殑鎻掍欢寮€鍙戯紝鑰屼笉鏄綘璇存垜涓嶄細鐨勪笢瑗裤€傛病鏈夛紝浣犺嚜宸卞仛銆傚叡寤轰細璁╄繖浠朵簨鍙樺緱鏇村ソ锛?.闇€姹傜洰鐨勫湪涓婁竴绔犱腑锛屾垜浠墿灞曚簡椤圭洰鍒涘缓鍚戝锛屽鍔犱簡鎴戜滑鍒涘缓DDD椤圭洰鑴氭墜鏋舵墍闇€鐨勬楠わ紝鏈€缁堟彁渚涗簡涓€涓狣DD寮€鍙戞鏋躲€傞偅涔堬紝鍦ㄨ繖涓狣DD椤圭洰寮€鍙戞鏋朵腑锛岃繕缂哄皯鏍规嵁鏁版嵁搴撹〃淇℃伅鑷姩鐢熸垚鐩稿簲鐨凱O銆丏AO銆丮apper鏂囦欢鐨勫姛鑳姐€傞偅涔堝湪鏈珷涓紝鎴戜滑灏嗗湪椤圭洰涓睍寮€杩欓儴鍒嗗唴瀹广€傚疄闄呰繍琛屾晥鏋滄槸鎴戜滑鍙互鍦ㄩ」鐩笂鐢ㄩ紶鏍囧彸閿皟鍑烘坊鍔燨RM浠g爜鍧楃殑绐椾綋銆傞€氳繃閫夋嫨搴撹〃锛屼娇鐢╢reemarker鑷姩鐢熸垚浠g爜銆傚湪鐢熸垚鐨勪唬鐮佸潡涓紝闇€瑕佸鍏ユ墍闇€鐨勫寘锛屽苟浣跨敤lombok娉ㄨВ鏇夸唬PO瀵硅薄涓殑get鍜宻et鏂规硶锛屽噺灏戜唬鐮侀€昏緫鐨勫垱寤恒€備笁銆佹渚嬪紑鍙?銆侀」鐩粨鏋刧uide-idea-plugin-orm鈹溾攢鈹€.gradle鈹斺攢鈹€src鈹溾攢鈹€main鈹傗敂鈹€鈹€java鈹傗敂鈹€鈹€cn.bugstack.guide.idea.plugin鈹傗敎鈹€鈹€鍔ㄤ綔鈹傗攤鈹斺攢鈹€CodeGenerateAction.java鈹傗敎鈹€鈹€domain鈹傗敎鈹€鈹€model.vo鈹傗攤鈹傗敎鈹€鈹€CodeGenContextVO.java鈹傗攤鈹傗敂鈹€鈹€ORMConfigVO.java鈹傗攤鈹斺攢鈹€鏈嶅姟鈹傗攤鈹傗攢鈹€impl鈹傗攤鈹傗敂鈹€鈹€ProjectGeneratorImpl.java鈹傗敎鈹€鈹€AbstractProjectGenerator.java鈹傗攤鈹溾攢鈹€GeneratorConfig.java鈹傗攤鈹斺攢鈹€IProjectGenerator.java鈹傗敎鈹€鈹€鍩虹璁炬柦鈹傗攤鈹傗攢鏁版嵁鈹傗敎鈹€鈹€DataSetting.java鈹傗攤鈹傗敂鈹€鈹€DataState.java鈹傗敎鈹€鈹€po鈹傗攤鈹傗敎鈹€鈹€Base.java鈹傗攤鈹傗敎鈹€鈹€Column.java鈹傗攤鈹溾攢鈹€Dao.java鈹傗攤鈹溾攢鈹€Field.java鈹傗攤鈹溾攢鈹€Model.java鈹傗攤鈹傗敂鈹€鈹€Table.java鈹傗攤鈹斺攢鈹€utils鈹傗攤鈹溾攢鈹€鈹溾攢鈹€DBHelper.java鈹傗攤鈹斺攢鈹€JavaType.java鈹傗敎鈹€鈹€妯″潡鈹傗攤鈹斺攢鈹€FileChooserComponent.java鈹傗敂鈹€鈹€ui鈹傗敎鈹€鈹€ORMSettingsUI.java鈹傗敂鈹€鈹€ORMSettingsUI.form鈹溾攢鈹€璧勬簮鈹傗敎鈹€鈹€META-INF鈹傗攤鈹斺攢鈹€plugin.xml鈹傗敂鈹€鈹€妯℃澘鈹傗敎鈹€鈹€dao.ftl鈹傗敎鈹€鈹€mapper.ftl鈹傗敂鈹€鈹€model.ftl鈹溾攢鈹€build.gradle鈹斺攢鈹€gradle.properties婧愮爜鑾峰彇锛?鍏紬鍙?bugstack铏礊鏍堝洖澶嶏細idea鍙互涓嬭浇鎵€鏈塈DEA鎻掍欢寮€鍙戞簮鐮?绗簲绔狅細鍦ㄥ紑鍙戦」鐩腑榧犳爣鍙抽敭鐢熸垚ORM浠g爜鍦ㄨ繖涓狪DEA鎻掍欢涓?鍦ㄩ」鐩腑锛屼富瑕佹湁5涓尯鍩燂細action锛氱敤鏉ユ彁渚涗竴涓彍鍗曟爮锛岃繖涓彍鍗曠殑浣嶇疆鏄湪plugin.xml涓厤缃殑锛屾垜浠厤缃埌椤圭洰榧犳爣鍙抽敭鍑虹幇鐨勫垪琛ㄤ腑杩欐牱灏辨洿鏂逛究鎴戜滑閫夋嫨涓€涓」鐩紝鎶婄敓鎴愮殑浠g爜鐗囨domain:鍩熸湇鍔″眰娣诲姞鍒拌繖涓」鐩笅銆傚叾瀹炵洿鎺ュ啓涓€涓猄ervice鍖呭氨鍙互浜嗭紝涓嶈繃鏈€杩戜綔鑰呭皬浠樻瘮杈冨枩娆㈢敤DDD鍜岀粨鏋勭殑鎬濇兂鏉ュ垱寤轰唬鐮佹潵瀹炵幇鍔熻兘閫昏緫銆俰nfrastructure锛氬熀纭€灞傦紝鎻愪緵椤圭洰涓嬬殑鏁版嵁瀛樺偍銆傛瘡涓」鐩彸閿兘鏈夎嚜宸辩殑閰嶇疆瀛樺偍榛樿淇℃伅锛屾柟渚夸笅娆℃墦寮€鏃堕槄璇昏繖閮ㄥ垎鍐呭銆傚悓鏃讹紝杩欎竴灞傝繕鎻愪緵浜嗗鐞嗘暟鎹簱鎿嶄綔鐨勭被锛屽洜涓烘垜浠渶瑕佷粠鏁版嵁搴撲腑璇诲彇琛ㄤ俊鎭€佸瓧娈点€佹敞閲婏紝鏉ュ垱寤篜O銆丏AO銆丮appers銆俶odule锛氭ā鍧楀眰锛岃繖閲屾彁渚涗簡涓€涓€夋嫨鏂囦欢璺緞鐨勭粍浠讹紝鍙互璁╂垜浠偣鍑绘ā鍧楅€夋嫨鐩稿簲鐨勪綅缃矾寰勶紝鍦ㄩ」鐩笂榧犳爣鍙抽敭鏄剧ず鐨勫舰寮忕敓鎴愪唬鐮併€倁i锛氭彁渚涢厤缃潰鏉匡紝涔熷氨鏄垜浠湪浠g爜椤圭洰涓婂彸鍑诲脊鍑虹殑闈㈡澘銆傝闈㈡澘鐢ㄤ簬閰嶇疆鍚庣敓鎴怬RM浠g爜銆?.鎷栨嫿Swing闈㈡澘ORMSettingsUI锛氭垜浠厛鏉ュ垱寤哄垱寤轰唬鐮侀厤缃殑闈㈡澘锛屾湁浜嗗睆骞曪紝灏卞緢瀹规槗杩涘叆浜嗐€傞潰鏉垮寘鎷敓鎴怭O銆丏AO銆乆ML鐨勪唬鐮佽矾寰勶紝浠ュ強閰嶇疆鏁版嵁搴撳拰閫夋嫨琛ㄧ殑鍐呭銆傛搷浣滆繃绋嬪氨鏄綋浣犻厤缃ソ杩欎簺鍩烘湰淇℃伅鍚庯紝浣犲彲浠ラ€夋嫨鏌ヨ琛ㄧ殑鍚嶇О锛岄€夋嫨浣犺涓哄摢浜涜〃鐢熸垚鐩稿簲鐨凮RM浠g爜銆?.閰嶇疆榧犳爣鍙抽敭寮瑰嚭绐楀彛銆傞鍏堬紝鎴戜滑闇€瑕佸垱寤轰竴涓狝ction瀹炵幇绫伙紝閫氳繃New->PluginDevKit->Actioncn.bugstack.guide.idea.plugin.action.CodeGenerateAction/***@author:浠樺摜锛屽井淇★細fustack*@github:https://github.com/fuzhengwei*@Copyright:鍏紬鍙?bugstack铏礊鏍坾鍗氬锛歨ttps://bugstack.cn-娌夋穩銆佸垎浜€佹垚闀匡紝璁╄嚜宸卞拰浠栦汉閮芥湁鏀惰幏锛?/publicclassCodeGeneratorActionextendsAnAction{privateIProjectGeneratorprojectGenerator=newProjectGeneratorImpl();@OverridepublicvoidactionPerformed(AnActionEvente){Projectproject=e.getRequiredData(CommonDataKeys.PROJECT);ShowSettingsUtil.getInstance().editConfORMSettingsUI(project,projectGenerator));}}杩欐槸鍙抽敭鑿滃崟鐨勫叆鍙o紝閫氳繃瀹冨彲浠ユ墦寮€鎴戜滑鑷繁鐨刄I绐椾綋锛岃繖涓猆I绐椾綋灏辨槸鎴戜滑涓婇潰鎷栧嚭鏉ョ殑閰嶇疆闈㈡澘锛孫RMSettingsUI鎺ヤ笅鏉ユ垜浠鍦╬lugin.xml涓厤缃繖涓狝ction鍙抽敭鑿滃崟鍒涘缓鐨勬枃浠躲€傝繖涓庡紑鍙戜唬鐮佹椂鐨勮繃绋嬬浉鍚屻€傛€绘槸瑕佷粠涓€鐐瑰仛璧凤紝鏈変簡鎶婃彙鎵嶈兘鎶婃彙銆俻lugin.xml閰嶇疆ea-plugin>鍦▁ml涓厤缃垜浠殑Action瀹炵幇绫伙紝浣犺繕闇€瑕侀厤缃畠搴旇鍑虹幇鍦ㄥ摢閲岋紝姣斿浣犲湪椤圭洰鍒涘缓ProjectViewPopupMenu涓渶瑕佹坊鍔犺繖涓彍鍗曪紝浣嶇疆淇℃伅anchor="last"銆傚彟澶栵紝涓轰簡璁╂彃浠剁湅璧锋潵鏇撮珮澶т笂銆佹洿婕備寒锛岃繕闇€瑕佸鍥炬爣杩涜閰嶇疆銆傝繖涓綅缃厤缃簡涓€寮?6*16鐨勫浘鐗囥€傚浘鐗囧彲浠ヤ粠iconfont涓嬭浇銆?銆佺粰琛ㄦ牸娣诲姞鍔熻兘杩欎竴姝ワ紝鍏跺疄灏辨槸缁欒〃鏍兼敞鍏ョ伒榄傦紝璁╄〃鏍兼椿璧锋潵銆傝緭鍏ユ娣诲姞鍐呭锛屾寜閽坊鍔犱簨浠讹紝纭鎸夐挳娣诲姞鐢熸垚鍒涘缓ORM浠g爜鍧楃殑涓婁笅鏂囥€傛枃绔犵殑鎻忚堪灏介噺鍋忓悜浜庢牳蹇冧唬鐮佺殑瑙i噴銆傝鎯呰鍙傝€冩簮鐮併€傛帴涓嬫潵鐨勯儴鍒嗗唴瀹逛細鍦∣RMSettingsUI绫讳腑鍙嶅鎼撴弶锛岀洿鍒版墍鏈夊姛鑳藉畬鎴愩€?.1閫夋嫨妗嗕簨浠?/閫夋嫨PO鐢熸垚鐩綍this.poButton.addActionListener(e->{FileChooserComponentcomponent=FileChooserComponent.getInstance(project);VirtualFilebaseDir=project.getBaseDir();VirtualFilevirtualFile=component.showFolderSelectionDialog("閫夋嫨PO鐢熸垚鐩綍",baseDir,baseDir);if(null!=virtualFile){ORMSettingsUI.this.poPath.setText(virtualFile.getPath());}});杩樿寰楁垜浠彁鍒扮殑鎷栨斁Swing闈㈡澘锛岄偅涔堣繖涓坊鍔犱簨浠剁殑姝ラ灏辨槸缁欎綘鐨凱O鐩綍娣诲姞涓€涓簨浠讹紝璁╂垜浠€夋嫨灏嗗搴旂殑PO浠g爜鐢熸垚鍒板摢涓洰褰曠粨鏋勪腑銆傚叧浜巇ao鍜寈ml锛岄兘鏄被浼肩殑鎿嶄綔锛岃繖閲屽氨涓嶆紨绀轰簡銆?.2鏁版嵁琛ㄤ簨浠秚his.selectButton.addActionListener(e->{try{DBHelperdbHelper=newDBHelper(this.host.getText(),Integer.parseInt(this.port.getText()),this.user.getText(),this.password.getText(),this.database.getText());ListtableList=dbHelper.getAllTableName(this.database.getText());String[]title={"","琛ㄥ悕"};Object[][]data=newObject[tableList.size()][2];for(inti=0;itables=newArrayList<>();SettableNames=config.getTableNames();for(StringtableName:tableNames){tables.add(dbHelper.getTable(tableName));}codeGenContext.setTables(琛?;//鐢熸垚浠g爜projectGenerator.generation(project,codeGenContext);}apply涓殑鏍稿績浠g爜涓昏鏄埄鐢―BHelper鏁版嵁鎿嶄綔宸ュ叿鑾峰彇library涓嬪搴旂殑Link淇℃伅锛屽悓鏃跺垱寤洪€夊彿鐨勮〃鐢熸垚浠g爜绫荤殑鍙傛暟锛屼緥濡傦紱绫诲悕銆佸瓧娈靛悕銆佹敞瑙e悕绛夈€傛渶鍚庢槸璋冪敤鐢熸垚浠g爜鐨勬湇鍔★紝projectGenerator.generation(project,codeGenContext);杩欓儴鍒嗘槸鍦ㄦ垜浠殑鍩熸湇鍔″煙涓疄鐜扮殑銆?.浠g爜鐢熸垚鍩熸湇鍔$敤浜庡垱寤篜O銆丏AO銆丮apper浠g爜鍧楃殑浠g爜涓昏鍦ㄨ繖閲屽疄鐜般€傛牳蹇冩槸鎻愪緵涓€涓娊璞$被鍜屽搴旂殑瀹炵幇绫汇€傚洜涓洪渶瑕乫reemarker鏉ュ鐞嗕唬鐮佺敓鎴愶紝鎵€浠ュ湪鎶借薄绫讳腑杩涜浜嗗皝瑁咃紝鐪佸幓浜嗗疄鐜扮被涓渶瑕佸叧蹇冪殑杩欓儴鍒嗛€昏緫銆侾rojectGeneratorImpl鐢熸垚浠g爜@OverrideprotectedvoidgenerateORM(Projectproject,CodeGenContextVOcodeGenContext){List

tables=codeGenContext.getTables();for(Tabletable:tables){Listcolumns=table.getColumns();Listfields=newArrayList<>();瀵逛簬锛堝垪鍒楋細鍒楋級{Fieldfield=newField锛坈olumn.getComment锛堬級锛孞avaType.convertType锛坈olumn.getType锛堬級锛夛紝column.getName锛堬級锛?field.setId(column.isId());fields.add锛堝瓧娈碉級锛泒//鐢熸垚PO妯″瀷model=newModel(table.getComment(),codeGenContext.getModelPackage()+CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL,table.getName()),table.getName(),fields);writeFile(project,codeGenContext.getModelPackage(),model.getSimpleName()+".java","domain/orm/model.ftl",model);//鐢熸垚DAODaodao=newDao(table.getComment(),codeGenContext.getDaoPackage()+"I"+CaseFormat.UPPER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL,table.getName())+"Dao",妯″瀷);writeFile(project,codeGenContext.getDaoPackage(),dao.getSimpleName()+".java","domain/orm/dao.ftl",dao);//鐢熸垚MapperwriteFile(project,codeGenContext.getMapperDir(),dao.getModel().getSimpleName()+"Mapper.xml","domain/orm/mapper.ftl",dao);}}鍒涘缓浠g爜鐨勮繃绋嬫瘮杈冪畝鍗曘€傞€氳繃寰幆鎻愬彇鐨勮〃淇℃伅鏄犲皠鍒板搴旂殑绫汇€佸睘鎬у拰娉ㄩ噴锛岀劧鍚庡埄鐢╮esources涓嬬殑ftl鏂囦欢鍒涘缓瀵瑰簲鐨勭被鍜寈ml閰嶇疆鏂囦欢鍗冲彲銆傚鏋滀綘杩橀渶瑕佺敓鎴愪唬鐮佺墖娈垫垨鑰呭垱寤鸿皟鐢ㄤ竴浜涘父鐢ㄧ殑缁勪欢锛屼篃鍙互閫氳繃杩欑鏂瑰紡瀹炵幇銆?.娴嬭瘯楠岃瘉鐐瑰嚮Plugin鍚姩IDEA鎻掍欢锛岀劧鍚庡彸閿偣鍑婚」鐩涓嬶細1.榧犳爣鍙抽敭锛岄€夋嫨鑿滃崟2.閰嶇疆椤甸潰锛岄厤缃俊鎭?.鑷姩鍒涘缓锛岀敓鎴愪唬鐮侊紝閫夋嫨浠g爜block灏变細杩欐牱鍒涘缓锛屾槸涓嶆槸寰堟柟渚匡紝鑰屼笖鍙互婊¤冻浣犻殢鏃舵坊鍔犳柊鐨勫簱琛ㄤ唬鐮侊紝鍑忓皯鎵嬪姩CRUD鎿嶄綔銆?.灏忕粨鏈珷浠樺摜甯﹀ぇ瀹跺湪IDEADDD鎻掍欢鐢熸垚宸ョ▼鐨勭粨鏋勪笅鍙堜竴姝ョ敓鎴愪簡ORM浠g爜銆傚綋鐒朵綘涔熷彲浠ュ湪椤圭洰鍒涘缓鍚戝涓姞鍏ョ敓鎴怬RM浠g爜鐨勬楠ゃ€傞」鐩笅鍒涘缓ORM鐨勬柟娉曞彲浠ョ湅浣滄槸瀵硅剼鎵嬫灦椤圭洰鐨勮ˉ鍏咃紝浠ユ弧瓒充笉鍚屽満鏅殑闇€姹傘€傚彟澶栵紝鍦↖DEA鎻掍欢寮€鍙戠郴鍒椾腑锛屾垜浠篃鍦ㄤ笉鏂皾璇曠敤鏂扮殑鏂规硶鏉ュ畬鍠勪笉鍚岀殑鍔熻兘鐐广€傚鏋滄偍闇€瑕佸紑鍙戜竴涓畬鏁寸殑鎻掍欢锛屾偍鍙互缁撳悎杩欎簺鍔熻兘鏉ュ紑鍙戞偍鐨勯渶姹傘€傛彃浠跺紑鍙戜腑闇€瑕佷簡瑙e拰瀛︿範鐨勫唴瀹硅繕鏄緢澶氱殑銆傚悓鏃讹紝闇€瑕佹敞鎰忎竴浜涗唬鐮佸疄鐜扮粏鑺傘€傛瘮濡傛湰绔犵殑鏁版嵁淇濆瓨鍦ㄤ粈涔堢淮搴︼紵鏄疘DEA寮€鍙戝伐鍏风淮搴﹁繕鏄疘DEA涓殑椤圭洰缁村害锛燂紝杩欎簺鏄湁鍖哄埆鐨勩€備緥濡傦紝鎮ㄤ笉闇€瑕佷负涓嶅悓鐨勯」鐩繚瀛樼浉鍚岀殑閰嶇疆銆?.绯诲垪鎺ㄨ崘鍦↖DEA寮€鍙戦挀楸奸槄璇绘彃浠舵柟妗堣璁★細鍩轰簬IDEA鎻掍欢寮€鍙戝拰瀛楄妭鐮佹彃妗╂妧鏈紝瀹炵幇鐮斿彂浜や粯璐ㄩ噺鐨勮嚜鍔ㄥ寲鍒嗘瀽銆傛妧鏈礌鍏伙細浣庝唬鐮佺紪绋嬬殑鍙寔缁氦浠樿璁′笌鍒嗘瀽馃挜馃巵褰╃エ鎶藉绯荤粺-鍩轰簬棰嗗煙椹卞姩璁捐鍥涘眰鏋舵瀯鐨勪簰鑱旂綉鍒嗗竷寮忓紑鍙戝疄璺点€奡pringBoot 涓棿浠惰璁″拰寮€鍙戙€媩瀵癸紝骞村簳鎴戜細鏁欎綘閫犵伀绠紒