本文还是采用经典实用知识三段论。是什么?能干什么?怎么干?让Mybatis-plus代码生成器轻而易举的为你所用。希望文章能够帮到你提高写代码的效率~
前言
- 整合基于在idea已经创建好的Springboot项目
- 已准备好所需要的数据库连接信息以及表信息
是什么?
- 首先了解到MyBatis属于一种半自动的ORM框架,它需要我们自己编写sql语句和映射文件,但是编写映射文件和sql语句很容易出错。
- MyBatis Plus是MyBatis的扩展框架,另外还有 “条件构造器”和“通用CRUD”等功能。但是还是逃不掉编写实体类,controller,service,mapper以及mapper.xml,这个时候官方听到了人们的诉求,给mybatis plus加上了又一核心功能--代码生成器。
- 代码生成器基于java代码实现,基于 xml 文件进行代码生成
能干什么?
- 能够根据数据库中已经存在的表,生成对应的Entity、Mapper、Mapper XML、Service、Controller等各个模块的代码,可以极大的提升开发效率
怎么干?
<!-- mybatis-plus框架依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.3.2</version>
</dependency>
<!-- 代码生成器的依赖-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.2</version>
</dependency>
<!-- velocity 模板引擎, 默认生成代码的模板-->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.3</version>
</dependency>
<!--MyBatis-Plus逆向功能所需的模板引擎-->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.30</version>
</dependency>
如果有需要将运行生成的XxxMapper.xml和 jdbc.properiters文件放入到target文件夹时,还可加上
<build>
<resources>
<!--解决mybatis-generator-maven-plugin运行时没有将XxxMapper.xml文件放入target文件夹的问题-->
<resource>
<directory>src/main/java</directory>
<includes>
<include>**/*.yml</include>
<include>**/*.xml</include>
</includes>
</resource>
<!--解决mybatis-generator-maven-plugin运行时没有将jdbc.properites文件放入target文件夹的问题-->
<resource>
<directory>src/main/resources</directory>
<includes>
<include>**/*.yml</include>
<include>*.properties</include>
<include>*.xml</include>
</includes>
</resource>
</resources>
</build>
-
第二步:复制粘贴下面代码。放在自己的配置包下,修改个别配置(修改数据源,生成java的目录,作者,模板引擎等信息)
package com.lijintao.file.utils;
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.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* mybatis-plus代码生成器
*
* @author 154594742@qq.com
* @date 2021/2/24 16:32
*/
public class CodeGenerateUtils {
/**
* 读取控制台内容
*/
private 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.isNotBlank(ipt)) {
return ipt;
}
}
throw new MybatisPlusException("请输入正确的" + tip + "!");
}
/**
* 运行这个main方法进行代码生成
*/
public static void main(String[] args) {
// 代码生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
//获取当前的项目模块路径,例如 D:\ljt_work\java_work\ljt_im_ex_file 是我当前父模块的位置
String projectPath = System.getProperty("user.dir");
//设置生成代码的文件夹路径,我设置到了我父模块下子模块的java文件下
gc.setOutputDir(projectPath + "/ex_file/src/main/java");
//设置作者
gc.setAuthor("LJT");
//设置是否打开目录,false 为不打开
gc.setOpen(false);
//设置实体属性是否加 Swagger2 注解
gc.setSwagger2(true);
//设置Service层的生成的代码名称,默认有前缀 I 设置为%sService 意思就是 表名+Service
gc.setServiceName("%sService");
//设置时间格式为常规Date
gc.setDateType(DateType.ONLY_DATE);
mpg.setGlobalConfig(gc);
// 数据源配置,根据自己的数据源连接信息进行配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:postgresql://192.168.134.129:5432/cloudsw_dmc?currentSchema=cloudsw_dmc");
dsc.setDriverName("org.postgresql.Driver");
dsc.setUsername("cloudsw_dmc");
dsc.setPassword("cloudsw_dmc");
mpg.setDataSource(dsc);
/*
包配置,可以根据自己的项目情况自定义生成后的存放路径
entity默认路径为父目录.entity
mapper默认路径为父目录.mapper
service默认路径为父目录.service
serviceImpl默认路径为父目录.service.impl
controller默认路径为父目录.controller
*/
PackageConfig pc = new PackageConfig();
pc.setModuleName(null);
//设置父目录
pc.setParent("com.lijintao.file");
//自定义entity实体类代码的生成位置
pc.setEntity("model");
// 配置 controller 包名
pc.setController("controller");
// 配置 service 包名
pc.setService("service");
// 配置 service.impl 包名
pc.setServiceImpl("service.impl");
// 配置 mapper 包名
pc.setMapper("mapper");
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";
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
// 自定义输出配置
List<FileOutConfig> focList = new ArrayList<>();
// 自定义配置会被优先输出
focList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
// 自定义输出mapper.xml文件名以及位置 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
return projectPath + "ex_file/src/main/resources/mappers/"
+ "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setEntityLombokModel(true);
// 配置数据表与实体类名之间映射的策略
strategy.setNaming(NamingStrategy.underline_to_camel);
// 配置数据表的字段与实体类的属性名之间映射的策略
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
// 配置 lombok 模式.实体类加lombok注解
strategy.setEntityLombokModel(true);
// 配置 rest 风格的控制器(@RestController)
strategy.setRestControllerStyle(true);
//配置同时生成多个表的实体代码,用逗号隔开
strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
// 配置驼峰转连字符
strategy.setControllerMappingHyphenStyle(true);
// 设置表的前缀,如果数据库表名有前缀,但是实体类不想有前缀,可设置前缀。例:表为t_users 生成的实体将为users
strategy.setTablePrefix("t_");
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}
-
第三步:执行java代码类,控制台填写需要生成的数据库表名。多个用逗号隔开。回车即可生成
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)