@@ -223,20 +223,32 @@ private void processEntityClass(TopLevelClass topLevelClass, IntrospectedTable i
223
223
}
224
224
}
225
225
if (generateDefaultInstanceMethod ) {
226
+ //注意基本类型和包装的index要一致,方便后面使用
227
+ List <String > baseClassName = Arrays .asList ("byte" , "short" , "char" , "int" , "long" , "float" , "double" , "boolean" );
228
+ List <String > wrapperClassName = Arrays .asList ("Byte" , "Short" , "Character" , "Integer" , "Long" , "Float" , "Double" , "Boolean" );
229
+ List <String > otherClassName = Arrays .asList ("String" , "BigDecimal" , "BigInteger" );
226
230
Method defaultMethod = new Method ();
231
+ //增加方法注释
232
+ defaultMethod .addJavaDocLine ("/**" );
233
+ defaultMethod .addJavaDocLine (" * 带默认值的实例" );
234
+ defaultMethod .addJavaDocLine ("*/" );
227
235
defaultMethod .setStatic (true );
228
236
defaultMethod .setName ("defaultInstance" );
229
237
defaultMethod .setVisibility (JavaVisibility .PUBLIC );
230
238
defaultMethod .setReturnType (topLevelClass .getType ());
231
239
defaultMethod .addBodyLine (String .format ("%s instance = new %s();" , topLevelClass .getType ().getShortName (), topLevelClass .getType ().getShortName ()));
232
240
for (IntrospectedColumn introspectedColumn : introspectedTable .getAllColumns ()) {
233
241
String shortName = introspectedColumn .getFullyQualifiedJavaType ().getShortName ();
234
- List <String > supportType = Arrays .asList ("Byte" , "Short" , "Character" , "Integer" , "Long" , "Float" , "Double" , "String" , "BigDecimal" , "BigInteger" );
235
- if (!supportType .contains (shortName )) {
242
+ if (!baseClassName .contains (shortName ) && !wrapperClassName .contains (shortName ) && !otherClassName .contains (shortName )) {
236
243
continue ;
237
244
}
238
245
if (introspectedColumn .getDefaultValue () != null ) {
239
246
String defaultValue = introspectedColumn .getDefaultValue ();
247
+ //处理备注中带有类型描述情况,如 postgresql中存在 ''::character varying
248
+ if (defaultValue .matches ("'\\ .*'::\\ w+(\\ s\\ w+)?" )) {
249
+ //
250
+ defaultValue = defaultValue .substring (0 , defaultValue .lastIndexOf ("::" ));
251
+ }
240
252
//去除前后'',如 '123456' -> 123456
241
253
if (defaultValue .startsWith ("'" ) && defaultValue .endsWith ("'" )) {
242
254
if (defaultValue .length () == 2 ) {
@@ -246,15 +258,27 @@ private void processEntityClass(TopLevelClass topLevelClass, IntrospectedTable i
246
258
}
247
259
}
248
260
//暂不支持时间类型默认值识别,不同数据库表达式不同
249
- if ("Boolean" .equals (shortName )) {
261
+ if ("Boolean" .equals (shortName ) || "boolean" . equals ( shortName ) ) {
250
262
if ("0" .equals (defaultValue )) {
251
263
defaultValue = "false" ;
252
264
} else if ("1" .equals (defaultValue )) {
253
265
defaultValue = "true" ;
254
266
}
255
267
}
256
- //通过 new 方法转换
257
- defaultMethod .addBodyLine (String .format ("instance.%s = new %s(\" %s\" );" , introspectedColumn .getJavaProperty (), shortName , defaultValue ));
268
+
269
+ if ("String" .equals (shortName )) {
270
+ //字符串,不通过new String 创建
271
+ // 其实通过new String 没有任何问题,不过强迫症,idea会提示,所以改了
272
+ defaultMethod .addBodyLine (String .format ("instance.%s = \" %s\" ;" , introspectedColumn .getJavaProperty (), defaultValue ));
273
+ } else {
274
+ String javaProperty = introspectedColumn .getJavaProperty ();
275
+ if (baseClassName .contains (shortName )) {
276
+ //基本类型,转成包装类的new 创建
277
+ javaProperty = wrapperClassName .get (baseClassName .indexOf (shortName ));
278
+ }
279
+ //通过 new 方法转换
280
+ defaultMethod .addBodyLine (String .format ("instance.%s = new %s(\" %s\" );" , javaProperty , shortName , defaultValue ));
281
+ }
258
282
}
259
283
260
284
}
0 commit comments