mybatis-generator 插件扩展,序列化针对 实体类(model)、 example类
MyBatis Generator生成DAO 的时候,生成的类都是没有序列化的,查看源码,Mybatis Generator 默认提供的是有序列化插件的,但是这个插件是仅仅针对model类生成的,针对 Example 类是没有这个插件扩展功能的;
如果我们的环境是分布式环境开发的话,这个 Example 也是需要序列化的,故扩展这个插件,使他不仅仅针对model 类,同样针对 Example 类;
package com.MutiModule.common.mybatis.plugin.serializable; 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; /** * 分布式开发的话,Example对象也必须要序列化 * 扩展一个 mybatis generator 插件,用于不仅仅在生成的实体类 还有 *Example 类都序列化 * @author alexgaoyh * */ public class SerializablePlugin extends PluginAdapter { private FullyQualifiedJavaType serializable; private FullyQualifiedJavaType gwtSerializable; private boolean addGWTInterface; private boolean suppressJavaInterface; public SerializablePlugin() { super(); serializable = new FullyQualifiedJavaType("java.io.Serializable"); //$NON-NLS-1$ gwtSerializable = new FullyQualifiedJavaType("com.google.gwt.user.client.rpc.IsSerializable"); //$NON-NLS-1$ } public boolean validate(List<String> warnings) { // this plugin is always valid return true; } @Override public void setProperties(Properties properties) { super.setProperties(properties); addGWTInterface = Boolean.valueOf(properties.getProperty("addGWTInterface")); //$NON-NLS-1$ suppressJavaInterface = Boolean.valueOf(properties.getProperty("suppressJavaInterface")); //$NON-NLS-1$ } @Override public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { makeSerializable(topLevelClass, introspectedTable); return true; } @Override public boolean modelPrimaryKeyClassGenerated(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { makeSerializable(topLevelClass, introspectedTable); return true; } @Override public boolean modelRecordWithBLOBsClassGenerated( TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { makeSerializable(topLevelClass, introspectedTable); return true; } /** * 添加给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())) { //$NON-NLS-1$ innerClass.addSuperInterface(serializable); } if ("Criteria".equals(innerClass.getType().getShortName())) { //$NON-NLS-1$ innerClass.addSuperInterface(serializable); } if ("Criterion".equals(innerClass.getType().getShortName())) { //$NON-NLS-1$ innerClass.addSuperInterface(serializable); } } return true; } protected void makeSerializable(TopLevelClass topLevelClass, IntrospectedTable introspectedTable) { if (addGWTInterface) { topLevelClass.addImportedType(gwtSerializable); topLevelClass.addSuperInterface(gwtSerializable); } if (!suppressJavaInterface) { topLevelClass.addImportedType(serializable); topLevelClass.addSuperInterface(serializable); Field field = new Field(); field.setFinal(true); field.setInitializationString("1L"); //$NON-NLS-1$ field.setName("serialVersionUID"); //$NON-NLS-1$ field.setStatic(true); field.setType(new FullyQualifiedJavaType("long")); //$NON-NLS-1$ field.setVisibility(JavaVisibility.PRIVATE); context.getCommentGenerator().addFieldComment(field, introspectedTable); topLevelClass.addField(field); } } }
文章来自:http://my.oschina.net/alexgaoyh/blog/529251