Ver Fonte

重写SerializablePlugin,使mybatis generator生成的Example类也支持实现序列化,支持分布式

shuzheng há 9 anos atrás
pai
commit
68a272a3b4

+ 94 - 0
zheng-common/src/main/java/com/zheng/common/plugin/SerializablePlugin.java

@@ -0,0 +1,94 @@
+package com.zheng.common.plugin;
+
+import org.mybatis.generator.api.IntrospectedTable;
+import org.mybatis.generator.api.PluginAdapter;
+import org.mybatis.generator.api.dom.java.*;
+
+import java.util.List;
+import java.util.Properties;
+
+/**
+ * Created by shuzheng on 2017/1/1.
+ */
+public class SerializablePlugin extends PluginAdapter {
+    private FullyQualifiedJavaType serializable = new FullyQualifiedJavaType("java.io.Serializable");
+    private FullyQualifiedJavaType gwtSerializable = new FullyQualifiedJavaType("com.google.gwt.user.client.rpc.IsSerializable");
+    private boolean addGWTInterface;
+    private boolean suppressJavaInterface;
+
+    public SerializablePlugin() {
+    }
+
+    public boolean validate(List<String> warnings) {
+        return true;
+    }
+
+    public void setProperties(Properties properties) {
+        super.setProperties(properties);
+        this.addGWTInterface = Boolean.valueOf(properties.getProperty("addGWTInterface")).booleanValue();
+        this.suppressJavaInterface = Boolean.valueOf(properties.getProperty("suppressJavaInterface")).booleanValue();
+    }
+
+    public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
+        this.makeSerializable(topLevelClass, introspectedTable);
+        return true;
+    }
+
+    public boolean modelPrimaryKeyClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
+        this.makeSerializable(topLevelClass, introspectedTable);
+        return true;
+    }
+
+    public boolean modelRecordWithBLOBsClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
+        this.makeSerializable(topLevelClass, introspectedTable);
+        return true;
+    }
+
+    protected void makeSerializable(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
+        if(this.addGWTInterface) {
+            topLevelClass.addImportedType(this.gwtSerializable);
+            topLevelClass.addSuperInterface(this.gwtSerializable);
+        }
+
+        if(!this.suppressJavaInterface) {
+            topLevelClass.addImportedType(this.serializable);
+            topLevelClass.addSuperInterface(this.serializable);
+            Field field = new Field();
+            field.setFinal(true);
+            field.setInitializationString("1L");
+            field.setName("serialVersionUID");
+            field.setStatic(true);
+            field.setType(new FullyQualifiedJavaType("long"));
+            field.setVisibility(JavaVisibility.PRIVATE);
+            this.context.getCommentGenerator().addFieldComment(field, introspectedTable);
+            topLevelClass.addField(field);
+        }
+
+    }
+
+    /**
+     * 添加给Example类序列化的方法
+     * @param topLevelClass
+     * @param introspectedTable
+     * @return
+     */
+    @Override
+    public boolean modelExampleClassGenerated(TopLevelClass topLevelClass,IntrospectedTable introspectedTable){
+        makeSerializable(topLevelClass, introspectedTable);
+
+        for (InnerClass innerClass : topLevelClass.getInnerClasses()) {
+            if ("GeneratedCriteria".equals(innerClass.getType().getShortName())) {
+                innerClass.addSuperInterface(serializable);
+            }
+            if ("Criteria".equals(innerClass.getType().getShortName())) {
+                innerClass.addSuperInterface(serializable);
+            }
+            if ("Criterion".equals(innerClass.getType().getShortName())) {
+                innerClass.addSuperInterface(serializable);
+            }
+        }
+
+        return true;
+    }
+
+}