31
31
import org .mybatis .generator .config .Context ;
32
32
import org .mybatis .generator .internal .util .StringUtility ;
33
33
34
- import java .util .HashSet ;
35
- import java .util .Properties ;
36
- import java .util .Set ;
34
+ import java .util .*;
37
35
38
36
/**
39
37
* 通用Mapper生成器插件
@@ -69,6 +67,10 @@ public class MapperPlugin extends FalseMethodPlugin {
69
67
private boolean needsEqualsAndHashCode = false ;
70
68
//是否生成字段名常量
71
69
private boolean generateColumnConsts = false ;
70
+ //是否生成默认的属性的静态方法
71
+ private boolean generateDefaultInstanceMethod = false ;
72
+ //是否生成swagger注解,包括 @ApiModel和@ApiModelProperty
73
+ private boolean needsSwagger = false ;
72
74
73
75
public String getDelimiterName (String name ) {
74
76
StringBuilder nameBuilder = new StringBuilder ();
@@ -145,21 +147,34 @@ private void processEntityClass(TopLevelClass topLevelClass, IntrospectedTable i
145
147
topLevelClass .addAnnotation ("@EqualsAndHashCode" );
146
148
}
147
149
//lombok扩展结束
150
+ // region swagger扩展
151
+ if (this .needsSwagger ) {
152
+ //导包
153
+ topLevelClass .addImportedType ("io.swagger.annotations.ApiModel" );
154
+ topLevelClass .addImportedType ("io.swagger.annotations.ApiModelProperty" );
155
+ //增加注解(去除注释中的转换符)
156
+ String remarks = introspectedTable .getRemarks ();
157
+ if (remarks == null ) {
158
+ remarks = "" ;
159
+ }
160
+ topLevelClass .addAnnotation ("@ApiModel(\" " + remarks .replaceAll ("\r " , "" ).replaceAll ("\n " , "" ) + "\" )" );
161
+ }
162
+ // endregion swagger扩展
148
163
String tableName = introspectedTable .getFullyQualifiedTableNameAtRuntime ();
149
164
//如果包含空格,或者需要分隔符,需要完善
150
165
if (StringUtility .stringContainsSpace (tableName )) {
151
166
tableName = context .getBeginningDelimiter ()
152
- + tableName
153
- + context .getEndingDelimiter ();
167
+ + tableName
168
+ + context .getEndingDelimiter ();
154
169
}
155
170
//是否忽略大小写,对于区分大小写的数据库,会有用
156
171
if (caseSensitive && !topLevelClass .getType ().getShortName ().equals (tableName )) {
157
172
topLevelClass .addAnnotation ("@Table(name = \" " + getDelimiterName (tableName ) + "\" )" );
158
173
} else if (!topLevelClass .getType ().getShortName ().equalsIgnoreCase (tableName )) {
159
174
topLevelClass .addAnnotation ("@Table(name = \" " + getDelimiterName (tableName ) + "\" )" );
160
175
} else if (StringUtility .stringHasValue (schema )
161
- || StringUtility .stringHasValue (beginningDelimiter )
162
- || StringUtility .stringHasValue (endingDelimiter )) {
176
+ || StringUtility .stringHasValue (beginningDelimiter )
177
+ || StringUtility .stringHasValue (endingDelimiter )) {
163
178
topLevelClass .addAnnotation ("@Table(name = \" " + getDelimiterName (tableName ) + "\" )" );
164
179
} else if (forceAnnotation ) {
165
180
topLevelClass .addAnnotation ("@Table(name = \" " + getDelimiterName (tableName ) + "\" )" );
@@ -175,8 +190,56 @@ private void processEntityClass(TopLevelClass topLevelClass, IntrospectedTable i
175
190
field .setInitializationString ("\" " + introspectedColumn .getJavaProperty () + "\" " );
176
191
context .getCommentGenerator ().addClassComment (topLevelClass , introspectedTable );
177
192
topLevelClass .addField (field );
193
+ //增加字段名常量,用于pageHelper
194
+ Field columnField = new Field ();
195
+ columnField .setVisibility (JavaVisibility .PUBLIC );
196
+ columnField .setStatic (true );
197
+ columnField .setFinal (true );
198
+ columnField .setName ("DB_" + introspectedColumn .getActualColumnName ().toUpperCase ()); //$NON-NLS-1$
199
+ columnField .setType (new FullyQualifiedJavaType (String .class .getName ())); //$NON-NLS-1$
200
+ columnField .setInitializationString ("\" " + introspectedColumn .getActualColumnName () + "\" " );
201
+ topLevelClass .addField (columnField );
178
202
}
179
203
}
204
+ if (generateDefaultInstanceMethod ) {
205
+ Method defaultMethod = new Method ();
206
+ defaultMethod .setStatic (true );
207
+ defaultMethod .setName ("defaultInstance" );
208
+ defaultMethod .setVisibility (JavaVisibility .PUBLIC );
209
+ defaultMethod .setReturnType (topLevelClass .getType ());
210
+ defaultMethod .addBodyLine (String .format ("%s instance = new %s();" , topLevelClass .getType ().getShortName (), topLevelClass .getType ().getShortName ()));
211
+ for (IntrospectedColumn introspectedColumn : introspectedTable .getAllColumns ()) {
212
+ String shortName = introspectedColumn .getFullyQualifiedJavaType ().getShortName ();
213
+ List <String > supportType = Arrays .asList ("Byte" , "Short" , "Character" , "Integer" , "Long" , "Float" , "Double" , "String" , "BigDecimal" , "BigInteger" );
214
+ if (!supportType .contains (shortName )) {
215
+ continue ;
216
+ }
217
+ if (introspectedColumn .getDefaultValue () != null ) {
218
+ String defaultValue = introspectedColumn .getDefaultValue ();
219
+ //去除前后'',如 '123456' -> 123456
220
+ if (defaultValue .startsWith ("'" ) && defaultValue .endsWith ("'" )) {
221
+ if (defaultValue .length () == 2 ) {
222
+ defaultValue = "" ;
223
+ } else {
224
+ defaultValue = defaultValue .substring (1 , defaultValue .length () - 1 );
225
+ }
226
+ }
227
+ //暂不支持时间类型默认值识别,不同数据库表达式不同
228
+ if ("Boolean" .equals (shortName )) {
229
+ if ("0" .equals (defaultValue )) {
230
+ defaultValue = "false" ;
231
+ } else if ("1" .equals (defaultValue )) {
232
+ defaultValue = "true" ;
233
+ }
234
+ }
235
+ //通过 new 方法转换
236
+ defaultMethod .addBodyLine (String .format ("instance.%s = new %s(\" %s\" );" , introspectedColumn .getJavaProperty (), shortName , defaultValue ));
237
+ }
238
+
239
+ }
240
+ defaultMethod .addBodyLine ("return instance;" );
241
+ topLevelClass .addMethod (defaultMethod );
242
+ }
180
243
}
181
244
182
245
/**
@@ -254,6 +317,8 @@ public void setContext(Context context) {
254
317
}
255
318
//支持oracle获取注释#114
256
319
context .getJdbcConnectionConfiguration ().addProperty ("remarksReporting" , "true" );
320
+ //支持mysql获取注释
321
+ context .getJdbcConnectionConfiguration ().addProperty ("useInformationSchema" , "true" );
257
322
}
258
323
259
324
@ Override
@@ -283,15 +348,22 @@ public void setProperties(Properties properties) {
283
348
this .needsEqualsAndHashCode = !this .needsData && lombok .contains ("EqualsAndHashCode" );
284
349
this .needsAccessors = lombok .contains ("Accessors" );
285
350
}
351
+ //swagger扩展
352
+ String swagger = getProperty ("swagger" , "false" );
353
+ if ("true" .equalsIgnoreCase (swagger )) {
354
+ this .needsSwagger = true ;
355
+ }
286
356
if (useMapperCommentGenerator ) {
287
357
commentCfg .addProperty ("beginningDelimiter" , this .beginningDelimiter );
288
358
commentCfg .addProperty ("endingDelimiter" , this .endingDelimiter );
289
359
String forceAnnotation = getProperty ("forceAnnotation" );
290
360
if (StringUtility .stringHasValue (forceAnnotation )) {
291
361
commentCfg .addProperty ("forceAnnotation" , forceAnnotation );
292
362
}
363
+ commentCfg .addProperty ("needsSwagger" , this .needsSwagger + "" );
293
364
}
294
365
this .generateColumnConsts = getPropertyAsBoolean ("generateColumnConsts" );
366
+ this .generateDefaultInstanceMethod = getPropertyAsBoolean ("generateDefaultInstanceMethod" );
295
367
}
296
368
297
369
protected String getProperty (String key ) {
0 commit comments