From 1a9547769de4be74e4170f521b74df4c24553024 Mon Sep 17 00:00:00 2001 From: walon Date: Thu, 1 Jul 2021 10:16:54 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=90=E6=9B=B4=E6=96=B0=E3=80=91=20?= =?UTF-8?q?=E6=9B=B4=E6=96=B0readme=20=E6=9B=B4=E6=96=B0=E5=85=B3=E4=BA=8E?= =?UTF-8?q?=E5=8F=AF=E7=A9=BA=E6=95=B0=E6=8D=AE=E7=9A=84=E4=BB=8B=E7=BB=8D?= =?UTF-8?q?=20=E3=80=90=E8=B0=83=E6=95=B4=E3=80=91=20=E5=A2=9E=E5=8A=A0?= =?UTF-8?q?=E7=B1=BB=E5=9E=8B=E5=90=8D=E4=BD=9C=E4=B8=BA=E5=8F=AF=E7=A9=BA?= =?UTF-8?q?=E9=9D=9E=E5=A4=9A=E6=80=81bean=E7=9A=84=E9=9D=9E=E7=A9=BA?= =?UTF-8?q?=E6=A0=87=E8=AF=86=EF=BC=88=E4=B8=8E=E5=A4=9A=E6=80=81=E4=B8=80?= =?UTF-8?q?=E8=87=B4=EF=BC=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 50 ++++++++++++------ config/Datas/test/test_null.xlsx | Bin 9180 -> 9222 bytes docs/images/examples/ex_42.png | Bin 7598 -> 10556 bytes .../Source/DataCreators/ExcelDataCreator.cs | 4 +- .../DataCreators/ExcelNamedRowDataCreator.cs | 4 +- 5 files changed, 37 insertions(+), 21 deletions(-) diff --git a/README.md b/README.md index a3b3aa6..74d17f0 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,3 @@ -[//]: # "Author: bug" -[//]: # "Date: 2020-10-20 20:24:07" # Luban @@ -26,6 +24,14 @@ Luban适合有以下需求的开发者: 3. 希望做其他自定义生成或者缓存 +## 支持和联系 + +有使用上的疑问请即时加QQ群询问,随时帮助解决。 + + - QQ 群: 692890842 + - 邮箱: taojingjian#gmail.com + + ## 文档 - [主页](https://focus-creative-games.github.io/luban/index.html) @@ -115,9 +121,9 @@ Luban适合有以下需求的开发者: ![ex_2](docs/images/examples/ex_2.png) -- name="TbDemoPrivitive" 表示数据表名为TbDemoPrivitive,生成table的代码时使用这个类名。 +- name="TbDemoPrimitive" 表示数据表名为TbDemoPrimitive,生成table的代码时使用这个类名。 - value="DemoPrimitiveTypesTable" 表示数据表每行记录(即KV中的V)的类型为DemoPrimitiveTypesTable。 -- index="x4" 表示数据表以 类型的x4字段为key。 +- index="x4" 表示数据表以 类型的x4字段为key。可不填,**默认为第一个字段**。 - input="demo_primitive.xlsx" 表示数据表的数据文件为 demo_primitives.xlsx ### 枚举 @@ -194,16 +200,31 @@ Luban适合有以下需求的开发者: ![ex_32](docs/images/examples/ex_32.png) ### 可空数据类型 -配置数据中经常有空值的语义需求,实际项目中往往混杂地使用0或-1表达空值,既不自然清晰也不统一。luban借鉴了c#中的可空变量的概念,特地提供可空数据支持。除了string外的所有原生数据类型,以及enum类型都有相应的可空数据类型。定义方式为 <类型名>?,与c#里的Nullable类型定义方式相同。例如 bool?,int?,long?,double?, EColor? +配置数据中经常有空值的语义需求,实际项目中往往混杂地使用0或-1表达空值,既不自然清晰也不统一。luban借鉴了c#中的可空变量的概念,特地提供可空数据支持。除了string外的所有原生数据类型,以及enum、bean、和多态bean类型都有相应的可空数据类型。定义方式为 <类型名>?,与c#里的Nullable类型定义方式相同。例如 bool?,int?,long?,double?, EColor?, DemoType? ```xml - - - - - - - + + + + 多态数据结构 + + + + + + + + + + + + + + + + + +
``` ![ex_42](docs/images/examples/ex_42.png) @@ -771,12 +792,7 @@ return - [.NET Core source index](https://source.dot.net) -## 支持和联系 -``` - QQ 群: 692890842 - 邮箱: taojingjian#gmail.com -``` ## License diff --git a/config/Datas/test/test_null.xlsx b/config/Datas/test/test_null.xlsx index df6a02752660dbe0894fbd2f23a07f43739b6598..872cf943d8b1ec283c0faded2178718223b656b2 100644 GIT binary patch delta 3013 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 delta 2984 zcmY+Gc{~%28^^~s4Pk}Gkc<`?ra5xW5fbIhFe>HD92s(rh2~1M&3%5$k)s^VE#)ZY z%AKPak@%uS2;o=1KYG2s&tK2$_4)kwe4gk1L>qm)SlP`%wm?ZYL4g3kcMbr64*&oJ zc`5|@5DB+@dFtsS7nI+E-8^0@C++(3LWzl9ZVD&>*jAUfIP;wX*g zAej7bslVnJPfk2Ku@+MG3leRMvNg1#DhqxN;YQrPq%>dyF0+ooxrj%U#X2b09On*WA9$DggL*g~ zfDY%6?DIW}jh@$_Vb9UqwPc0EY1Z|fTzrn>`{&>sw`=fm5%u%^4}m z`^Kp!c<%tKqI0byN4=uDdS)NdeE;Ya`O!rttQf&c*#Jv{woe8joqnxpW^gpeX|$*$ zu8nVXhWDT3LwG(Nbj&o}ANjVK54&R+?Ta+Ze~=?^)IXBM+@mg?neacc(!tZir<6N2 z)vvPORK#c&is^eC*tv)o(|3w~zmWUg;aMwqCCbVy<|gzMVG91uuAJNan!xTJxj{Tx zj@vO|KO90g7mc=y%zb)(bBg+b(Jsv+0ie2V59hjtevu3mo$Y$Fydx+1MX+!y2<+kI z^SxHeyO;W4R#Y`i#M!xPd__Wm_z_vPhmv&RIPKVY_ojH$bj!1UM8Zn^KSb>c4FDA` zQZ?4R0w=jWUuy$Gumf2?OH_Ff3e3Ut=pDte3%|5^yJ{hyzD_HmxDlJrr6#z%%Lt7^ z{NTt*br4B6NsRDx&*LYIP6Y}uIJq$Fya8Butn}~2aXbP52m$C>2sk;LW}lRWhEiCv zo7$&dM@2wi{PW1V(Qf3Wb#t?ZD+EV+T^+J(040{5fbSsPZ-DNZ!uIrLGyk zd(M1Wn!X~Zj^8k(`8l&9FW{#>`QxJN{caxTYKOZ~G&N5%>G&C+!#qE+gvPjTWmSg+37oV>y z3GVD&MWr$9&heaKSRZ%w#mDrFjiP$#3U*?!V2jtzhs;~kke9Qq){c*#GtbG4sXczM zlb*+7PyBjKEU0#e?Rfo>5hEk?8$YLB@A3K$T!Ox;w@_?CsP8@4qZfz@HRP}U;)v5+ z16gf*yQR3Khyzzd6bHUG?Vw3599*@k+3jkfZt(QN)$WCt?464F#bSlbeLlJjZ>o0S z-5!@)m*r9{Du*u04qaS_`+A!Xypv20Ws^NoNj%9&=#)+996FCTE-IBa}t&P{y|Su9XZ1eypWuOCy?FK#41ZAK=^{L zk#SFezlj=HEnyHdf{#3WRdaS*(by_Bu4TI~zJhUhYYs>`ynXl<_Mx+}iGys_VaPTJ zrwKYIB8>~s|N5`?Sb@8_jn;AULc8-Tma|q+!@wKnCWe0e5uZCc?9c4F)|#klaAR({ zMlQ&su`g9%agm#i`ri~j~2NZd(du& z5`Nw(KXM0jORKYMY+>`0x<5aKi+1=x9UIN%War3&^ z(V=^shY~zxN2Jll#e73cc==8TnBwle`4HN81OS;n-as>!TTmwJ|4g?LuK z8JQ-DCJyz57*-V2LKWeYW>+X&DB#fIQ)P$hwZO#qj>V@_yQHeA!p9ohV}60^64a*H z_x7rp-tRwnHLhJCZ)_|E{J2*~4eQlaE!^D}4`< zy_1yR5;za+P0js7M(_1=c7xA3UZ#i7=@ev{jTuSrA5TZt;Rq_D923GjK=+?3D*ztMwcuL z4AvHO#ZRr6HbpqUaCI#-AO%WparP?mV-GTJ_I}NNviqh@f=(HI0i=w4kr?P|+xxIF zB`JNvEGj8upbad1_v=;%`ax;xc$@S&ubPGMH}k<6X9{-xdQS(J^b?0P1%CjOVrfsV z2TnzqUc*9*vHeoYfk2O7+; z8T3tU=W9dSd{30e6NSoh?|=w*J#!Gg`o;SucCS)v(gVbohSZn0l?4_dymCFuWe!3} zJa>PsvSS#JJeSmJIvP9~>Lb))x}xiw28!YRR9i!i-!q>SQ*j`ziOnQG0^?>H=5yyx z3T4H`ni|O<3wEme0FT%&0J*9I(~$y)L0Yz-4@hWf%+u2S!TUL;zF$0L41I~>4qC!Z z>ob2sx4eBK>!|{uYX!i7;S`r_UgeB7ZJ_ z;cxK!a0385e;t1sVY-CmDbc^t{Ou9=kG=$_Uz0?N{(qKi0Dv_+0C4O-hC>m0o}?Dr OUHX)yB!{8IAMJm5<877z diff --git a/docs/images/examples/ex_42.png b/docs/images/examples/ex_42.png index 776b041b3744389e4c19887fc7282a91d36ee7de..d240682af157c59c02c22a15d3f786ecca0fcc5e 100644 GIT binary patch literal 10556 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 R>;axZiceH!^QB*X{100g_O<{3 literal 7598 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 MXu@xo+_Vk-FNX(!v;Y7A diff --git a/src/Luban.Job.Cfg/Source/DataCreators/ExcelDataCreator.cs b/src/Luban.Job.Cfg/Source/DataCreators/ExcelDataCreator.cs index a121ebc..c7df47d 100644 --- a/src/Luban.Job.Cfg/Source/DataCreators/ExcelDataCreator.cs +++ b/src/Luban.Job.Cfg/Source/DataCreators/ExcelDataCreator.cs @@ -352,9 +352,9 @@ namespace Luban.Job.Cfg.DataCreators { return null; } - else if (subType != DefBean.BEAN_NOT_NULL_STR) + else if (subType != DefBean.BEAN_NOT_NULL_STR && subType != originBean.Name) { - throw new Exception($"type:{type.Bean.FullName} 可空标识:{subType} 不合法(只能为{DefBean.BEAN_NOT_NULL_STR}或{DefBean.BEAN_NULL_STR})"); + throw new Exception($"type:{type.Bean.FullName} 可空标识:{subType} 不合法(只能为{DefBean.BEAN_NOT_NULL_STR}或{DefBean.BEAN_NULL_STR}或{originBean.Name})"); } } return new DBean(originBean, originBean, CreateBeanFields(originBean, x, ass)); diff --git a/src/Luban.Job.Cfg/Source/DataCreators/ExcelNamedRowDataCreator.cs b/src/Luban.Job.Cfg/Source/DataCreators/ExcelNamedRowDataCreator.cs index 576ccd6..0b8d61f 100644 --- a/src/Luban.Job.Cfg/Source/DataCreators/ExcelNamedRowDataCreator.cs +++ b/src/Luban.Job.Cfg/Source/DataCreators/ExcelNamedRowDataCreator.cs @@ -208,9 +208,9 @@ namespace Luban.Job.Cfg.DataCreators { return null; } - else if (subType != DefBean.BEAN_NOT_NULL_STR) + else if (subType != DefBean.BEAN_NOT_NULL_STR && subType != originBean.Name) { - throw new Exception($"type:{type.Bean.FullName} {DefBean.TYPE_NAME_KEY}:{subType} 不合法(只能为{DefBean.BEAN_NOT_NULL_STR}或{DefBean.BEAN_NULL_STR})"); + throw new Exception($"type:{type.Bean.FullName} 可空标识:{subType} 不合法(只能为{DefBean.BEAN_NOT_NULL_STR}或{DefBean.BEAN_NULL_STR}或{originBean.Name})"); } }