代码生成器
问题导入
如果只给一张表的字段信息,能够推演出Domain、Dao层的代码?
1. MyBatisPlus提供模板
- Mapper接口模板
- 实体对象类模板
2. 工程搭建和基本代码编写
- 第一步:创建SpringBoot工程,添加代码生成器相关依赖,其他依赖自行添加
<!--代码生成器-->
<dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.1</version>
</dependency><!--velocity模板引擎-->
<dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.3</version>
</dependency>
配置前目录结构
- 第二步:编写代码生成器类
package com.itheima;import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;public class Generator {public static void main(String[] args) {//1. 创建代码生成器对象,执行生成代码操作/*** 第一步: 使用代码生成器*///怎么用代码生成器呢?// 1.创建代码生成器对象// 2.执行代码生成器 //mp包里面的AutoGeneratorAutoGenerator autoGenerator = new AutoGenerator();// 告诉它怎么生成,在哪生成//datasource数据源配置DataSourceConfig dataSource = new DataSourceConfig();dataSource.setDriverName("com.mysql.cj.jdbc.Driver");dataSource.setUrl("jdbc:mysql://localhost:3306/mybatisplus_db?serverTimezone=UTC");dataSource.setUsername("root");dataSource.setPassword("123456");autoGenerator.setDataSource(dataSource);//会在D盘生成一个com文件,但是这个位置是不对的,需要我们再进一步配置//3. 执行生成操作autoGenerator.execute();}
}
3. 开发者自定义配置
- 设置全局配置
/*** 第二步: 设置全局配置*/GlobalConfig globalConfig = new GlobalConfig();//默认输出D盘根下,设置到这一目录下 mybatis_04-generator/src/main/javaglobalConfig.setOutputDir(System.getProperty("user.dir")+"/mybatis_04-generator/src/main/java");//globalConfig.setOutputDir(System.getProperty("user.dir")+"\\src\\main\\java");// \\src\\main\\java//设置完之后是否打开资源管理器 NOglobalConfig.setOpen(false);//设置作者globalConfig.setAuthor("黑马程序员");//设置是否覆盖原始生成的文件globalConfig.setFileOverride(true);//设置数据层接口名,%s为占位符 代表数据库中的表名或模块名globalConfig.setMapperName("%sDao");//设置id生成策略globalConfig.setIdType(IdType.ASSIGN_ID);autoGenerator.setGlobalConfig(globalConfig);
- 设置包名相关配置
/*** 第三步: 设置包名相关配置*/PackageConfig packageConfig =new PackageConfig();//设置生成的包名,与代码所在位置不冲突,二者叠加组成完整路径packageConfig.setParent("com.aaa");//设置实体类包名packageConfig.setEntity("domain");//设置数据层包名packageConfig.setMapper("dao");autoGenerator.setPackageInfo(packageConfig);
- 策略设置
/*** 第四步: 策略设置*/StrategyConfig strategyConfig = new StrategyConfig();//设置当前参与生成的表名,参数为可变参数 生成指定表strategyConfig.setInclude("tbl_user");//设置数据库表的前缀名称,模块名=数据库表名-前缀名 User=tbl_user - tbl_strategyConfig.setTablePrefix("tbl_");//是否启用Rest风格strategyConfig.setRestControllerStyle(true);//设置乐观锁字段名strategyConfig.setVersionFieldName("version");//设置逻辑删除字段名strategyConfig.setLogicDeleteFieldName("deleted");//设置是否启用LombokstrategyConfig.setEntityLombokModel(true);autoGenerator.setStrategy(strategyConfig);
配置后执行main方法并删除mapper包后的目录结构
说明:源码及配置,在开发时可以直接复制稍作修改,然后使用
pom.xml
配置文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.4</version></parent><groupId>com.example</groupId><artifactId>mybatis_04-generator</artifactId><version>0.0.1-SNAPSHOT</version><properties><java.version>1.8</java.version></properties><dependencies><!--spring webmvc--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!--自己添加的=================================================--><!--mybatis-plus--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.4.1</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.16</version></dependency><!--lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--首次出现的--><!--代码生成器--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><version>3.4.1</version></dependency><!--velocity模板引擎--><dependency><groupId>org.apache.velocity</groupId><artifactId>velocity-engine-core</artifactId><version>2.3</version></dependency><!--自己添加的=================================================--><!--mysql--><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><!--test--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
CodeGenerator
java文件
import com.baomidou.mybatisplus.annotation.IdType;
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;public class CodeGenerator {//直接运行帮我们生成代码public static void main(String[] args) {/*** 第一步: 使用代码生成器*///怎么用代码生成器呢?// 1.创建代码生成器对象// 2.执行代码生成器 //mp包里面的AutoGeneratorAutoGenerator autoGenerator = new AutoGenerator();// 告诉它怎么生成,在哪生成//datasource数据源配置DataSourceConfig dataSource = new DataSourceConfig();dataSource.setDriverName("com.mysql.cj.jdbc.Driver");dataSource.setUrl("jdbc:mysql://localhost:3306/mybatisplus_db?serverTimezone=UTC");dataSource.setUsername("root");dataSource.setPassword("123456");autoGenerator.setDataSource(dataSource);//会在D盘生成一个com文件,但是这个位置是不对的,需要我们再进一步配置/*** 第二步: 设置全局配置*/GlobalConfig globalConfig = new GlobalConfig();//默认输出D盘根下,设置到这一目录下 mybatis_04-generator/src/main/javaglobalConfig.setOutputDir(System.getProperty("user.dir")+"/mybatis_04-generator/src/main/java");//globalConfig.setOutputDir(System.getProperty("user.dir")+"\\src\\main\\java");// \\src\\main\\java//设置完之后是否打开资源管理器 NOglobalConfig.setOpen(false);//设置作者globalConfig.setAuthor("黑马程序员");//设置是否覆盖原始生成的文件globalConfig.setFileOverride(true);//设置数据层接口名,%s为占位符 代表数据库中的表名或模块名globalConfig.setMapperName("%sDao");//设置id生成策略globalConfig.setIdType(IdType.ASSIGN_ID);autoGenerator.setGlobalConfig(globalConfig);/*** 第三步: 设置包名相关配置*/PackageConfig packageConfig =new PackageConfig();//设置生成的包名,与代码所在位置不冲突,二者叠加组成完整路径packageConfig.setParent("com.aaa");//设置实体类包名packageConfig.setEntity("domain");//设置数据层包名packageConfig.setMapper("dao");autoGenerator.setPackageInfo(packageConfig);/*** 第四步: 策略设置*/StrategyConfig strategyConfig = new StrategyConfig();//设置当前参与生成的表名,参数为可变参数 生成指定表strategyConfig.setInclude("tbl_user");//设置数据库表的前缀名称,模块名=数据库表名-前缀名 User=tbl_user - tbl_strategyConfig.setTablePrefix("tbl_");//是否启用Rest风格strategyConfig.setRestControllerStyle(true);//设置乐观锁字段名strategyConfig.setVersionFieldName("version");//设置逻辑删除字段名strategyConfig.setLogicDeleteFieldName("deleted");//设置是否启用LombokstrategyConfig.setEntityLombokModel(true);autoGenerator.setStrategy(strategyConfig);autoGenerator.execute();//执行}
}
猿猿建议前期学习的时候以练习为主,尽量不要使用代码生成器自动生成哦。