首页>代码>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)); //描述类的成员属性 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; } }
最近下载更多
shuangfu LV24
2023年10月19日
heqian LV16
2022年10月18日
wubinbin LV11
2022年9月30日
ewan007 LV29
2022年9月25日
cauhui LV16
2022年9月14日
fly666 LV11
2022年9月13日
AAA孚盟软件售前刘美鲸 LV3
2022年8月30日
yongjava21 LV26
2022年8月24日
Hachi6 LV13
2022年8月23日
Jhhhhh LV6
2022年8月23日
最近浏览更多
zolscy LV12
前天
段贤锐 LV8
2月29日
WBelong LV7
2023年12月25日
b5438b LV7
2023年12月20日
3334004690 LV3
2023年11月1日
shuangfu LV24
2023年10月19日
18650066502 LV12
2023年9月7日
黑 LV7
2023年8月28日
zhy1989wz LV6
2023年7月6日
xueshengc123
2023年7月5日
暂无贡献等级