SpringBoot2.0系列教程(九)Springboot框架集成generator自动生成model,xml,dao功能
Hello大家好,本章我们集成generator自动生成model,xml,dao功能 。另求各路大神指点,感谢
一:添加所需依赖
由于我们上篇文章讲过使用通用mapper,所以这里我们除了需要添加mybatis-generator
之外还需要添加通用mapper提供的generator
依赖,其次我们还需要引入两个常用jar包
<!--代码生成器--> <dependency> <groupId>org.mybatis.generator</groupId> <artifactId>mybatis-generator-core</artifactId> <version>1.3.5</version> <scope>test</scope> </dependency> <dependency> <groupId>tk.mybatis</groupId> <artifactId>mapper-generator</artifactId> <version>1.0.0</version> </dependency> <!--常用库依赖 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.5</version> </dependency> <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>22.0</version> </dependency>
二:创建系统日志表
CREATE TABLE `system_log` ( `id` varchar(32) NOT NULL, `description` varchar(50) DEFAULT NULL COMMENT '日志信息描述', `method` varchar(20) DEFAULT NULL COMMENT '方法名称', `log_type` varchar(10) DEFAULT NULL COMMENT '日志类型 0是正常,1是异常', `request_ip` varchar(30) DEFAULT NULL COMMENT '请求的ip', `exception_code` varchar(50) DEFAULT NULL COMMENT '异常错误码', `exception_detail` varchar(255) DEFAULT NULL COMMENT '异常详情', `params` varchar(1000) DEFAULT NULL COMMENT '请求参数', `user_id` varchar(32) DEFAULT NULL COMMENT '请求的用户id', `create_time` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统日志表';
三:创建系统常用变量文件夹
创建core→constant→ProjectConstant
package com.example.demo.core.constant; public class ProjectConstant { // 项目基础包名称 public static final String BASE_PACKAGE = "com.example.demo"; // Model所在包 public static final String MODEL_PACKAGE = BASE_PACKAGE + ".model"; // Mapper所在包 public static final String MAPPER_PACKAGE = BASE_PACKAGE + ".dao"; // Service所在包 public static final String SERVICE_PACKAGE = BASE_PACKAGE + ".service"; // ServiceImpl所在包 public static final String SERVICE_IMPL_PACKAGE = SERVICE_PACKAGE + ".impl"; // Controller所在包 public static final String CONTROLLER_PACKAGE = BASE_PACKAGE + ".controller"; // Mapper插件基础接口的完全限定名 public static final String MAPPER_INTERFACE_REFERENCE = BASE_PACKAGE + ".core.universal.Mapper"; }
四:创建src\test\java\com\example\demo\CodeGenerator.java
package com.example.demo; import com.example.demo.core.constant.ProjectConstant; import com.google.common.base.CaseFormat; import org.apache.commons.lang3.StringUtils; import org.mybatis.generator.api.MyBatisGenerator; import org.mybatis.generator.config.*; import org.mybatis.generator.internal.DefaultShellCallback; import java.util.ArrayList; import java.util.List; /** * @Description: 代码生成器,根据数据表名称生成对应的Model、Mapper简化开发。 * @author 张瑶 * @date 2018/4/23 20:28 */ public class CodeGenerator { // JDBC配置,请修改为你项目的实际配置 private static final String JDBC_URL = "jdbc:mysql://localhost:3333/demo"; private static final String JDBC_USERNAME = "root"; private static final String JDBC_PASSWORD = "123456"; private static final String JDBC_DIVER_CLASS_NAME = "com.mysql.jdbc.Driver"; private static final String JAVA_PATH = "src/main/java"; // java文件路径 private static final String RESOURCES_PATH = "src/main/resources";// 资源文件路径 /** * genCode("输入表名","输入自定义Model名称"); * 如果想创建所有表,请输入"%" * @param args */ public static void main(String[] args) { genCode("system_log"); } /** * 通过数据表名称生成代码,Model 名称通过解析数据表名称获得,下划线转大驼峰的形式。 如输入表名称 "t_user_detail" 将生成 * TUserDetail、TUserDetailMapper、TUserDetailService ... * * @param tableNames * 数据表名称... */ public static void genCode(String... tableNames) { for (String tableName : tableNames) { genCode(tableName, null); } } /** * 通过数据表名称,和自定义的 Model 名称生成代码 如输入表名称 "t_user_detail" 和自定义的 Model 名称 "User" * 将生成 User、UserMapper、UserService ... * * @param tableName * 数据表名称 * @param modelName * 自定义的 Model 名称 */ public static void genCode(String tableName, String modelName) { genModelAndMapper(tableName, modelName); } public static void genModelAndMapper(String tableName, String modelName) { Context context = getContext(); JDBCConnectionConfiguration jdbcConnectionConfiguration = getJDBCConnectionConfiguration(); context.setJdbcConnectionConfiguration(jdbcConnectionConfiguration); PluginConfiguration pluginConfiguration = getPluginConfiguration(); context.addPluginConfiguration(pluginConfiguration); JavaModelGeneratorConfiguration javaModelGeneratorConfiguration = getJavaModelGeneratorConfiguration(); context.setJavaModelGeneratorConfiguration(javaModelGeneratorConfiguration); SqlMapGeneratorConfiguration sqlMapGeneratorConfiguration = getSqlMapGeneratorConfiguration(); context.setSqlMapGeneratorConfiguration(sqlMapGeneratorConfiguration); JavaClientGeneratorConfiguration javaClientGeneratorConfiguration =getJavaClientGeneratorConfiguration(); context.setJavaClientGeneratorConfiguration(javaClientGeneratorConfiguration); TableConfiguration tableConfiguration = new TableConfiguration(context); tableConfiguration.setTableName(tableName); tableConfiguration.setDomainObjectName(modelName); context.addTableConfiguration(tableConfiguration); List<String> warnings; MyBatisGenerator generator; try { Configuration config = new Configuration(); config.addContext(context); config.validate(); boolean overwrite = true; DefaultShellCallback callback = new DefaultShellCallback(overwrite); warnings = new ArrayList<>(); generator = new MyBatisGenerator(config, callback, warnings); generator.generate(null); } catch (Exception e) { throw new RuntimeException("生成Model和Mapper失败", e); } if (generator.getGeneratedJavaFiles().isEmpty() || generator.getGeneratedXmlFiles().isEmpty()) { throw new RuntimeException("生成Model和Mapper失败:" + warnings); } if (StringUtils.isEmpty(modelName)){ modelName = tableNameConvertUpperCamel(tableName); } System.out.println(modelName + ".java 生成成功"); System.out.println(modelName + "Mapper.java 生成成功"); System.out.println(modelName + "Mapper.xml 生成成功"); } private static Context getContext(){ Context context = new Context(ModelType.FLAT); context.setId("Potato"); context.setTargetRuntime("MyBatis3Simple"); context.addProperty(PropertyRegistry.CONTEXT_BEGINNING_DELIMITER, "`"); context.addProperty(PropertyRegistry.CONTEXT_ENDING_DELIMITER, "`"); return context; } private static JDBCConnectionConfiguration getJDBCConnectionConfiguration(){ JDBCConnectionConfiguration jdbcConnectionConfiguration = new JDBCConnectionConfiguration(); jdbcConnectionConfiguration.setConnectionURL(JDBC_URL); jdbcConnectionConfiguration.setUserId(JDBC_USERNAME); jdbcConnectionConfiguration.setPassword(JDBC_PASSWORD); jdbcConnectionConfiguration.setDriverClass(JDBC_DIVER_CLASS_NAME); return jdbcConnectionConfiguration; } private static PluginConfiguration getPluginConfiguration(){ PluginConfiguration pluginConfiguration = new PluginConfiguration(); pluginConfiguration.setConfigurationType("tk.mybatis.mapper.generator.MapperPlugin"); pluginConfiguration.addProperty("mappers", ProjectConstant.MAPPER_INTERFACE_REFERENCE); return pluginConfiguration; } private static JavaModelGeneratorConfiguration getJavaModelGeneratorConfiguration(){ JavaModelGeneratorConfiguration javaModelGeneratorConfiguration = new JavaModelGeneratorConfiguration(); javaModelGeneratorConfiguration.setTargetProject(JAVA_PATH); javaModelGeneratorConfiguration.setTargetPackage(ProjectConstant.MODEL_PACKAGE); javaModelGeneratorConfiguration.addProperty("enableSubPackages","true"); javaModelGeneratorConfiguration.addProperty("trimStrings","true"); return javaModelGeneratorConfiguration; } private static SqlMapGeneratorConfiguration getSqlMapGeneratorConfiguration(){ SqlMapGeneratorConfiguration sqlMapGeneratorConfiguration = new SqlMapGeneratorConfiguration(); sqlMapGeneratorConfiguration.setTargetProject(RESOURCES_PATH); sqlMapGeneratorConfiguration.setTargetPackage("mapper"); return sqlMapGeneratorConfiguration; } private static JavaClientGeneratorConfiguration getJavaClientGeneratorConfiguration(){ JavaClientGeneratorConfiguration javaClientGeneratorConfiguration = new JavaClientGeneratorConfiguration(); javaClientGeneratorConfiguration.setTargetProject(JAVA_PATH); javaClientGeneratorConfiguration.setTargetPackage(ProjectConstant.MAPPER_PACKAGE); javaClientGeneratorConfiguration.setConfigurationType("XMLMAPPER"); return javaClientGeneratorConfiguration; } private static String tableNameConvertUpperCamel(String tableName) { return CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.UPPER_CAMEL, tableName.toLowerCase()); } }
五:功能测试
在CodeGenerator
中右键run
ok,创建成功
项目地址
码云地址: https://gitee.com/beany/mySpringBoot
GitHub地址: https://github.com/MyBeany/mySpringBoot
写文章不易,如对您有帮助,请帮忙点下star
结尾
集成generator自动生成model,xml,dao功能已完成,后续功能接下来陆续更新,有问题可以联系我mr_beany@163.com。另求各路大神指点,感谢大家。