SerializablePlugin.java 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110
  1. package com.conpany.project;
  2. import org.mybatis.generator.api.IntrospectedTable;
  3. import org.mybatis.generator.api.PluginAdapter;
  4. import org.mybatis.generator.api.dom.java.*;
  5. import java.util.List;
  6. import java.util.Properties;
  7. /**
  8. * 分布式开发的话,Example对象也必须要序列化
  9. * 扩展一个 mybatis generator 插件,用于不仅仅在生成的实体类 还有 *Example 类都序列化
  10. * @author alexgaoyh
  11. *
  12. */
  13. public class SerializablePlugin extends PluginAdapter {
  14. private FullyQualifiedJavaType serializable;
  15. private FullyQualifiedJavaType gwtSerializable;
  16. private boolean addGWTInterface;
  17. private boolean suppressJavaInterface;
  18. public SerializablePlugin() {
  19. super();
  20. serializable = new FullyQualifiedJavaType("java.io.Serializable"); //$NON-NLS-1$
  21. gwtSerializable = new FullyQualifiedJavaType("com.google.gwt.user.client.rpc.IsSerializable"); //$NON-NLS-1$
  22. }
  23. public boolean validate(List<String> warnings) {
  24. // this plugin is always valid
  25. return true;
  26. }
  27. @Override
  28. public void setProperties(Properties properties) {
  29. super.setProperties(properties);
  30. addGWTInterface = Boolean.valueOf(properties.getProperty("addGWTInterface")); //$NON-NLS-1$
  31. suppressJavaInterface = Boolean.valueOf(properties.getProperty("suppressJavaInterface")); //$NON-NLS-1$
  32. }
  33. @Override
  34. public boolean modelBaseRecordClassGenerated(TopLevelClass topLevelClass,
  35. IntrospectedTable introspectedTable) {
  36. makeSerializable(topLevelClass, introspectedTable);
  37. return true;
  38. }
  39. @Override
  40. public boolean modelPrimaryKeyClassGenerated(TopLevelClass topLevelClass,
  41. IntrospectedTable introspectedTable) {
  42. makeSerializable(topLevelClass, introspectedTable);
  43. return true;
  44. }
  45. @Override
  46. public boolean modelRecordWithBLOBsClassGenerated(
  47. TopLevelClass topLevelClass, IntrospectedTable introspectedTable) {
  48. makeSerializable(topLevelClass, introspectedTable);
  49. return true;
  50. }
  51. /**
  52. * 添加给Example类序列化的方法
  53. * @param topLevelClass
  54. * @param introspectedTable
  55. * @return
  56. */
  57. @Override
  58. public boolean modelExampleClassGenerated(TopLevelClass topLevelClass,IntrospectedTable introspectedTable){
  59. makeSerializable(topLevelClass, introspectedTable);
  60. for (InnerClass innerClass : topLevelClass.getInnerClasses()) {
  61. if ("GeneratedCriteria".equals(innerClass.getType().getShortName())) { //$NON-NLS-1$
  62. innerClass.addSuperInterface(serializable);
  63. }
  64. if ("Criteria".equals(innerClass.getType().getShortName())) { //$NON-NLS-1$
  65. innerClass.addSuperInterface(serializable);
  66. }
  67. if ("Criterion".equals(innerClass.getType().getShortName())) { //$NON-NLS-1$
  68. innerClass.addSuperInterface(serializable);
  69. }
  70. }
  71. return true;
  72. }
  73. protected void makeSerializable(TopLevelClass topLevelClass,
  74. IntrospectedTable introspectedTable) {
  75. if (addGWTInterface) {
  76. topLevelClass.addImportedType(gwtSerializable);
  77. topLevelClass.addSuperInterface(gwtSerializable);
  78. }
  79. if (!suppressJavaInterface) {
  80. topLevelClass.addImportedType(serializable);
  81. topLevelClass.addSuperInterface(serializable);
  82. Field field = new Field();
  83. field.setFinal(true);
  84. field.setInitializationString("1L"); //$NON-NLS-1$
  85. field.setName("serialVersionUID"); //$NON-NLS-1$
  86. field.setStatic(true);
  87. field.setType(new FullyQualifiedJavaType("long")); //$NON-NLS-1$
  88. field.setVisibility(JavaVisibility.PRIVATE);
  89. context.getCommentGenerator().addFieldComment(field, introspectedTable);
  90. topLevelClass.addField(field);
  91. }
  92. }
  93. }