From 0bea5abfb62bd9ae4df4c910f59b1d6918e605b9 Mon Sep 17 00:00:00 2001 From: iqudoo Date: Mon, 13 Apr 2026 02:06:41 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=EF=BC=9A=E4=B8=8D=E4=BE=9D?= =?UTF-8?q?=E8=B5=96=E8=A1=A8=E5=89=8D=E7=BC=80=E5=88=A4=E6=96=AD=E6=98=AF?= =?UTF-8?q?=E5=90=A6=E4=B8=BA=E8=A7=86=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 +------ ...-mybatis-generator-plugin-1.0-SNAPSHOT.jar | Bin 36535 -> 35962 bytes .../mybatis/TapeMybatisGeneratorPlugin.java | 27 ++++++++++++++---- .../TapeRepositoryGeneratorPlugin.java | 20 +------------ .../mybatis/TapeRepoviewGeneratorPlugin.java | 26 +---------------- .../framework/mybatis/utils/ElementTools.java | 11 +++++++ 6 files changed, 35 insertions(+), 59 deletions(-) diff --git a/README.md b/README.md index 5e9fbbe..9dc06f0 100644 --- a/README.md +++ b/README.md @@ -5,10 +5,9 @@ 本插件为 MyBatis Generator 提供了以下增强功能: -1. **TapeMybatisGeneratorPlugin** - 扩展 MyBatis Mapper,添加 `selectPrimaryKeyByExample` 方法,支持分页查询主键列表 +1. **TapeMybatisGeneratorPlugin** - 扩展 MyBatis Mapper,添加 `selectPrimaryKeyByExample`, `batchInsert` 方法,拓展查询分页支持 2. **TapeRepositoryGeneratorPlugin** - 为非视图表自动生成 Repository 接口和实现类,提供完整的 CRUD 和软删除功能 3. **TapeRepoviewGeneratorPlugin** - 为视图表自动生成 RepoView 接口和实现类,提供查询功能 -4. **分页支持** - 为 Example 类自动添加分页相关字段和方法(offset、rows、usePage、limit 等) ## 插件说明 @@ -131,7 +130,6 @@ ```xml - @@ -161,7 +159,6 @@ | 参数名 | 说明 | 默认值 | 必需 | |----------------------------|-------------------------------|-------------------------------------------------------|------| -| `viewKeyWords` | 视图表关键字(逗号分隔,不区分大小写) | `VIEW_,V_` | 否 | | `targetProject` | 生成代码的目标项目路径 | `src/main/java` | 否 | | `modelPackage` | Model 类的包路径 | `com.iqudoo.platform.application.database.model` | 是 | | `mapperPackage` | Mapper 接口的包路径 | `com.iqudoo.platform.application.database.mapper` | 是 | @@ -177,11 +174,6 @@ | `startPageNum` | 分页开始页码 | `1` | 否 | | `maxPageSize` | 最大每页数量 | `100` | 否 | -**视图表识别规则**: -- 表名包含 `viewKeyWords` 中任一关键字的表将被识别为视图表,大小写不敏感 -- 视图表会生成 RepoView,不会生成 Repository -- 非视图表会生成 Repository,不会生成 RepoView - ## 数据库表结构要求 ### 标准表结构模板 diff --git a/releases/tape-mybatis-generator-plugin-1.0-SNAPSHOT.jar b/releases/tape-mybatis-generator-plugin-1.0-SNAPSHOT.jar index ef0fc173f9a3b57a2ce806cb6f4f44c01c942d0b..456df450c15fbe8c539f9d25ccc65cdee36a2b6a 100644 GIT binary patch delta 29366 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

jey82`~COpB3 zIO9N_D}0fIB&8@QK)0KVK8#33Wsjgq%F^etSu)grAji`K8r$I^1RM(TM_*`Nd>Z~R zsV38Jb8M2nbV5Oxh8bC0x2AYGLp$T%;knY=(EiY~3m$17tukjgt`F#+e%OD752$eo z9fk{v))%Dzr>t)d4y0@PO|r>`8{4*R+qSdOh8ufg+qP}n_Qp0g8*_u3=eh4!U%mHE z_0+HHO!ukzW9n4T>0h6g=s^RAoua3Vm;S?o@a#ZM^EZ4LD7;>XoNkre`U#OQyr6uU zr|zI*t0Cdi64iYFumF2CD7Gj_eAMHwUwvJbx+WB>jp z3aO6u#S-hBEeaT@889eBVw%_{PkYZA?m6bTg5#yq&IqOfc1r+Y_9+G#xF=E~jdKc& zXkmSCaBEnp(*v}OF7XV9C;MrKbn8V`o@?wK20Rd>-sScmpS+8Is*9yu#js9gv&R1* z@_V$rd+{6o*a3(=&Cb{kEkAVdCo>-zq6CmF(GlX>(4^;VkF|x>&{+E+yu)POsV_vcVS{=0itdm6XHrsYcYgTmE%}${)=b?y zi;;9;76f#$M9dbGLWU97H*T5F=|Xwry~__^u(kVVMM&HHvSZGelKTwEfJw@#vY9m| zF>JOVBt2$B(Bjf{xQvSKsV~aT#b5qN&IKHD8D=~~cPWRgm2>nI7q#6Tef()@-NnW6qk0w_d&kycx`|2VRIsZ+ zQm8n23sH*96P5p4oiYm7*7cA}nEl-MR62kW{F|}SwTznRvJN;m@Xe5XY@^9Ul+(TT&xmid_@n`Jj@`>h_SDx3836#71?)+(2wK zOu{IK^>^$bJTE~EY&HFQzlzvzB9j`N=g8`F*}g%?apz<+>Kbb<{*^6QskDV9gqwU; z)uIy-+<+p3Zv!7jFWf(u`uN4k~krWdPD8y=jFEr`h`nD#l$KuBCj zAwh~PC=|E#C?PnGxF?SF68}~|RGA{gAuNfPw~C0$J9Jp>H&L}czhHHE{xoE1uJK)D zK4j?$zL4rhtH)?q1;(=RctIT@xBS>hq*)$Ky0R}1P0%={A=GJ-CXzbpv8~Z)VZ0R} ztiZ}NqFupW92uTCm%AgSoP@<-Hk`U|Jc;&Y!q|(e7Ghg(cUwf?UVwhciYQv)V1S7t zV0pfAb7O3CzCO60OD+^`bj+cGExeqOXx1&CF! z^x&xy73is47-|`m*zGONxb2{|b-qZT1b5@uf8+ZHp`2Cqn#{YEefnR^C6vOkZwrnW zrJM2H%;uDJnu`?q*!#n1EOFI#U)c;z$aBrU{D7}^lnXvG zTv#>qsAQi0?ry70?wE8PZd=czkp?o1mRBS@m?=WlXAR25Pn;8hUP`08lAI(3gnOee z%ORd1iB79LEZn%vjPp5JH*jeOC{-=sRwo%nkGL}6X*A`qH(uts#O)K>++{LLmcT2I z=%1BO-JiDwpx)r7L8~W19NnDLgJ#4+AB}^lytPvsDuLb(no`fy9FHwFFD9dv2yP!|I^-nUWyD9foOk_U_Rmt6lWUd4;{m@Y>>3`B{a1TED;rXK z-I3R`w!UU*f0^&}gv;_oNyyICZ0_bvKVwNmtFhB(lco_LD|pG|w6QxQmra~NCD9Ja zQ#aJxAe3))E&Kf0$f`poRZXa)i*osvwVHm0rL{c!*naAkH>P5J%RSP7fQ07*l}CfC zwhED9DMAnZA_w-u0O|rL33_0V%QWuMr{(OC9>J=JY5J*;mbo0yS(CwO^7f+H_pHY~ z&FP)F&|l{}{Cxit>`t6}*3G-~+Z`l|MW+D)gCGDFo1Nf0@7yKX()&*Pw}<5KhuXtO z#^}Cx+z4bb@4MyrzCkfBKl|Zz*yzASq)s;#{ZuEq+p3>V-ZLXGKEc(B=Dr%VZozQ8 zdvxux`D9GL=ZPs2_y?BR}TyFVFnt&eY0U;Wn^uaf6T?h2v4#U-ErCqax!Io+Jh z!!>Dfg=KSOF(aQej}^sf!dLg;6q>JXH$Si|6mD*0pL{oB`Zu}k`m1tywRm^2wLvhU zL|%s`9CsL@^L%ZAXety#Vai^XRm$sgGQ$B`Qh8_>T?H#9{m{||D5*UBK3gU>LaIu^ zwbMK^7!_DO@$*xeMR|@n^7e0iZ=h$zZ>WVM7BqZ9L>_+mcgRC0Y~c$yiwc+X>@Ts+ z4bmmIl-N7QYkg#QSoB2=ZJE=%*xWJ4bI+Zz^atYYp&2KDv29*fXEyy|f+dFQ>>+L; zjXUI@<9RhNI=u;wxqC01%~6HDca!#@?LwYsoA!w90z0C-%^*h4p8B-zg1g!MaTgEi zw(x9~>Z0Q$o>Q?yDi1aHWPKI=qHUVXS%Rd;Q@W6Z_cKh9OCIuB$Y_|C(QCLE*VjY} zZv6w~5gJ}#?3#&Sck-Boh%3jDSiuFqPbD+Kz1)#o!4W?IyeHc#lj53I3cM5h^cv!a zVzjCk)I-hZ9$vk2IN=AqoKmr&>d8|oIgJWa`T=h+c^yFka@ciPpx+#;X*(%gq#32D zB&Mx-hH|wkAt(k<2C9I#{0-N6l60g)X&;wVS-&mNwz&V)p&S(#LGQ?0uxMB~FBc7& zl!kdY_a%BgNei>>lxf7-DcAw^aNkQNadk&<-(f`8G}?ar7T0uKcQ+9S4<*SRGincA zB9ED%fS7-^Z+s3j>c}xEB?$u4{b^+UP?}C$-_*Z85r4=cvOa4&H^)e|a%1dqjs`PI zP5%&>`P|iEo!&i&x+53g$3x={+3J^c?UclzcK!@L_R+X?v_k7mjq|PR%+Za+m5=1d zpTUC*+a#TpY9cyx8#mrn&K5oh2Ne>JE#~t;^%@-mf!}-A^y1ptk3>{WgEwPq)qLrB zL{#yOFr1%^L*NjWSp9c_N5YyG}4$-JC+nABVthu>K=j(Kd zT`pQmuZXuguVRzU^bL#hd@2;;Z>xt%L3OKAaV19rL-(JA5)X;WgWn+fyVg+ECM_8yfUOtNsw8I&*G~ZK=mhuF zG?P2*Q67m&X7)OQHqr?Ww1Hj0=p?g=%GIY&)Lbwy*n0CNqZ#%xh0+*1qKy^IV%(z! zHq8;5RLNC-R9)vv6Snr#6HPm0_w7z8Ssu%ylFAI*iWTU``XWQb&l%t%ic@|j`qh6# zzfE#b6x$66lG~1K-ZoBdy^H~y^|d;~$z47wztM2C9$x5_N=$1WCcB;{GTXK%0?N`* z*7D@)tJa9yG$hO0fA|49m3?3u5F7jrDFomsCl2!WHv|0?vWH3xz%um-okM&0IDtO% zXv_qYygZg@D!Fi@H)H66AtICLUrxCEoZ=hy^1Tbz1cj1)H{YdOtVSSgrV#)8S=B4n zTCgTSl_QsO&2@*yA7guTYZ=RsOK=r*hio7U>_wb@*&1{Af?mF%x80d|((K+~O{X8s z+%J{aDymF=h|nOLge+i_Zb(HCPkwfD^Q%`+r?O{Lu~do3IXDNq^ojq!SV~4lt@SKP)y?1^@`zKjhLl=gi`By4G7Hn)_cu2 zY+~-tHvXnD6cOl5$!QbwFdLl8`NMA4(|cF*a9xvDEki$=XhQIzj<%uz(kSz< zDS3WnE8oZ2)#D&K*@P2#|GMZ(gGE{C@$3?Qi{}KoEtPVmXX)c5HXl=?xMnTT-LEc+ zXQLR+@#e-fj<$0ge(yg!n?iyXyd*Gk9pc?FcW{=k<9zS zFPeR6HgS7&WDS5K+=MjA$5D&^XrCC_qerxy*V}5|9Ljzcof%72)O1~g9(N%dinAw! z=yod~#Jue@PjN5SI2QB( zlj2&fgip;mq(4j?dienT@66NL#IkkFXXZ(t9|Yu6Kuqjx7%YD}f48$^FiQ{!!%C=D z!~vkaRDb;vI3{DcG`;DM7c~5i<1ff8MQ%+@j!0@05zIz3n$P)NzrXi8`Lu8->{9tJ zYWgY}G#fpg4Y5S%aG9!K>NZVlztAh1T>8|jnwy$_yuCkmb1<-sf%Gl;ygnUndTw_e zXL?S5&^~s%|Jjb=l^116RL7u7EKshNhj##&<)TH`E4bS^UiSMm)jB>?QSYCrsKZM* zbvgvHwSZlBP{8~%6~$!^Ind`ury_5u6(Np|y-*@MMuKrzQFyK@7?5h#B+gy#Z%zsp zC#j~hxNYPlmak*|GW9NRQZ$FPip|=N{z;CqP7OEClUxoDM7pqzY;3`qJ2DLEQw3I9 zS9^XLpxuP5SETRF8Mbzb7ZAz9lVC@QLOcp*g@d0Pc`tEb>qNzh52Te7CeEOaFJs+| ztP{_{=kzqNpjroM#?{tLZJ!}vc9)W+=W+{|#QC4u-|9)99lkHoy}O7Mn0ysvM?AfP z9KiZ6an33p&$fL}!V^8_Dq8>E3IGKHW>4J2pd_TF(aU9`ioXs+<$kaDjar}#loFwF zOO=fIYx{A1PoNo4q+Qb{1Fu0=M@pD*E{{#vf4AsBGQf|rX4l@weok#n4u+`UP;InE zye&RqRSTzV_N<@l;zs^92##KI&KeMH;xH8H=1q#r(L9tkE{)T$U(beY3kx)BXrWk* zYpZf+Tdw5^!SQKKajd(!J7Wf4|0=rJqqC$zmH91te!9tbrh<4VJh|YiB82R}Kl~cOPM&fMSLF_~l-%aPW&@ZHU7ibeI#H+57}?1gTX6&W>~#jkXv(CD%(B##U{!{U zvUrgYf{oQGu3ET|p@&jc!Q(6zx2IIK+v(*>O>rPpf4sybR{gRl6gOd|p0lVIN5htL zp0jKeDq3*9Sr9KSTV=xor_DD4Bw>s$Wd>8h7Fp7GZP+9>@&4cb-w;?Q4mf* zU28fiR6F+K@+sK7v_V+fXe|kjSV^El4si#;!0ZcQ* z1%`?Y!f~QjvZ0DW;jLP`U6Fn*P0K=JAYL^mEnrNJ~+JfnQ|)dA^}AJb_0pvq{|EK|ptSB+Z^3CrBIQcOU|; z^YzCH(8mr)l*C#<>QyW(2a0O*#ydQo3wejZU1D$c4t~S-#+#mH(1_Wor=)cJ};I!JsKg|ps|Y!2EQ6YrQPZWE~-tz z(wMiM(6<|?>UX5kb7taOci+cFPa8^-2dPo^d~M7FHLtEu_F5A`D8Gx9_oRY0x#w=Y zGEH=Q7tB@2Z479vo#4;HFP12pqN&ikr0$4$QZ#j}Ip#?t|c~6DvruR@S z89DihWhNV^;_@SU5@EQR@fX4w1@~LJK1xwFk^%*Sg z*xZGU&9JLC?l;lU`(pW?f^C*>!6N-F#7annOn_gRi=e+L1%uMP#Kfg{|39MU0Sj>j zQcBOXmq82~^&T0xfDQ+l97J?2^eG-{ug?+km(X=V>>AkDqO7zl<#)?|LKbZX2dS;2 z$^axRNz%er2>?a-mSFh|)c^gR?HT)Cv>NCPT9SjxA0ARgWT=JxmmXcVSPDu z-4;kVX@$4nja-TFnr%fdu1cBZmx{g!{hWn@V5OHxw9;+1nDbA<)(CIz`~%qkq|)f4 zatn6~FQ9^n#wA5ebx)sO5K~o8sj;?5TkZsb+uh&cRyp2>u)hV_AUDcUXY%l${$;E> zaMDjW{T+Khk#8Q=g{byh#WOhip&Dxx%7*Hsfn(YH44UL=xA z%1LKp3Xx}#bV!idq|Ebv`V6#baW0LM{+OKQ21Z(T<{th_j*(Xt)hu_wv?gI4RZ0yX+f4rb7es=h7)K`hK zV#AHfGKud`QL0oG9?J~E)y2)1p=FnuvKb3Y9>ebvKl=iDq`v#Em`=p9CRTiV`U<`S zEF&fmugVdMT2aI1gsuSiI&aZK<+UTP5oeG2Jn78SVlD%w&g>l4B|RO@ZDtWu{z+)5 z>@NGy-JT*9@IG+lQ7&v(q8cqn@HXt-!t!BrVUZ?$@V}yxP^1QyUhE5`amKuLtpeB> z%Uyd}bB9PTlyoSALxyF!Jz18Gh@3@{hO(IInKUNJZU(+D*6;u}fJ8Nn!6M9AzUZuD zzPm+cS>6h=yN?@#6prOTo{}1U+Cl66Ff{6=Y^J%-i0n!2$q}TM(z_x2vY4+8)%qob zhU)3i&=PFbgsI-ck(Z22(~E5U?_E{E*qK~!85e9P?Yfk)foXb%R1xm?rI6*3nd-`W zxAwvQ9|~b58;$^_!;Tx6|Z8)p>A=F@m?7{sij>BQJ?@nYoFpK(n`n|FyFu zsF~TVWhcszt>svIFm!`=faVvVwR1SXG1MJAra35qLbpPH5n*H z5v4dBb#MS>H-bstz}{r~A1~qwqeDv_R8eg1oiPOJ&q!I1w*^oP%rB56YI}q9GiX^p zY3hSiXhNm<6xu$z#}rTNAS#O|aAO^Ld-E?Zv>e6sh#%3E>Dl8x!PEMa7yBj7KEXfV zU9i_d22x+io7Fqr)Q^u3BBJR)RgtMbK(;nzzLNpXFjlM1J;R)?7>g3$jF1u3RXxFz z2u@$)Ir9;0QzZN(DUl?8$JjYs-`=o}3d}v1ys|W;awzyY!h3Rf6v7~k$i4?n*FY6> zTd>;*-_z35vWX8JUxhUZ*J=b+`$WzDI32GSQRh2Uq3fx>wR`$@OV8?jff~y(YLsb% z4ip18wIZq4a#_GgX-(F3sA3Xh8ygE8)jFYR5+-E!`zWNEkIb{s)|)fjh)t2zV(+N7)!WY-UB(sW``C+7 zeb+ozc-l@g2ya)ycLq6&1Gnbb_}c4`3gRrlxS>=)707D6i>0ZKN+zM^;4G&9f@-P- z1{Xn0iw{!~o}Nzpe9s-`Z*qy4P+BrY07oVYAHYEQ>|2n};*N0H{_woc9o`p&oe1=` zGmE;F|4`#Hu2j?rPc+&iO<1w;p+#o=VKMrZOO|0N328|qU;L*FqCwbTt4=JJxUPe# zPFO$_=T?7*SXVRaT-{u#_BIX-4oTI!VuS!Ts<#y*M>iFehz5txlEV2;sZG#G!H+L( z`SXpJ%K4!cR5}sRdP`Ke>3{y}dyNC*v9L%3@fR!nj^>ZswscF!Y!K^l&W0^pjGj+y z!o^^2#^=do@A45^)93{_yHtigQ%&8w*XqT{=Q3&rW7SGzkW^6Ye*B1i7)5 z!087*u*jpc^I)I`Y<_YtRiaNCBp&ALtDP-4+hE(rzPd}K&%v%SUlNSR>~SMjtg~Dq z+~_RCT#8k_#moqkmI}!E^L79X-8JUAR!nacuJVW!-?P)EJn=4jYn-hgWA#*~UmKB> zvWl8FEVmHT(L}PJagv{fP~!ubVR1XHFE*Q+SDAmD@pP1$4d(f{nIylGJ?tTroRSUw zB0U1xW%(&QEi^22xK3(^CcBqCAnL4@Fz1HclSec@unmSCm`v>RjVuQssXE3y*D~g# z(3ycb=lbQbG;7TpLL9&|DpeUNe5s3!m36{thfvp|xGCel)!*l7S=wU1qEG#R-u^gG zX}7!5b#RR?zaoRu6;$Loc1~BhA)|%>RX=X=ngtFT7OX@c<=abQ3Ds7X8l5-C3S%5q ztPFKpP&bY_IWHGH{&{-&=YF1B;&m=@pjIS@af9?9zNZWlDxSmNVGgEs&r8}=+GOM4 zikwTu)Z*mE-{Y+nhF9RYr`LYa9FE@acOLSwPIcs%RiEZ*d7gq_iZ}^B53ouQQSJ_I z$)SlTi0Z%6jRaHIW=Uhqbh9cAujWUh^o+;uEf+aW3@L^np7ECg75K6@9v0oRH7)i` z9wMf8r7xIlm19)68;#^GR|myx(fwp{R+&K)>4TBpjm9N52zI+aBGD$)hEB5lwDj<^wTrU4*tr%Q5IQP6?%!@3gpYp z&IxOO$2v5-bGWVy1i3hrTB~nVmOd!mh>By$&fDGd!wB2LK`$wk+zbiWsa(MTc)5?W9yVJ}$sdwr^x*6w<)d^yiT3 zsa%X=c1>eDYZnCZFd25Y&v_J?(LM#Ul_y;mWSAehZkk~{%D(1K$e7e8#`%n}2S^D;W^*wMpBNWI&==sasG{?3m?`m`)bXHhmiSriU zykK|A>ygnd`H>4-m_*N!WTkT|GE}14Cym`zBI{QIM9e;Vih(dgdihk!iqK$e;HwlD z9D>Z~jl(r&?lg#S!PB9=wotRo%@c}IY*ynUtm}(_nkGAdg&A1Us+1>TkB7*zB(9F* zBIgv3P&HxF)b59m0rY}|wQ&ls&{0a32s=g)=_o{NLydF&cd#dAZcFR$YINE`+fwtc zDXO$Um6w;9?X>KO{m9jZ&X@|<22<6V)*l!0)4#q-@!62Wj+bq{eI5MXbR`_{(MhDP zf=3gG<_wVeHNJoKpqD!`kLG@{k9V=ErcpRE!mU)RoSEj9w>WDv+>ba=pimvFU{00A z!+I(uJwMIZhco2}r-gG-vy9+5m9%jj(jkfirN;u7B^b+^y{L>xvtH1^xSZR=Y)pmY zW}D}UxfJ(KFiB@N`)WeEZe04Sc)XA2s8-UOIof;Q?~9TEE0~W(5jzc@4fwI&cr7Bb zrLmXWXjzZTp`e_{I6=U99zy(G9#_#73fHkp3kkH%EJ`I1 z>MV0bjGsup(qXKQu09Q?E+3J!V8$j|tGro0B#pKZ(K?%7W>!>YHmgdPUM}aDnp@V! z7Ezomr7|I{GLc)R#mYA8bo{58WseN1Qj}vByd5d;o?P4SX;Z9aHpq!5_et)%pWW^y z{Tjj`FYII|6y#qlhkhI zO^l`CIYp!q`{=i`?CK^M_JT=)960Ug_~aEO1P*N-$8W9=S2wC9AsL<-C9S{oakGM% z<9s8b?;LkdFiPq4g$Q|k2j8%5ikDB}3WFm~gT;zPts0q4|4a=LP0XSogEok^u*&AxRt-r-4iwbyb@Zs3X!|Fl9!n z!eUO#C0htW8U0Bk6N{}n`cPl5s`b@cSJX4d?ilnppb+qngHh~&}rHnJeMx`O#&0GAkF>>n^t1AktOHg|za=f#; z#s5JF16)SVe@#K$?DPN^Xivs-;-PH`QFCh%XRyb|GrVqNF<7fwT1?KW-HLBFU#<7T zrducxvkJE4XhfInpxQ&}F7iaM2*dUJw1$dbGg3p;Te*X? z-7qaq7ElfsoYLZp9N%iTCyvai@n%;aBbT*c9m(5tT{PY|FD$Lg%h)|T1W3{B;+#(ZknvD(sYdgRZHn`PN?5wgQ` zo2rf2zWwv1Tk>=Fi2Keegc>{PL@v6-G}D6=3tn1XY3`Ic#)o+e`V#KyLKQ@w_119u z11cvhg`%1p*0r&PxEOQ7NBj_3u7s^4E#2N~z0Gi*`{OYOwzH`iD%b3sZeBfLknm|H4 zc1?CfFoh=fCCOI-WoJS5a6|Yu_tLa8S^bv#Z13KQK1aIc%F>C#PO#0DTbf5;yfx~M zwq;(1@?PI40B_?fXVVw?3^zDPcVfWqNP4S(Hu`X9NkSW>(YajWd2X6uM)HbSDu zRLGdbSd~q2JIrx{>kH)vALz(`TAUty@4aec=pW7IiaPaoISb_kQ*`ns=uhf#+Idmh zc_G_3vbvEAvR<=qh7 zxL-I?H{V9W!ASC-WA8oTF`d-`h49FN!v-HtX;W+-#{oog64g{r`y+$x2x^Kf<3}hIWxp7`t z?)E3ClNyQ;24PN~XjOX^RDL3(?p}1#$u)B#ohXn==k|(i**-%Yk~EEZCmFIR&sSD+N%Jangd2vW<9ehRk zA*LYHb5S_X%aF6>xXR}Ogb*j9>5 zke(5&R$ivibLPI@(5TAsjtHkWExb)g6Qw~-Wp3c30R3IxOx9R!38 zBw;s%EP>x012D((>HckN=E|}G1|0|@NA+#hI-V}2m<+aY3I=V36xD(;wXO+k-aw18XmhhR*Iiq~fW*3=Q0t^YC9 z@#LgW%APkQqQm1gfK$&Jr{SudoUiHaNmn& zS&~hHs1#z#6j^wI*oF9EArS@Z_o;z&ge*0=kk0Vr+0zNvc{*4BT~AsJ>l|wzbI!9jqv!dQcnfyjGu3Fs_5n_Huuh z{kJ2zj@kwp#argakHV%x+>PA)Z%TecxEtaz92ON4ZA=L+leCI#Q5PbcFznEQ(!HyB zI$r=R{3G!V5(F0N9_@nyJux@}hm*_ss?4-xbCTLN(wAjEEh>+S@W0na9y!U9zZYfc ziddlB#>u4Ut?h$sH0ngOOa1%TSi*K&{J`e{Q!{=}3owg2;&u4ZCfX~5-ylm!XiJCE3v|~aMhb8(qhQk5D z;KXE@o-)b`r>C7w$L*L-6q4ZY>=V2kR9G9}GjA+#amvX&zcr;Mp^KJwk0EJdX0RFS z>3ndFCKqkWZ}&@mL#6-nm+$RAfzzyss*DMua;naUwVypI98VP4J?=C47wEiPbFxHO znpbk;v{)lVS3IH0&wjKSYtWb7I_Ut_=WXKY%_d;csSc)t`ZLJySiEIB4b<}Ec#n;&TCDT-7=RGsbQMR6J}_P^Ql_EZw=&3*o0ozpM zYQ32aqCuYqnwQ+rvT1h5Z4c(epFm{~_KN!j3%oy&=ihrO6Xr4e-NuM+zoD6vrkT1k z!|!$lvk~&7S^Ld#sCANKsZF5dv<{EyZfTPDE%RzIayypkZ#wbxkGmBs$hcS)69F9o z`lr&BO4nFsNb1FH*1v~4Xkmc1ees`6MPgCG4|S~fs~M+FWVX(UN`Jvje$1@%lDz!} zU8%goJDUyOc$2vqc1_3Z(5cH1_A7aBsoJ4U@c$Ov`vvkaL?xD{WZak^(}@jw15Va2 zw=?FzlX+Wc1T%`IkDJ0ybvZue<8tVTJc@u$;L2-1pi97Wve%^c7f8u8)HL%Jx|K@TAi_(}tsv%OaXwe4?buunM%;gh&an{)VJh`4>E;`~`y@I=22 z>V z#iv?Zm$YhtoDuRDV{N5#f8_^Rb3*-sYu#JcIhfbTaBW@4R_$t#i(OR8LwgK}$dpYt z_V(eDgF=OJk!n&--yXI>QhoE3!G6_sjNt^dSZ3G5j4=R4QwFypzyG_}OTVIg&add? zpsG8{?Kez6d^@{2PN=>%c5W){6@+L&Hn<%A>Wr&6 z3eo5RmJ2feqb6T?59z7F8y9#+_?IKpknMj8_D{dfu%O|8Kq>g&?wbk0Z2xrT91mvv z2VR3Y{sFcSp?|Q*b0OD*ZBWsEd8%>tkS13#V2D4>mTEPUPLn-7tGW8-+(S79Pgiz_RkSh z_kTy=T@ey0!~gH3{~ZDT&y*k_g?>q%|A_~Y6YL_W!IlCO`a(q$wj)poFFy generatedJavaFiles = new ArrayList<>(); // 视图表过滤逻辑 - String tableName = introspectedTable.getFullyQualifiedTable().getIntrospectedTableName().toUpperCase(); - if (isViewTable(tableName)) { + if (ElementTools.isViewTable(introspectedTable)) { return generatedJavaFiles; } @@ -135,18 +129,6 @@ public class TapeRepositoryGeneratorPlugin extends PluginAdapter { return generatedJavaFiles; } - private boolean isViewTable(String tableName) { - if (StringUtility.stringHasValue(viewKeyWords)) { - String[] keywords = viewKeyWords.split(","); - for (String keyword : keywords) { - if (tableName.contains(keyword.trim().toUpperCase())) { - return true; - } - } - } - return false; - } - /** * 核心修改:生成Repository接口(手动添加所有方法,无继承,匹配指定格式) */ diff --git a/src/main/java/com/iqudoo/framework/mybatis/TapeRepoviewGeneratorPlugin.java b/src/main/java/com/iqudoo/framework/mybatis/TapeRepoviewGeneratorPlugin.java index 8ef2b23..7bcd3e7 100644 --- a/src/main/java/com/iqudoo/framework/mybatis/TapeRepoviewGeneratorPlugin.java +++ b/src/main/java/com/iqudoo/framework/mybatis/TapeRepoviewGeneratorPlugin.java @@ -27,7 +27,6 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter { private String modelPackage = "com.iqudoo.platform.application.database.model"; private String mapperPackage = "com.iqudoo.platform.application.database.mapper"; private String targetProject = "src/main/java"; - private String viewKeyWords = "VIEW_,V_"; // 1.4.1版本专用格式化器 private JavaFormatter javaFormatter; @@ -56,10 +55,6 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter { modelPackage = stringConfig("modelPackage", modelPackage); mapperPackage = stringConfig("mapperPackage", mapperPackage); targetProject = stringConfig("targetProject", targetProject); - viewKeyWords = stringConfig("viewKeyWords", viewKeyWords); - if (StringUtility.stringHasValue(viewKeyWords)) { - viewKeyWords = viewKeyWords.toUpperCase(); - } } private String stringConfig(String key, String defaultValue) { @@ -82,13 +77,10 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter { @Override public List contextGenerateAdditionalJavaFiles(IntrospectedTable introspectedTable) { List generatedJavaFiles = new ArrayList<>(); - // 仅处理视图表,非视图表直接返回 - String tableName = introspectedTable.getFullyQualifiedTable().getIntrospectedTableName().toUpperCase(); - if (!isViewTable(tableName)) { + if (!ElementTools.isViewTable(introspectedTable)) { return generatedJavaFiles; } - // 1. 获取视图表元数据 String domainObjectName = introspectedTable.getFullyQualifiedTable().getDomainObjectName(); String exampleClassName = domainObjectName + "Example"; @@ -132,22 +124,6 @@ public class TapeRepoviewGeneratorPlugin extends PluginAdapter { return generatedJavaFiles; } - /** - * 判断是否为视图表(关键字匹配 + MBG原生视图配置) - */ - private boolean isViewTable(String tableName) { - // 关键字匹配 - if (StringUtility.stringHasValue(viewKeyWords)) { - String[] keywords = viewKeyWords.split(","); - for (String keyword : keywords) { - if (tableName.contains(keyword.trim().toUpperCase())) { - return true; - } - } - } - return false; - } - /** * 核心修改:生成视图Repo接口(移除继承,手动添加指定方法) */ diff --git a/src/main/java/com/iqudoo/framework/mybatis/utils/ElementTools.java b/src/main/java/com/iqudoo/framework/mybatis/utils/ElementTools.java index 1be29dd..e43f314 100644 --- a/src/main/java/com/iqudoo/framework/mybatis/utils/ElementTools.java +++ b/src/main/java/com/iqudoo/framework/mybatis/utils/ElementTools.java @@ -9,6 +9,17 @@ import static org.mybatis.generator.internal.util.messages.Messages.getString; @SuppressWarnings("unused") public class ElementTools { + /** + * 判断IntrospectedTable是否代表数据库视图 + * + * @param introspectedTable MBG内省表对象 + * @return true=视图,false=普通表/其他类型 + */ + public static boolean isViewTable(IntrospectedTable introspectedTable) { + String tableType = introspectedTable.getTableType(); + return "VIEW".equals(tableType); + } + /** * 检测数据表是否含有BLOB列数据 *