当前位置: 首页 > 科技观察

这个工具,节省80%的工作量也不算多吧?

时间:2023-03-19 01:37:01 科技观察

大家好,我是北军。俗话说,工具用好,下班早。Mybatis代码生成器相信大家都用过。本篇博客将介绍如何一键生成mybatisplus相关的Entity、Mapper、MapperXML、Service、Controller等各个模块的代码。别人可能需要两天才能完成代码,而你可以在一个小时内完成。1、官方教程参考文档如下:https://mybatis.plus/guide/generator.html其实官方教程写的很详细。这里我会详细解释一下官方文档。2、添加依赖MyBatis-Plus从3.0.3开始去掉了代码生成器和模板引擎的默认依赖,需要手动添加相关依赖。①、添加代码生成器依赖com.baomidoumybatis-plus-generator3.3.2②、添加templateengine依赖于mybatisplus提供了三个模板引擎,你也可以通过继承com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine类来自定义模板引擎。通常我们只是使用importdefaultdependencies。org.apache.velocityvelocity-engine-core2.23.写配置主要包括全局配置GlobalConfig(生成文件目录、作者姓名等),数据源配置DataSourceConfig,模板配置TemplateConfig。下面我贴出完整的代码,具体可以查看代码解释。GitHub地址如下:https://github.com/YSOcean/mybatisplusstudy.git另外,代码中的相关配置可以参考官网:https://mybatis.plus/config/generator-config。htmlpackagecom.ys.mybatisplusstudy.generator;导入com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;导入com.baomidou.mybatisplus.core.toolkit.StringPool;导入com.baomidou.mybatisplus.core.toolkit.StringUtils;导入com.baomidou.mybatisplus.generator.AutoGenerator;importcom.baomidou.mybatisplus.generator.InjectionConfig;importcom.baomidou.mybatisplus.generator.config.*;importcom.baomidou.mybatisplus.generator.config.po.TableInfo;importcom.baomidou.mybatisplus.generator.config.rules.NamingStrategy;importcom.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;导入java.util.ArrayList;导入java.util.List;导入java.util.Scanner;/***执行main方法控制台输入模块输入表名自动生成对应工程目录*/publicclassCodeGenerator{/***

*读取控制台内容*

*/publicstaticStringscanner(Stringtip){扫描仪scanner=newScanner(System.in);StringBuilderhelp=newStringBuilder();help.append("请输入"+tip+":");System.out.println(help.toString());如果(scanner.hasNext()){Stringipt=scanner.next();如果(StringUtils.isNotEmpty(ipt)){返回ipt;}}thrownewMybatisPlusException("请输入正确的"+tip+"!");}publicstaticvoidmain(String[]args){//代码生成器AutoGeneratormpg=newAutoGenerator();//全局配置GlobalConfiggc=newGlobalConfig();StringprojectPath=System.getProperty("user.dir");//生成文件的目录gc.setOutputDir(projectPath+"/src/main/java");//生成文件的作者声明gc.setAuthor("ITCola");//是否打开输出目录gc.setOpen(false);//是否开启BaseResultMapgc.setBaseResultMap(true);//是否开启baseColumnListgc.setBaseColumnList(true);//实体属性Swagger2注解gc.setSwagger2(true);mpg.setGlobalConfig(gc);//数据源配置DataSourceConfigdsc=newDataSourceConfig();dsc.setUrl("jdbc:mysql://localhost:3306/mybatisplus?useUnicode=true&characterEncoding=UTF-8");//dsc.setSchemaName("public");dsc.setDriverName("com.mysql.jdbc.Driver");dsc.setUsername("root");dsc.setPassword("root");mpg.setDataSource(dsc);//包配置PackageConfigpc=newPackageConfig();pc.setModuleName(scanner("模块名称"));pc.setParent("com.ys.mybatisplusstudy.generator");mpg.setPackageInfo(pc);//自定义配置InjectionConfigcfg=newInjectionConfig(){@OverridepublicvoidinitMap(){//什么都不做}};//如果模板引擎是freemarker//StringtemplatePath="/templates/mapper.xml.ftl";//如果模板引擎是velocityStringtemplatePath="/templates/mapper.xml.vm";//自定义输出配置ListfocList=newArrayList<>();//自定义配置优先输出focList.add(newFileOutConfig(templatePath){@OverridepublicStringoutputFile(TableInfotableInfo){//自定义输出文件名,如果为Entity设置了前缀和后缀,请注意xml的名称会随之改变!!returnprojectPath+"/src/main/resources/mapper/"+pc.getModuleName()+"/"+tableInfo.getEntityName()+"Mapper"+StringPool.DOT_XML;}});/*cfg.setFileCreate(newIFileCreate(){@OverridepublicbooleanisCreate(ConfigBuilderconfigBuilder,FileTypefileType,StringfilePath){//判断是否需要创建自定义文件夹checkDir("调用默认方法创建的目录,使用自定义目录");if(fileType==FileType.MAPPER){//mapper文件已经生成判断存在,不想重新生成returnfalsereturn!newFile(filePath).exists();}//允许生成模板文件returntrue;}});*/cfg.setFileOutConfigList(focList);mpg.setCfg(cfg);//配置模板TemplateConfigtemplateConfig=newTemplateConfig();//配置自定义输出模板//指定自定义模板路径,注意不要带.ftl/.vm,会根据使用的模板引擎自动识别//templateConfig.setEntity("templates/entity2.java");//templateConfig.setService();//templateConfig.setController();templateConfig.setXml(null);mpg.setTemplate(templateConfig);//策略配置StrategyConfigstrategy=newStrategyConfig();strategy.setNaming(NamingStrategy.underline_to_camel);strategy.setColumnNaming(Namingelline_Strategy);//strategy.setSuperEntityClass("自己的父类实体,不需要设置!");strategy.setEntityLombokModel(true);strategy.setRestControllerStyle(true);//公共父类//strategy.setSuperControllerClass("你自己的父控制器,不用设置!");//父类中写的公共字段strategy.setSuperEntityColumns("id");strategy.setInclude(scanner("表名,多个英文逗号分隔").split(","));strategy.setControllerMappingHyphenStyle(true);strategy.setTablePrefix(pc.getModuleName()+"_");mpg.setStrategy(策略);//mpg.setTemplateEngine(newFreemarkerTemplateEngine());mpg.execute();}}演示如下: