一、前言
Mybatis逆向工程也可以生成代码,但配置太过复杂,不便于后期维护,Mybatis Plus 主动集成了代码的自动生成,用起来也很方便,两种代码自动生成我都用过,没有好坏之分,如果非要我推荐哪一种,我会选择Mybatis Plus。
二、MyBatis Plus代码生成器简介
参考链接
名称 | 地址 |
---|---|
MybatisPlus 代码生成器官方地址 | https://mp.baomidou.com/guide/generator.html |
正如官方文档的描述,AutoGenerator
是 MyBatis-Plus
的代码生成器,通过 AutoGenerator
可以快速生成 Entity、Mapper、Mapper XML、Service、Controller
等各个模块的代码,极大的提升了开发效率。
API介绍
1.添加模板引擎,默认使用的是Velocity,如果选择了非默认引擎,需要进行设置
// set freemarker engine generator.setTemplateEngine(new FreemarkerTemplateEngine());// set beetl engine generator.setTemplateEngine(new BeetlTemplateEngine());// set custom engine (reference class is your custom engine class) generator.setTemplateEngine(new CustomTemplateEngine()); |
2.编写配置
//配置GlobalConfig GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java"); globalConfig.setAuthor("jobob"); globalConfig.setOpen(false);//配置 DataSourceConfig DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/ant?useUnicode=true&useSSL=false&characterEncoding=utf8"); dataSourceConfig.setDriverName("com.mysql.jdbc.Driver"); dataSourceConfig.setUsername("root"); dataSourceConfig.setPassword("password"); |
3.自定义模板引擎,需继承类 com.baomidou.mybatisplus.generator.engine.AbstractTemplateEngine
4.自定义代码模板
//指定自定义模板路径, 位置:/resources/templates/entity2.java.ftl(或者是.vm) //注意不要带上.ftl(或者是.vm), 会根据使用的模板引擎自动识别 TemplateConfig templateConfig = new TemplateConfig().setEntity("templates/entity2.java");AutoGenerator mpg = new AutoGenerator(); //配置自定义模板 mpg.setTemplate(templateConfig); |
5.自定义属性注入
InjectionConfig injectionConfig = new InjectionConfig() {//自定义属性注入:abc//在.ftl(或者是.vm)模板中,通过${cfg.abc}获取属性@Overridepublic void initMap() {Map<String, Object> map = new HashMap<>();map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");this.setMap(map);} }; AutoGenerator mpg = new AutoGenerator(); //配置自定义属性注入 mpg.setCfg(injectionConfig); |
三、使用流程
1.引入依赖
由于MyBatis-Plus
从 3.0.3
版本之后移除了代码生成器与模板引擎的默认依赖,我们需要手动添加相关依赖
<!--mybatis-plus 持久层--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.0.5</version></dependency><!-- velocity 模板引擎, Mybatis Plus 代码生成器需要 --><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.0</version></dependency> |
模板引擎默认使用的是Velocity,如果选择了非默认引擎,需要进行设置 |
AutoGenerator generator = new AutoGenerator();// set freemarker engine generator.setTemplateEngine(new FreemarkerTemplateEngine());// set beetl engine generator.setTemplateEngine(new BeetlTemplateEngine());// set custom engine (reference class is your custom engine class) generator.setTemplateEngine(new CustomTemplateEngine()); |
2.编写配置,这一步是最重要的
我们先在项目下新建一个CodeGenerator
类,具体如下图:
创建完了就可以去配置了,下面会详细介绍
public class CodeGenerator {@Testpublic void run() {// 1、创建代码生成器AutoGenerator mpg = new AutoGenerator();// 2、全局配置GlobalConfig gc = new GlobalConfig();String projectPath = System.getProperty("user.dir");// 此处建议写项目/src/main/java源代码的绝对路径gc.setOutputDir("C:\\idea\\onlinedu-parent\\service\\service-edu" + "/src/main/java");// 生成注释时的作者gc.setAuthor("scorpios");//生成后是否打开资源管理器gc.setOpen(false);gc.setFileOverride(false); //重新生成时文件是否覆盖gc.setServiceName("%sService"); //去掉Service接口的首字母Igc.setIdType(IdType.ID_WORKER_STR); //主键策略gc.setDateType(DateType.ONLY_DATE); //定义生成的实体类中日期类型// 如果开启Swagger,要引入相应的包gc.setSwagger2(true); //开启Swagger2模式mpg.setGlobalConfig(gc);// 3、数据源配置DataSourceConfig dsc = new DataSourceConfig();dsc.setUrl("jdbc:mysql://127.0.0.1:3306/mybatis_plus?serverTimezone=GMT%2B8");dsc.setDriverName("com.mysql.cj.jdbc.Driver");dsc.setUsername("root");dsc.setPassword("root");dsc.setDbType(DbType.MYSQL);mpg.setDataSource(dsc);// 4、包配置PackageConfig pc = new PackageConfig();// 此处要注意:parent + moduleName 为包的名字,在这个包下,创建对应的controller...pc.setParent("com.scorpios");pc.setModuleName("eduservice"); //模块名pc.setController("controller");pc.setEntity("entity");pc.setService("service");pc.setMapper("mapper");mpg.setPackageInfo(pc);// 5、策略配置StrategyConfig strategy = new StrategyConfig();// 数据库中表的名字,表示要对哪些表进行自动生成controller service、mapper...strategy.setInclude("edu_course","edu_course_description","edu_chapter","edu_video");// 数据库表映射到实体的命名策略,驼峰命名法strategy.setNaming(NamingStrategy.underline_to_camel);// 生成实体时去掉表前缀,比如edu_course,如果不加下面这句,生成的实体类名字就是:EduCoursestrategy.setTablePrefix("edu_"); //生成实体时去掉表前缀// strategy.setTablePrefix(pc.getModuleName() + "_"); //数据库表字段映射到实体的命名策略strategy.setColumnNaming(NamingStrategy.underline_to_camel);strategy.setEntityLombokModel(true); // lombok 模型 @Accessors(chain = true) setter链式操作strategy.setRestControllerStyle(true); //restful api风格控制器strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符mpg.setStrategy(strategy);// 6、执行mpg.execute();} } |
把上面的信息配置好,执行run函数,就可以自动生成主体代码