Mybatis-Plus代码生成器的使用,首先要进行添加依赖操作(又称导包),按照官网推荐和项目要求进行导包
官网链接:https://mp.baomidou.com/guide/
1、添加代码生成器依赖
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
2、根据需要添加模板引擎依赖,具体引擎实例官网上都有,本文以 Freemarker模板引擎为例
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>latest-freemarker-version</version>
</dependency>
3、开始编写代码生成器类
创建一个类,来放置自动生成器代码,一般可创建在测试文件夹中(test)
将代码生成器代码放置在一个main()方法中,可直接运行
①创建一个代码生成器对象
AutoGenerator mpg = new AutoGenerator();
②进行全局配置
// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir"); //获取当前项目的目录
gc.setOutputDir(projectPath + "/src/main/java"); //设置代码生成路径
gc.setAuthor("jobob"); //设置代码作者
mpg.setGlobalConfig(gc); //将全局配置放到代码生成器的对象中
③进行数据源配置
mybatis-plus代码生成器强大的功能之一在于,它不用你事先创建好和数据库中表对应的对象,代码生成器可通过读取数据库表与列名直接生成对应的对象
// 数据源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/ant?useUnicode=true&useSSL=false&characterEncoding=utf8");
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("密码");
mpg.setDataSource(dsc);
该配置用来直接生成pojo文件中的与数据库表相对应的对象。
④ 进行包配置(在这里以我个人的项目为例)
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.jp");
pc.setEntity("pojo");
pc.setController("controller");
pc.setMapper("mapper");
pc.setService("service");
pc.setServiceImpl("service.impl");
⑤包配置后 ,由于官网上的代码是将包配置直接放到代码生成器对象中,下面进行自定义输出配置,过程个人感觉较为繁琐,此处有一个简单的方法。仅供大家参考
代码生成器执行的入口是执行生成,即 mpg.excupt()
当进去看源码的时候会发现(由于是开源的源码,大家可在java编写代码的工具中进行查看)
public void execute() {
logger.debug("==========================准备生成文件...==========================");
if (null == this.config) {
this.config = new ConfigBuilder(this.packageInfo, this.dataSource, this.strategy, this.template, this.globalConfig);
if (null != this.injectionConfig) {
this.injectionConfig.setConfig(this.config);
}
}
ConfigBuilder对象中传了一个packageInfo的属性,于是再往深层次的去查看,会发现在handlerPackage类中有这样一段代码
this.setPathInfo(this.pathInfo, template.getEntity(this.getGlobalConfig().isKotlin()), outputDir, "entity_path", "Entity");
this.setPathInfo(this.pathInfo, template.getMapper(), outputDir, "mapper_path", "Mapper");
this.setPathInfo(this.pathInfo, template.getXml(), outputDir, "xml_path", "Xml");
this.setPathInfo(this.pathInfo, template.getService(), outputDir, "service_path", "Service");
this.setPathInfo(this.pathInfo, template.getServiceImpl(), outputDir, "service_impl_path", "ServiceImpl");
this.setPathInfo(this.pathInfo, template.getController(), outputDir, "controller_path", "Controller");
是用来设置代码生成的路径,所以我们可以用该方式进行对代码生成路径的设置(以我个人代码为例)
此处个人感觉是比较好用的地方,大家可以根据自己的实际情况考虑是否使用
//自定义生成路径
Map<String,String> map = new HashMap<>();
map.put("entity_path",config + "/src/main/java/com/jp/pojo");
map.put("mapper_path",config + "/src/main/java/com/jp/mapper");
map.put("xml_path",config + "/src/main/resources/com/jp/mapper");
map.put("service_path",config + "/src/main/java/com/jp/service");
map.put("service_impl_path",config + "/src/main/java/com/jp/service/impl");
map.put("controller_path",config + "/src/main/java/com/jp/controller");
pc.setPathInfo(map); //将生成路径放进map
mpg.setPackageInfo(pc);
⑥策略配置
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);
strategy.setColumnNaming(NamingStrategy.underline_to_camel);
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(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
⑦执行生成
mpg.execute();
在我个人写代码中遇到的问题:
导包错误导致的
这里突然报错,是由于上面导包倒错的原因
GlobalConfig包倒错导致的
应该导的是
generator下的GlobalConfig
声明:本文为自己参考官网编写,如有侵权联系删帖