浣滆€咃細灏忓倕鍗氬锛歨ttps://bugstack.cn娌夋穩銆佸垎浜€佹垚闀匡紝璁╄嚜宸卞拰浠栦汉閮芥湁鎵€鏀惰幏锛侌煒?.鍓嶈█缁欎簡浣犳満浼氾紝浣犲嵈涓€鏃犳槸澶勶紒浠庝簨缂栫▼鍜屽紑鍙戣繖浜涘勾锛屾垜浼间箮鍙戠幇锛岀爺鍙戜腑澶ч儴鍒嗕笉鎯冲仛鐨勪簨锛屽嵈鎴愬氨浜嗗埆浜恒€傚氨鍍忛儴缃叉湇鍔$殑楹荤儲涓€鏍凤紝鐢―ocker锛岀畝鍗曠殑CRUD涓嶆兂寮€鍙戯紝浠g爜灏戯紝鏂规硶浠g爜鍔犵洃鎺ч夯鐑︼紝鏃犱镜鍏ョ殑鍏ㄩ摼璺洃鎺с€傝€岃繖浜涗簨鎯呬綘涔熷湪鍋氾紝鍥犱负浣犳病鏈夋兂娉曪紝娌℃湁鍒涙柊锛屾病鏈夋€濊€冿紝涔熻杩樻病鏈夎兘鍔涳紝鎵€浠ヤ綘涓€鐩村湪鎼爾锛屽爢鐮栵紝鐮岀爾锛屽懆鑰屽濮嬶紝鏉ユ潵鍥炲洖銆傞敭鐩樻墦瀛楄秺鏉ヨ秺蹇紝浠g爜瓒婃潵瓒婄儌銆傚伐璧勪竴鐩存病鏈夋彁楂橈紝澶村彂涔熻秺鏉ヨ秺灏戙€傚浜庢兂璧版妧鏈矾绾跨殑鐮佸啘锛屼笉瑕佸彧鍋滅暀鍦ㄤ笟鍔″姛鑳界殑閫昏緫寮€鍙戜笂銆傚彧鏈夊綋浣犳湁浜嗛€氱敤绠€娲佺殑閫昏緫鎬濈淮锛屼綘鎵嶄細閫愭笎鎬濊€冨浣曟妸涓€涓噸澶嶇殑涓滆タ鍋氭垚涓€涓€氱敤鐨勬湇鍔℃垨鑰呯粍浠讹紝鑰岃繖浜涗笢瑗跨殑瀹炵幇涓嶄粎闇€瑕佷綘浼氬啓浠g爜锛岃繕闇€瑕佽兘澶熸€濊€冨拰绱㈠紩涓€浜涗綘闇€瑕佺殑鎶€鏈紝骞堕€氳繃鑷鏉ヨˉ鍏呰繖閮ㄥ垎鎶€鑳姐€?.闇€姹傜洰鐨勫璞′箣闂磋鍐檊et鍜宻et鍚楋紵鐑︼紝鐑︼紝灏ゅ叾鏄疍DD鍥涘眰鏋舵瀯涓嬶紝鍔犱笂澶氬眰鎶楁薄鏌撳鐞嗭紝涓€灞倂o2dto锛屼竴灞倂o2do锛屼竴灞俤o2po锛岃櫧鐒舵湁寰堝宸ュ叿鍙互鎿嶄綔锛屼絾鏄繕鏄緱鍐欍€傝鎬庝箞鍔烇紵涓嶈鎱岋紝杩欐槸涓€涓満浼氾紝鎴戜滑鍋氫竴涓彃浠舵潵淇瀹冿紝璁╁畠鑷姩涓烘垜鐢熸垚get鍜宻et浠g爜锛屽湪IDEAPlugin鐨勫鐞嗕笅锛岄€夋嫨闇€瑕佺敓鎴愮洰鏍囦唬鐮佺殑閿氱偣锛屽鍒跺苟杞崲瀵硅薄锛岃嚜鍔ㄧ粐鐮侊紝1s鎼炲畾锛佷笁銆佹渚嬪紑鍙?銆侀」鐩粨鏋刧uide-idea-plugin-vo2dto鈹溾攢鈹€.gradle鈹斺攢鈹€src鈹溾攢鈹€main鈹傗敂鈹€鈹€java鈹傗敂鈹€鈹€cn.bugstack.guide.idea.plugin鈹傗敎鈹€鈹€鍔ㄤ綔鈹傗攤鈹斺攢鈹€Vo2DtoGenerateAction.java鈹傗敎鈹€鈹€搴旂敤绋嬪簭鈹傗攤鈹斺攢鈹€IGenerateVo2Dto.java鈹傗敎鈹€鈹€鍩熲攤鈹溾攢鈹€妯″瀷鈹傗攤鈹溾攢鈹€GenerateContext.java鈹傗攤鈹侴et鈹?java鈹傗攤鈹傗敂鈹€鈹€SetObjConfigDO.java鈹傗攤鈹斺攢鈹€鏈嶅姟鈹傗攤鈹溾攢鈹€impl鈹傗攤鈹傗敂鈹€鈹€GenerateVo2DtoImpl.java鈹傗攤鈹斺攢鈹€AbstractGenerateVo2Dto.java鈹傗攤鈹€鈹€Util鍩虹璁炬柦java鈹溾攢鈹€璧勬簮鈹傗敂鈹€鈹€META-INF鈹傗敂鈹€鈹€plugin.xml鈹溾攢鈹€build.gradle鈹斺攢鈹€gradle.properties婧愮爜鑾峰彇锛?鍏紬鍙?bugstackwormholestack鍥炲:idea鍙互涓嬭浇鎵€鏈塈DEA鎻掍欢寮€鍙戞簮鐮佸湪杩欎釜IDEA鎻掍欢椤圭洰涓紝涓昏鍒嗕负4涓柟闈細action:providemenu鍦ㄦ彃浠朵腑锛屾垜浠妸杩欎釜鑿滃崟鏍忛厤缃湪Generate涓嬶紝杩欓噷灏辨槸浣犲钩鏃剁敓鎴恎et銆乻et銆乧onstructor鏂规硶鐨勫湴鏂广€傜偣鏂规硶鎺ュ彛銆俤omian锛氶鍩熷眰涓撻棬璐熻矗浠g爜鐢熸垚鍜岀紪缁囧姩浣溿€傝灞傝幏鍙栦唬鐮佷腑鐨勯敋鐐逛綅缃紝澶嶅埗鍓创鏉夸俊鎭紝搴旂敤涓婁笅鏂囷紝瑙f瀽绫讳腑鐨刧et鍜宻et锛屾渶鍚庡皢鐢熸垚鐨勪唬鐮佺紪缁囨垚鍒拌揪閿氱偣鍚庣殑鎿嶄綔銆俰nfrastructure锛氭彁渚涘簳灞傜殑宸ュ叿绫伙紝鐢ㄤ簬鑾峰彇鍓创鏉夸俊鎭€侀敋鐐逛綅缃垽鏂瓑鎿嶄綔銆?.缂栧叆浠g爜鎺ュ彛cn.bugstack.guide.idea.plugin.application.IGenerateVo2DtopublicinterfaceIGenerateVo2Dto{voiddoGenerate(Projectproject,DataContextdataContext);}瀹氫箟鎺ュ彛鍏跺疄鏄緢閲嶈鐨勪竴姝ワ紝鍥犱负杩欎竴姝ュ畾涔変簡鐢熸垚鐨剆tandard涔嬪悗锛屾墍鏈夌殑鐢熸垚鍔ㄤ綔閮藉繀椤讳粠杩欎釜鎺ュ彛鍙戣捣銆傚涔犳簮浠g爜涔熸槸濡傛銆傛偍闇€瑕佹壘鍒颁竴涓牳蹇冨垏鍏ョ偣鎵嶈兘鏇村ソ鍦板紑濮嬪涔犮€?.瀹氫箟妯℃澘鏂规硶鍥犱负鐢熸垚浠g爜骞剁粐鍏ラ敋鐐逛綅缃殑鎿嶄綔瀹為檯涓婃槸涓€涓暣浣撶殑涓€缁勬祦绋嬫搷浣滐紝鍥犱负鍦ㄨ繖涓祦绋嬩腑闇€瑕侊紱鑾峰彇context淇℃伅锛堝嵆project瀵硅薄锛夛紝鎻愬彇褰撳墠閿氱偣浣嶇疆鐨勭被鐨剆et鏂规硶闆嗭紝鐒跺悗璇诲彇ctrl+C鍓创鏉夸笂鐨勪俊鎭彁鍙杇et鏂规硶闆嗭紝绗洓姝ユ槸toset,get缁勫悎骞跺皢浠g爜缂栫粐鍒伴敋鐐逛綅缃€傛暣浣撴祦绋嬪涓嬶細浣跨敤妯℃澘鏂规硶鍚庯紝寰堝鏄撳皢鍐欏湪涓€涓被涓殑浠g爜鍧楁寜鐓ц亴璐h繘琛屾媶鍒嗐€傚悓鏃讹紝鍥犱负妯℃澘鐨勫畾涔夛紝瀹氫箟浜嗕竴鏁村鏍囧噯鐨勬祦绋嬶紝鍦ㄦ祦绋嬭鑼冧笅鎵ц浠g爜浼氭洿瀹规槗锛屽悗鏈熸坊鍔犻€昏緫杩唬鍔熻兘銆?.浠g爜缁囧叆閿氱偣鍦ㄤ唬鐮佺粐鍏ラ敋鐐逛箣鍓嶏紝鎴戜滑鍦ㄦā鏉跨被涓畾涔夌殑鏂规硶闇€瑕佸疄鐜版帴鍙h繘琛屽鐞嗐€傚叧閿偣鍖呮嫭锛氶€氳繃CommonDataKeys.EDITOR.getData(dataContext)锛孋ommonDataKeys.PSI_ELEMENT.getData(dataContext)灏佽浜咷enerateContext瀵硅薄鐨勪笂涓嬫枃淇℃伅锛屽嵆涓€浜涚被鐨勫璞★紝閿氱偣浣嶇疆锛屾枃妗g紪杈戠瓑銆傞€氳繃PsiClass鑾峰彇鍏夋爣鎵€鍦ㄤ綅缃搴旂殑Class淇℃伅锛岄€氳繃psiClass.getMethods()璇诲彇瀵硅薄鏂规硶锛岃繃婊ゆ帀set鏂规硶锛屽皝瑁呮垚闆嗗悎銆傞€氳繃Toolkit.getDefaultToolkit().getSystemClipboard()鑾峰彇鍓创鏉夸俊鎭紝鍗冲綋浣犱负閿氱偣澶勭殑瀵硅薄鐢熸垚x.set(y.get)鏃讹紝澶嶅埗Yy瀵硅薄锛屽紑濮嬫彁鍙杇et鏂规硶锛屽畠涔熻灏佽鍒伴泦鍚堜腑銆傞偅涔堟渶鍚庡氨鏄唬鐮佺殑缁勮鍜岀紪缁囦簡銆傝繖閮ㄥ垎鎴戜滑鐨勪唬鐮佸涓嬶紱{搴旂敤绋嬪簭搴旂敤绋嬪簭=ApplicationManager.getApplication();//鑾峰彇绌烘牸浣嶇疆闀垮害intdistance=Utils.getWordStartOffset(generateContext.getEditorText(),generateContext.getOffset())-generateContext.getStartOffset();application.runWriteAction(()->{StringBuilderblankSpace=newStringBuilder();for(inti=0;i
