一,任何學習都離不開官方檔案
檔案:https://baomidou.com/guide/generator.html
二,使用逆向工程
1,當別人丟給你一個sql腳本時,這時使用逆向工程簡直不要太爽,當然逆向工程的方式有很多種,如有很多插件也可以逆向工程,這里主要對mybati-plus進行講解
2,使用逆向工程也有不足之處,就是需要有資料庫以及資料表,這是有點可惜的,這也解釋了為什么有的人在考慮設計一個專案時先考慮設計資料庫了,對于 java 工程師真的爽,也正是越來越簡便的緣故,不得不說 java工程師 還是需要懂得更多的,如前端運維等,
三,開始專案
1,使用 springboot框架構建專案,并使用 maven 管理工具,隨便構建一個專案就行了,
2,需要的依賴,目前是使用了一下依賴,不足的話在需要時再添加
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<!--mybatis-plus-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.0.5</version>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
<version>2.3.30</version>
</dependency>
<!--swagger2-->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.9.2</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.9.2</version>
</dependency>
</dependencies>
3,資料庫設計,這里需要表比較多,如果僅僅是想體驗一下的話,自己隨便在資料庫中設計幾個表就行了

4,撰寫一個 java 類,由于只是想生成代碼,所以那些test 測驗之類的就可以都不要了,留這么一點東西就夠了

5,撰寫Generator 類
package zhenghuisheng.yeb;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.FieldFill;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.core.exceptions.MybatisPlusException;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
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.TableFill;
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 net.bytebuddy.implementation.ExceptionMethod;
import org.springframework.util.StringUtils;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
/**
* @author xiaozheng
* time : 2021/1/23 20:30
*/
public class Generator {
// //輸入資料時盡量不要換行
// public static String getScanner() throws Exception {
// BufferedReader bu = new BufferedReader(new InputStreamReader(System.in));
// String dataTable = bu.readLine();
// return dataTable;
// }
public static String sscanner(String tip){
Scanner sc = new Scanner(System.in);
StringBuilder help = new StringBuilder();
help.append("請輸入" + tip + "");
System.out.println(help.toString());
if (sc.hasNext()) {
String ipt = sc.next();
if (!StringUtils.isEmpty(ipt)){
return ipt;
}
}
throw new MybatisPlusException("請輸入正確的" + tip + "!");
}
public static void main(String[] args) {
// 需要構建一個 代碼自動生成器 物件
AutoGenerator mpg = new AutoGenerator();
// 1、全域配置
GlobalConfig gc = new GlobalConfig();
String projectPath = System.getProperty("user.dir");
gc.setOutputDir(projectPath+"/yeb-generate/src/main/java");
gc.setAuthor("zhenghuisheng");
gc.setOpen(false);
gc.setBaseColumnList(true);
gc.setSwagger2(true);
mpg.setGlobalConfig(gc);
//設定資料源
DataSourceConfig dsc = new DataSourceConfig();
dsc.setUrl("jdbc:mysql://localhost:3306/yeb? useSSL=false&useUnicode=true&characterEncoding=utf-8&serverTimezone=GMT%2B8");
dsc.setDriverName("com.mysql.cj.jdbc.Driver");
dsc.setUsername("root");
dsc.setPassword("zhs03171812");
dsc.setDbType(DbType.MYSQL);
mpg.setDataSource(dsc);
//3、包的配置
PackageConfig pc = new PackageConfig();
pc.setParent("zhenghuisheng.yeb");
pc.setEntity("pojo");
pc.setMapper("mapper");
pc.setService("service");
pc.setServiceImpl("service.impl");
pc.setController("controller");
mpg.setPackageInfo(pc);
//4,自定義配置
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
}
};
//如果模板引擎是 freemarker
String templatePath = "/templates/mapper.xml.ftl";
//自定義輸出配置
List<FileOutConfig> focList = new ArrayList<>();
focList.add(new FileOutConfig(templatePath) {
@Override
public String outputFile(TableInfo tableInfo) {
return projectPath + "/yeb-generate/src/main/resources/mapper/" + tableInfo.getEntityName()
+ "Mapper" + StringPool.DOT_XML;
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
//配置模板
TemplateConfig templateConfig = new TemplateConfig();
templateConfig.setXml(null);
mpg.setTemplate(templateConfig);
//策略配置
StrategyConfig strategy = new StrategyConfig();
// 設定要映射的表名
//資料庫表映射到物體的命名策略
strategy.setNaming(NamingStrategy.underline_to_camel);
//資料庫表欄位映射到物體的命名策略
strategy.setColumnNaming(NamingStrategy.no_change);
//設定lombok模型
strategy.setEntityLombokModel(true);
//設定@RestController控制器
strategy.setRestControllerStyle(true);
strategy.setInclude(sscanner("表名,多個英文逗號分隔").split(","));
// try{
// strategy.setInclude(getScanner().split(","));
// }catch(Exception e){
// System.out.println("資料輸入有誤");
// }
strategy.setControllerMappingHyphenStyle(true);
//localhost:8080/hello_id_2
mpg.setStrategy(strategy);
//表前綴
strategy.setTablePrefix("t_");
mpg.setTemplateEngine(new FreemarkerTemplateEngine());
mpg.execute(); //執行
}
}
6,運行,在控制臺輸入資料庫中的表名,表與表之間與英文逗號分開,表名一定要對,不然會報錯
7,運行結果,就是每一個表對于的物體類,以及service層以及實作service介面的類都出來了,controller層也出來了,一個字形容就是爽·
四,總結
逆向工程還是厲害的,省去了大量碼代碼的時間!
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/252121.html
標籤:java
上一篇:介面
