文章目录
前言
当数据库表字段少时自己手动写好该表所对应的实体类难度不大,比如下图:
实际开发过程中数据库表字段动辄20个以上,比如下图,如果还是自己手写实体类mapper等固定代码你会发现是种折磨,并且意义不大,所以通过mybatis-plus
生成java
代码很有必要!
一、mybatis-plus生成java代码是什么
用mybatis-plus官方文档的话描述:
AutoGenerator 是 MyBatis-Plus 的代码生成器,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率。
二、使用步骤
1.创建maven项目
2.导入项目依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.3.0.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
<!-- MySQL数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.26</version>
</dependency>
<!-- mybatisPlus代码生成器 -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.2</version>
</dependency>
<!-- mybatisPlus代码生成器依赖的模板引擎 -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.31</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<!-- swagger依赖 -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.6.1</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.6.1</version>
</dependency>
</dependencies>
注意:
mysql版本如果是5.x的话依赖如下:
<!-- MySQL数据库驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>
3.创建代码生成器CodeGenerator.java
4.代码生成器CodeGenerator.java代码修改
可能看起来有点多,真正需要修改的其实就几处而已、别的都是写好的轮子~
修改好后可以直接运行~
public class CodeGenerator {
/**
* <p>
* 读取控制台内容
* </p>
*/
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) {
Scanner scanner = new Scanner(System.in);
AutoGenerator generator = new AutoGenerator();
// 全局变量配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir"); //当前项目(写死无需更改!!!)
gc.setOutputDir(projectPath + "/src/main/java"); // 输出路径(写死无需更改!!!)
gc.setFileOverride(true); // 默认 false ,是否覆盖已生成文件
gc.setOpen(false); //默认true ,是否打开输出目录
gc.setEnableCache(false); // 默认false,是否开启二级缓存
gc.setAuthor("venny"); // 作者
gc.setSwagger2(true); // 设置swagger 默认false
gc.setBaseResultMap(true); // 生成BaseResultMap 默认false
gc.setEntityName("%s");
gc.setControllerName("%sController");
gc.setServiceName("I%sService");
gc.setServiceImplName("%sServiceImpl");
gc.setMapperName("I%sMapper");
gc.setXmlName("%sMapper");
gc.setIdType(IdType.AUTO); // 指定生成的主键类型
generator.setGlobalConfig(gc);
// =============想要生成对应代码的数据表所在数据库配置===========
// 需要修改的地方!!!
// mysql8版本
DataSourceConfig dc = new DataSourceConfig();
dc.setDbQuery(new MySqlQuery()); // 数据库信息查询 //默认mysql
dc.setDbType(DbType.MYSQL);// 数据库类型
dc.setTypeConvert(new MySqlTypeConvert()); //类型转换 默认mysql
dc.setUrl("jdbc:mysql://localhost:3306/你的数据库名" +
"?characterEncoding=UTF-8&useSSL=false&serverTimezone=UTC");
dc.setDriverName("com.mysql.cj.jdbc.Driver");
dc.setUsername("root");
dc.setPassword("你的数据库密码");
generator.setDataSource(dc);
// 需要修改的地方!!!
// ==================代码生成所在包的位置======================
PackageConfig pc = new PackageConfig();
// 你的包名在这里指定(生成的实体类等java代码保存的位置由这个决定)
pc.setParent("com.venny");//代码生成到哪个包下面
// pc.setModuleName(""); //此处是所属模块名称
generator.setPackageInfo(pc);
// 自定义配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
// to do nothing
}
};
/**
* 生成mapper.xml
* 生成到resource下面
*/
// 这下面代码基本不用动!
String templatePath = "/templates/mapper.xml.vm"; // Velocity模板(写死无需更改!!!)
// 自定义输出配置
List<FileOutConfig> focList = new ArrayList<>();
// 自定义配置会被优先输出
focList.add(new FileOutConfig(templatePath) {
// =================设置mapper输出位置(resources/mapper目录下)=================
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
return projectPath + "/src/main/resources/mapper/"
// + pc.getModuleName()
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
generator.setCfg(cfg);
// 配置模板(写死无需更改!!!)
TemplateConfig tc = new TemplateConfig();
// templates/entity.java 模板路径配置,默认在templates目录下,.vm 后缀不用加
tc.setEntity("templates/entity.java");//使用自定义模板生成实体类
tc.setXml("");
generator.setTemplate(tc);
// ===============数据库表配置====================
StrategyConfig sc = new StrategyConfig();
sc.setCapitalMode(false); //是否大写命名 默认false
sc.setSkipView(true); //是否跳过视图 默认false
sc.setNaming(NamingStrategy.underline_to_camel);// 表映射 驼峰命名
sc.setColumnNaming(NamingStrategy.underline_to_camel); // 字段映射 驼峰
sc.setEntityLombokModel(true); //是否使用lombok 默认为false
sc.setRestControllerStyle(true); // 生成@RestController
sc.setControllerMappingHyphenStyle(true); // @RequestMapping驼峰转连字符
sc.setInclude(scanner("表名,多个英文逗号分割").split(",")); //表名,用逗号隔开
sc.setEntityTableFieldAnnotationEnable(true); // 默认false 注释
// sc.setTablePrefix("XX_"); // 去除表前缀
sc.setLogicDeleteFieldName("is_deleted"); // 逻辑删除字段名称
generator.setStrategy(sc);
// 模板引擎(写死无需更改!!!)
generator.setTemplateEngine(new VelocityTemplateEngine());
generator.execute();
}
}
5.运行代码
找到你数据库要生成代码的表
点击运行并在控制台输入该表名后回车
6.运行结果
控制台可以看到代码生成成功!
与此同时,在项目目录也可以看到代码全部生成了!
总结
mybatis-plus代码生成器用熟练了肯定能够提高开发效率!只需要知道改生成器的哪几个地方就可以按照自己的想法去生成代码了。