diff --git a/user-service/pom.xml b/user-service/pom.xml index 3c41688..c717589 100644 --- a/user-service/pom.xml +++ b/user-service/pom.xml @@ -12,6 +12,12 @@ com.hp nacos-client 0.0.1-SNAPSHOT + + + org.mybatis.spring.boot + mybatis-spring-boot-starter + + com.hp @@ -30,6 +36,42 @@ 4.12 test + + + + com.baomidou + mybatis-plus-boot-starter + 3.3.0 + + + org.springframework.boot + spring-boot-starter + + + + + + com.baomidou + mybatis-plus-generator + 3.3.0 + + + org.freemarker + freemarker + 2.3.28 + + + + org.mybatis + mybatis-typehandlers-jsr310 + 1.0.1 + + + com.fasterxml.jackson.datatype + jackson-datatype-jsr310 + 2.9.2 + + \ No newline at end of file diff --git a/user-service/src/main/java/com/hp/user/generactor/CodeGeneractor.java b/user-service/src/main/java/com/hp/user/generactor/CodeGeneractor.java new file mode 100644 index 0000000..533810b --- /dev/null +++ b/user-service/src/main/java/com/hp/user/generactor/CodeGeneractor.java @@ -0,0 +1,156 @@ +package com.hp.user.generactor; +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; +import com.baomidou.mybatisplus.core.toolkit.StringPool; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.generator.AutoGenerator; +import com.baomidou.mybatisplus.generator.InjectionConfig; +import com.baomidou.mybatisplus.generator.config.*; +import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; +import com.baomidou.mybatisplus.generator.config.po.TableInfo; +import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; +import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; + +import java.util.*; + +public class CodeGeneractor { + + /** + * 读取控制台内容 + */ + public static String scanner(String tip) { + Scanner scanner = new Scanner(System.in); + StringBuilder help = new StringBuilder(); + help.append("请输入" + tip + ":"); + System.out.println(help.toString()); + if (scanner.hasNext()) { + String ipt = scanner.next(); + if (StringUtils.isNotEmpty(ipt)) { + return ipt; + } + } + throw new MybatisPlusException("请输入正确的" + tip + "!"); + } + + public static void main(String[] args) { + /** + * 代码生成器 + */ + AutoGenerator mpg = new AutoGenerator(); + + /** + * 全局配置 + */ + GlobalConfig globalConfig = new GlobalConfig(); + //生成文件的输出目录 + String projectPath = System.getProperty("user.dir"); + globalConfig.setOutputDir(projectPath + "/user-service/src/main/java"); + //Author设置作者 + globalConfig.setAuthor("王怡静"); + //是否覆盖文件 + globalConfig.setFileOverride(true); + //生成后打开文件 + globalConfig.setOpen(false); + mpg.setGlobalConfig(globalConfig); + + /** + * 数据源配置 + */ + DataSourceConfig dsc = new DataSourceConfig(); +// DataSourceConfigBean d = context.getBean(DataSourceConfigBean.class); + dsc.setUrl("jdbc:mysql://47.104.215.101:3366/user?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC"); + dsc.setDriverName("com.mysql.cj.jdbc.Driver"); + dsc.setUsername("dwtdev"); + dsc.setPassword("dwtdev@2020"); + mpg.setDataSource(dsc); + + /** + * 包配置 + */ + PackageConfig pc = new PackageConfig(); +// pc.setModuleName(scanner("模块名")); + //父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名 + pc.setParent("com.hp.user.test"); + mpg.setPackageInfo(pc); + + + /** + * 自定义配置 + */ + InjectionConfig cfg = new InjectionConfig() { + @Override + public void initMap() { + // to do nothing + } + }; + + /** + * 模板 + */ + //如果模板引擎是 freemarker + String templatePath = "/templates/mapper.xml.ftl"; + // 如果模板引擎是 velocity + // String templatePath = "/templates/mapper.xml.vm"; + + + /** + * 自定义输出配置 + */ + List focList = new ArrayList<>(); + // 自定义配置会被优先输出 + focList.add(new FileOutConfig(templatePath) { + @Override + public String outputFile(TableInfo tableInfo) { + // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!! +// return projectPath + "/user-service/src/main/resources/mapper/"+ pc.getModuleName() +// + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; + return projectPath + "/user-service/src/main/resources/mapper/" + + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; + } + }); + cfg.setFileOutConfigList(focList); + mpg.setCfg(cfg); + + /** + * 配置模板 + */ + TemplateConfig templateConfig = new TemplateConfig(); + + // 配置自定义输出模板 + //指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别 + // templateConfig.setEntity("templates/entity2.java"); + // templateConfig.setService(); + // templateConfig.setController(); + + templateConfig.setXml(null); + mpg.setTemplate(templateConfig); + + /** + * 策略配置 + */ + StrategyConfig strategy = new StrategyConfig(); + //设置命名格式 + strategy.setNaming(NamingStrategy.underline_to_camel); + strategy.setColumnNaming(NamingStrategy.underline_to_camel); +// strategy.setInclude(scanner("表名,多个英文逗号分割").split(",")); + strategy.setInclude("tb_station,r_customer_service_provider_enterprise".split(",")); + //实体是否为lombok模型(默认 false) + strategy.setEntityLombokModel(true); + //生成 @RestController 控制器 + strategy.setRestControllerStyle(true); + //设置自定义继承的Entity类全称,带包名 + //strategy.setSuperEntityClass("com.jiangfeixiang.mpdemo.BaseEntity"); + //设置自定义继承的Controller类全称,带包名 + //strategy.setSuperControllerClass("com.jiangfeixiang.mpdemo.BaseController"); + //设置自定义基础的Entity类,公共字段 +// strategy.setSuperEntityColumns("id"); + //驼峰转连字符 + strategy.setControllerMappingHyphenStyle(true); + //表名前缀 +// strategy.setTablePrefix(pc.getModuleName() + "_"); + strategy.setTablePrefix("tb_","r_"); + mpg.setStrategy(strategy); + mpg.setTemplateEngine(new FreemarkerTemplateEngine()); + mpg.execute(); + } +} diff --git a/user-service/src/main/java/com/hp/user/generactor/GeneratorCodeTest.java b/user-service/src/main/java/com/hp/user/generactor/GeneratorCodeTest.java new file mode 100644 index 0000000..b4ecf7a --- /dev/null +++ b/user-service/src/main/java/com/hp/user/generactor/GeneratorCodeTest.java @@ -0,0 +1,160 @@ +package com.hp.user.generactor; + +import java.util.Scanner; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.context.ConfigurableApplicationContext; + +import com.alibaba.nacos.spring.context.annotation.config.NacosPropertySource; +import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException; +import com.baomidou.mybatisplus.core.toolkit.StringUtils; +import com.baomidou.mybatisplus.generator.AutoGenerator; +import com.baomidou.mybatisplus.generator.config.DataSourceConfig; +import com.baomidou.mybatisplus.generator.config.GlobalConfig; +import com.baomidou.mybatisplus.generator.config.PackageConfig; +import com.baomidou.mybatisplus.generator.config.StrategyConfig; +import com.baomidou.mybatisplus.generator.config.TemplateConfig; +import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; +import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; + +//@SpringBootApplication +//@EnableAutoConfiguration(exclude={DataSourceAutoConfiguration.class}) +//@SpringBootApplication(exclude = {DataSourceAutoConfiguration.class}) +//@SpringBootApplication(exclude = DataSourceAutoConfiguration.class)加了这个会导致mapper注入不进去 +//@NacosPropertySource(dataId = "userdatasource", autoRefreshed = true)//为啥nacos中的配置只能是Properties +public class GeneratorCodeTest { + + public static String scanner(String tip) { + Scanner scanner = new Scanner(System.in); + StringBuilder help = new StringBuilder(); + help.append("请输入" + tip + ":"); + System.out.println(help.toString()); + if (scanner.hasNext()) { + String ipt = scanner.next(); + if (StringUtils.isNotEmpty(ipt)) { + return ipt; + } + } + throw new MybatisPlusException("请输入正确的" + tip + "!"); + } + + public static void main(String[] args) { + +// ConfigurableApplicationContext context = SpringApplication.run( +// GeneratorCodeTest.class, args); + // 代码生成器 + AutoGenerator mpg = new AutoGenerator(); + + // 全局配置 + GlobalConfig gc = new GlobalConfig(); + String projectPath = System.getProperty("user.dir"); + gc.setOutputDir(projectPath + "/user-service/src/main/java"); + gc.setAuthor("王怡静"); + gc.setOpen(false); + gc.setServiceName("%sService"); + gc.setServiceImplName("%sServiceImpl"); + //实体属性 Swagger2 注解 + gc.setSwagger2(false); + mpg.setGlobalConfig(gc); + + // 数据源配置 + DataSourceConfig dsc = new DataSourceConfig(); +// DataSourceConfigBean d = context.getBean(DataSourceConfigBean.class); + dsc.setUrl("jdbc:mysql://47.104.215.101:3366/user?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=UTC"); + dsc.setDriverName("com.mysql.cj.jdbc.Driver"); + dsc.setUsername("dwtdev"); + dsc.setPassword("dwtdev@2020"); + mpg.setDataSource(dsc); + + // 包配置 + PackageConfig pc = new PackageConfig(); +// pc.setModuleName(scanner("模块名")); +// pc.setParent("com.hp.user.test"); +// pc.setEntity("model.auto"); +// pc.setMapper("mapper.auto"); +// pc.setService("service"); +// pc.setServiceImpl("service.impl"); +// pc.setController(null); + mpg.setPackageInfo(pc); + + // 自定义配置 +// InjectionConfig cfg = new InjectionConfig() { +// @Override +// public void initMap() { +// // to do nothing +// } +// }; + + // 如果模板引擎是 freemarker +// String templatePath = "/templates/mapper.xml.ftl"; + // 如果模板引擎是 velocity + // String templatePath = "/templates/mapper.xml.vm"; + + // 自定义输出配置 +// List focList = new ArrayList<>(); + // 自定义配置会被优先输出 +// focList.add(new FileOutConfig(templatePath) { +// @Override +// public String outputFile(TableInfo tableInfo) { +// // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!! +// return projectPath + "/src/main/resources/mapper/" + pc.getModuleName() +// + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML; +// } +// }); + /* + cfg.setFileCreate(new IFileCreate() { + @Override + public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) { + // 判断自定义文件夹是否需要创建 + checkDir("调用默认方法创建的目录"); + return false; + } + }); + */ +// cfg.setFileOutConfigList(focList); +// mpg.setCfg(cfg); + + // 配置模板 + TemplateConfig templateConfig = new TemplateConfig(); + + + //控制 不生成 controller 空字符串就行 + templateConfig.setController(""); + templateConfig.setMapper(""); + templateConfig.setService(""); + templateConfig.setServiceImpl(""); + + + // 配置自定义输出模板 + //指定自定义模板路径,注意不要带上.ftl/.vm, 会根据使用的模板引擎自动识别 + // templateConfig.setEntity("templates/entity2.java"); + // templateConfig.setService(); + // templateConfig.setController(); + + templateConfig.setXml(null); + mpg.setTemplate(templateConfig); + + // 策略配置 + StrategyConfig strategy = new StrategyConfig(); + strategy.setNaming(NamingStrategy.underline_to_camel); + strategy.setColumnNaming(NamingStrategy.underline_to_camel); + strategy.setSuperEntityClass("com.baomidou.mybatisplus.extension.activerecord.Model"); + strategy.setEntityLombokModel(true); + strategy.setRestControllerStyle(false); + + strategy.setEntityLombokModel(true); + // 公共父类 +// strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController"); + // 写于父类中的公共字段 +// strategy.setSuperEntityColumns("id"); +// strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));tb_station + strategy.setInclude("tb_station,r_customer_service_provider_enterprise".split(",")); + strategy.setTablePrefix("tb_","r_"); + strategy.setControllerMappingHyphenStyle(true); +// strategy.setTablePrefix(pc.getModuleName() + "_"); + mpg.setStrategy(strategy); + mpg.setTemplateEngine(new FreemarkerTemplateEngine()); + mpg.execute(); + } +} \ No newline at end of file diff --git a/user-service/src/main/java/com/hp/user/service/UserServiceApplaction.java b/user-service/src/main/java/com/hp/user/service/UserServiceApplaction.java index f664661..34a2624 100644 --- a/user-service/src/main/java/com/hp/user/service/UserServiceApplaction.java +++ b/user-service/src/main/java/com/hp/user/service/UserServiceApplaction.java @@ -21,9 +21,5 @@ public class UserServiceApplaction { public static void main(String[] args) { SpringApplication.run(UserServiceApplaction.class, args); - - } - - }