首页>代码>Mybatis生成完整Controller、Service、DAO、Mapper代码>/mysql-generator-core/src/com/simon/plugin/ServiceAndControllerGeneratorPlugin.java
package com.simon.plugin; import org.mybatis.generator.api.GeneratedJavaFile; import org.mybatis.generator.api.IntrospectedTable; import org.mybatis.generator.api.PluginAdapter; import org.mybatis.generator.api.dom.java.*; import java.util.ArrayList; import java.util.List; import static org.mybatis.generator.internal.util.StringUtility.stringHasValue; public class ServiceAndControllerGeneratorPlugin extends PluginAdapter { // ��ĿĿ¼��һ��Ϊ src/main/java private String targetProject; // service���� private String servicePackage; // serviceʵ������� private String serviceImplPackage; // Controlle private String controllerPackage; // service�ӿ���ǰ private String servicePreffix; // service�ӿ���� private String serviceSuffix; // service�ӿڵĸ��ӿ� private String superServiceInterface; // serviceʵ����ĸ��� private String superServiceImpl; // controller��ĸ��� private String superController; // dao�ӿڻ��� private String superDaoInterface; // Example��İ��� private String examplePacket; private String recordType; private String modelName; private FullyQualifiedJavaType model; private String serviceName; private String serviceImplName; private String controllerName; @Override public boolean validate(List<String> warnings) { boolean valid = true; /* if (!stringHasValue(properties .getProperty("targetProject"))) { //$NON-NLS-1$ warnings.add(getString("ValidationError.18", //$NON-NLS-1$ "MapperConfigPlugin", //$NON-NLS-1$ "targetProject")); //$NON-NLS-1$ valid = false; } if (!stringHasValue(properties.getProperty("servicePackage"))) { //$NON-NLS-1$ warnings.add(getString("ValidationError.18", //$NON-NLS-1$ "MapperConfigPlugin", //$NON-NLS-1$ "servicePackage")); //$NON-NLS-1$ valid = false; } if (!stringHasValue(properties.getProperty("serviceImplPackage"))) { //$NON-NLS-1$ warnings.add(getString("ValidationError.18", //$NON-NLS-1$ "MapperConfigPlugin", //$NON-NLS-1$ "serviceImplPackage")); //$NON-NLS-1$ valid = false; } */ targetProject = properties.getProperty("targetProject"); servicePackage = properties.getProperty("servicePackage"); serviceImplPackage = properties.getProperty("serviceImplPackage"); servicePreffix = properties.getProperty("servicePreffix"); servicePreffix = stringHasValue(servicePreffix) ? servicePreffix : ""; serviceSuffix = properties.getProperty("serviceSuffix"); serviceSuffix = stringHasValue(serviceSuffix) ? serviceSuffix : ""; superServiceInterface = properties.getProperty("superServiceInterface"); superServiceImpl = properties.getProperty("superServiceImpl"); superDaoInterface = properties.getProperty("superDaoInterface"); controllerPackage = properties.getProperty("controllerPackage"); superController = properties.getProperty("superController"); return valid; } @Override public List<GeneratedJavaFile> contextGenerateAdditionalJavaFiles(IntrospectedTable introspectedTable) { recordType = introspectedTable.getBaseRecordType(); modelName = recordType.substring(recordType.lastIndexOf(".") + 1); model = new FullyQualifiedJavaType(recordType); serviceName = servicePackage + "." + servicePreffix + modelName + serviceSuffix; serviceImplName = serviceImplPackage + "." + modelName + serviceSuffix + "Impl"; examplePacket = recordType.substring(0, recordType.lastIndexOf(".")); controllerName = controllerPackage.concat(".").concat(modelName).concat("Controller"); List<GeneratedJavaFile> answer = new ArrayList<>(); GeneratedJavaFile gjf = generateServiceInterface(introspectedTable); GeneratedJavaFile gjf2 = generateServiceImpl(introspectedTable); GeneratedJavaFile gjf3 = generateController(introspectedTable); answer.add(gjf); answer.add(gjf2); answer.add(gjf3); return answer; } // ���service�ӿ� private GeneratedJavaFile generateServiceInterface(IntrospectedTable introspectedTable) { FullyQualifiedJavaType service = new FullyQualifiedJavaType(serviceName); Interface serviceInterface = new Interface(service); serviceInterface.setVisibility(JavaVisibility.PUBLIC); // ��Ӹ��ӿ� if (stringHasValue(superServiceInterface)) { String superServiceInterfaceName = superServiceInterface.substring(superServiceInterface.lastIndexOf(".") + 1); serviceInterface.addImportedType(new FullyQualifiedJavaType(superServiceInterface)); serviceInterface.addImportedType(new FullyQualifiedJavaType(recordType)); serviceInterface.addSuperInterface(new FullyQualifiedJavaType(superServiceInterfaceName + "<" + modelName + ">")); } GeneratedJavaFile gjf = new GeneratedJavaFile(serviceInterface, targetProject, context.getJavaFormatter()); return gjf; } // ���serviceImplʵ���� private GeneratedJavaFile generateServiceImpl(IntrospectedTable introspectedTable) { FullyQualifiedJavaType service = new FullyQualifiedJavaType(serviceName); FullyQualifiedJavaType serviceImpl = new FullyQualifiedJavaType(serviceImplName); TopLevelClass clazz = new TopLevelClass(serviceImpl); //����������������η� clazz.setVisibility(JavaVisibility.PUBLIC); //������ ������� clazz.addImportedType(service); //������ ��ʵ�ֽӿ��� clazz.addSuperInterface(service); if (stringHasValue(superServiceImpl)) { String superServiceImplName = superServiceImpl.substring(superServiceImpl.lastIndexOf(".") + 1); clazz.addImportedType(superServiceImpl); clazz.addImportedType(recordType); clazz.setSuperClass(superServiceImplName + "<" + modelName + ">"); } clazz.addImportedType(new FullyQualifiedJavaType("org.springframework.stereotype.Service")); clazz.addAnnotation("@Service"); String daoFieldType = introspectedTable.getMyBatis3JavaMapperType(); String daoFieldName = firstCharToLowCase(daoFieldType.substring(daoFieldType.lastIndexOf(".") + 1)); //������ij�Ա���� Field daoField = new Field(daoFieldName, new FullyQualifiedJavaType(daoFieldType)); clazz.addImportedType(new FullyQualifiedJavaType(daoFieldType)); clazz.addImportedType(new FullyQualifiedJavaType("org.springframework.beans.factory.annotation.Autowired")); //������Ա���� ��ע�� daoField.addAnnotation("@Autowired"); //������Ա�������η� daoField.setVisibility(JavaVisibility.PRIVATE); clazz.addField(daoField); /* //���� ������ Method method = new Method("getMapper"); //����ע�� method.addAnnotation("@Override"); FullyQualifiedJavaType methodReturnType = new FullyQualifiedJavaType("Object"); //����ֵ method.setReturnType(methodReturnType); //�����壬������ method.addBodyLine("return " + daoFieldName + ";"); //���η� method.setVisibility(JavaVisibility.PUBLIC); clazz.addMethod(method);*/ /* Method method1 = new Method("getExample"); method1.addAnnotation("@Override"); FullyQualifiedJavaType methodReturnType1 = new FullyQualifiedJavaType("Object"); clazz.addImportedType(new FullyQualifiedJavaType(examplePacket.concat(".").concat(modelName).concat("Example"))); method1.setReturnType(methodReturnType1); method1.addBodyLine("return new " + modelName + "Example();"); method1.setVisibility(JavaVisibility.PUBLIC); clazz.addMethod(method1);*/ GeneratedJavaFile gjf2 = new GeneratedJavaFile(clazz, targetProject, context.getJavaFormatter()); return gjf2; } // ���controller�� private GeneratedJavaFile generateController(IntrospectedTable introspectedTable) { FullyQualifiedJavaType controller = new FullyQualifiedJavaType(controllerName); TopLevelClass clazz = new TopLevelClass(controller); //����������������η� clazz.setVisibility(JavaVisibility.PUBLIC); //���@Controllerע�⣬��������Ӧ���� clazz.addImportedType(new FullyQualifiedJavaType("org.springframework.stereotype.Controller")); clazz.addAnnotation("@Controller"); //���@RequestMappingע�⣬��������Ӧ���� clazz.addImportedType(new FullyQualifiedJavaType("org.springframework.web.bind.annotation.RequestMapping")); clazz.addAnnotation("@RequestMapping(\""+firstCharToLowCase(modelName)+"\")"); //���@Apiע�⣬��������Ӧ���� /*clazz.addImportedType(new FullyQualifiedJavaType("io.swagger.annotations.Api")); String controllerSimpleName = controllerName.substring(controllerName.lastIndexOf(".") + 1); clazz.addAnnotation("@Api(tags = \"+controllerSimpleName+\", description = \"+controllerSimpleName+\")");*/ //����controller�ĸ����model������ӷ��� if (stringHasValue(superController)) { clazz.addImportedType(superController); clazz.addImportedType(recordType); FullyQualifiedJavaType superInterfac = new FullyQualifiedJavaType(superController + "<" + modelName + ">"); clazz.addSuperInterface(superInterfac); } //����Service FullyQualifiedJavaType service = new FullyQualifiedJavaType(serviceName); clazz.addImportedType(service); //���Service��Ա���� String serviceFieldName = firstCharToLowCase(serviceName.substring(serviceName.lastIndexOf(".") + 1)); Field daoField = new Field(serviceFieldName, new FullyQualifiedJavaType(serviceName)); clazz.addImportedType(new FullyQualifiedJavaType(serviceName)); clazz.addImportedType(new FullyQualifiedJavaType("org.springframework.beans.factory.annotation.Autowired")); //������Ա���� ��ע�� daoField.addAnnotation("@Autowired"); //������Ա�������η� daoField.setVisibility(JavaVisibility.PRIVATE); clazz.addField(daoField); /*//���� ������ Method method = new Method("getService"); //����ע�� method.addAnnotation("@Override"); String simpleSuperServiceName = superServiceInterface.substring(superServiceInterface.lastIndexOf(".") + 1); FullyQualifiedJavaType methodReturnType = new FullyQualifiedJavaType(simpleSuperServiceName + "<" + modelName + ">"); //�������� method.setReturnType(methodReturnType); //�����壬������ method.addBodyLine("return " + serviceFieldName + ";"); //���η� method.setVisibility(JavaVisibility.PUBLIC); clazz.addImportedType(superServiceInterface); clazz.addMethod(method);*/ GeneratedJavaFile gjf2 = new GeneratedJavaFile(clazz, targetProject, context.getJavaFormatter()); return gjf2; } private String firstCharToLowCase(String str) { char[] chars = new char[1]; //String str="ABCDE1234"; chars[0] = str.charAt(0); String temp = new String(chars); if (chars[0] >= 'A' && chars[0] <= 'Z') { return str.replaceFirst(temp, temp.toLowerCase()); } return str; } }