mybatis plus 是什麼?
mybatis plus 能幫我們什麼?
此處我們使用 mybatis plus 來幫我們生成後臺代碼,包括 controller、entity、mapper.java、service、serviceImpl、mapper.xml 一系列代碼,實用不實用用了就知道了,其他強大功能可以去查看官方文檔
一、先上效果圖
二、上代碼
1、pom 文件中需要的依賴
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--mysql -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>6.0.6</version>
</dependency>
<!--mybatis plus 相關依賴版本注意保持一致,否則會有驚喜-->
<!--mybatis plus 集成 springboot 核心依賴-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.2.0</version>
</dependency>
<!--mybatis plus 代碼生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.2.0</version>
</dependency>
<!-- 模板引擎 -->
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-engine-core</artifactId>
<version>2.0</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.29</version>
</dependency>
<!-- swagger 註解-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
<exclusions>
<exclusion>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
</exclusion>
<exclusion>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.20</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>1.5.20</version>
</dependency>
</dependencies>
2、生成代碼的生成器類
package com.wxw.mybatisplus_generator.config;
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.converts.OracleTypeConvert;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
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;
/**
* <p>
* 代碼生成器
* </p>
*/
public class MybatisPlusGenerateCode {
/**
* <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) {
// 代碼生成器
AutoGenerator mpg = new AutoGenerator();
// 全局配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath + "/src/main/java");
gc.setAuthor("WXW");//文件創建註釋
gc.setOpen(false); //生辰完成之後,是否彈出生成文件路徑(默認爲true)
gc.setFileOverride(false);// 是否覆蓋同名文件,默認是 false
gc.setActiveRecord(true);// 不需要ActiveRecord 特性的請改爲 false
gc.setEnableCache(false);// 是否需要 XML 二級緩存
gc.setBaseResultMap(true);// 是否生成 XML ResultMap
gc.setBaseColumnList(true);// 是否生成 XML columList
gc.setSwagger2(true); //實體屬性是否使用 Swagger2 註解
/* 自定義文件命名,注意 %s 會自動填充表實體屬性! */
gc.setServiceName("%sService");
// gc.setMapperName("%sDao");
// gc.setXmlName("%sDao");
// gc.setServiceImplName("%sServiceDiy");
// gc.setControllerName("%sAction");
mpg.setGlobalConfig(gc);
// 數據源配置
DataSourceConfig dsc = new DataSourceConfig();
dsc.setDriverName("com.mysql.jdbc.Driver");
dsc.setUsername("test");
dsc.setPassword("test");
dsc.setUrl("jdbc:mysql://localhost:3306/test");
dsc.setTypeConvert(new OracleTypeConvert() {//數據庫字段類型轉換
@Override
public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
if (fieldType.toLowerCase().contains("number")) {//number 轉 Integer
return DbColumnType.INTEGER;
}
if (fieldType.toLowerCase().contains("datetime")) {//datetime 轉 Date
return DbColumnType.DATE;
}
if (fieldType.toLowerCase().contains("date")) {//date 轉 Date
return DbColumnType.DATE;
}
return (DbColumnType) super.processTypeConvert(globalConfig, fieldType);
}
});
mpg.setDataSource(dsc);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setModuleName(scanner("模塊名"));//指定生成到具體的模塊名
pc.setParent("com.wxw.mybatisplus_generator");//指定生成的父路徑
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";
// 自定義輸出配置
List<FileOutConfig> focList = new ArrayList<>();
// 自定義配置會被優先輸出
focList.add(new FileOutConfig(templatePath) {// 調整 xml 生成目錄演示
@Override
public String outputFile(TableInfo tableInfo) {
// 自定義輸出文件名 , 如果你 Entity 設置了前後綴、此處注意 xml 的名稱會跟着發生變化!!
return projectPath + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// 配置模板
TemplateConfig templateConfig = new TemplateConfig();
// 配置自定義輸出模板
//指定自定義模板路徑,注意不要帶上.ftl/.vm, 會根據使用的模板引擎自動識別
// templateConfig.setEntity("templates/entity2.java");
// templateConfig.setService();
// templateConfig.setController();
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
strategy.setNaming(NamingStrategy.underline_to_camel);//表名生成策略(下劃線轉換成駝峯命名)
strategy.setColumnNaming(NamingStrategy.underline_to_camel);//字段生成策略(下劃線轉換成駝峯命名)
// strategy.setSuperEntityClass("com.baomidou.ant.common.BaseEntity");//實體類集成 BaseEntity
strategy.setEntityLombokModel(true);//使用lombok註解
strategy.setRestControllerStyle(true);//controller 加上 restController 註解
strategy.setControllerMappingHyphenStyle(true);//controller 中 RequestMapping 註解使用駝峯命令
// strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController"); //公共父類BaseController
strategy.setSuperEntityColumns("id"); // 寫於父類中的公共字段
// strategy.setInclude(new String[]{"",""});//需要生成的表名,多個表可以用英文逗號分開
strategy.setInclude(scanner("表名,多個英文逗號分割").split(","));//需要生成的表名,多個表可以用英文逗號分開
// strategy.setTablePrefix(pc.getModuleName() + "_");//生成時是否以模塊名爲前綴,默認模塊名爲前綴
strategy.setEntityTableFieldAnnotationEnable(true);//實體類屬性增加 @TableField 註解與數據庫字段對應
mpg.setStrategy(strategy);
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute();
}
}
3、運行 main 方法
最後就能看到 mybatis plus 幫你生成的代碼了。
controller
entity
mapper
service
serviceImpl
mapper.xml