Spring Boot整合MybatisPlus逆向工程(MySQL/PostgreSQL)
MyBatis-Plus是MyBatis的增強(qiáng)工具,Generator通過MyBatis-Plus快速生成Entity、Mapper、Mapper XML、Service、Controller等模塊的代碼,方便快捷。
一、創(chuàng)建表
我們先創(chuàng)建數(shù)據(jù)庫表:sys_log、sys_user
CREATE TABLE `sys_log` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `username` varchar(50) DEFAULT NULL COMMENT '用戶名', `operation` varchar(50) DEFAULT NULL COMMENT '用戶操作', `method` varchar(200) DEFAULT NULL COMMENT '請(qǐng)求方法', `params` varchar(5000) DEFAULT NULL COMMENT '請(qǐng)求參數(shù)', `time` bigint(20) NOT NULL COMMENT '執(zhí)行時(shí)長(zhǎng)(毫秒)', `ip` varchar(64) DEFAULT NULL COMMENT 'IP地址', `create_date` datetime DEFAULT NULL COMMENT '創(chuàng)建時(shí)間', PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=66720 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC; CREATE TABLE `sys_user` ( `id` varchar(255) NOT NULL, `company_id` varchar(64) NOT NULL COMMENT '歸屬公司', `office_id` varchar(64) NOT NULL COMMENT '歸屬部門', `login_name` varchar(30) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '唯一登錄名', `password` varchar(100) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '密碼', `no` varchar(100) DEFAULT NULL COMMENT '工號(hào)', `name` varchar(100) NOT NULL COMMENT '姓名', `email` varchar(200) DEFAULT NULL COMMENT '郵箱', `phone` varchar(200) DEFAULT NULL COMMENT '電話', `mobile` varchar(200) DEFAULT NULL COMMENT '手機(jī)', `user_type` char(1) DEFAULT NULL COMMENT '用戶類型', `photo` varchar(1000) DEFAULT NULL COMMENT '用戶頭像', `login_ip` varchar(100) DEFAULT NULL COMMENT '最后登陸IP', `login_date` datetime DEFAULT NULL COMMENT '最后登陸時(shí)間', `login_flag` varchar(64) DEFAULT NULL COMMENT '是否可登錄', `create_by` varchar(64) NOT NULL COMMENT '創(chuàng)建者', `create_time` datetime NOT NULL COMMENT '創(chuàng)建時(shí)間', `update_by` varchar(64) NOT NULL COMMENT '更新者', `update_date` datetime NOT NULL COMMENT '更新時(shí)間', `remarks` varchar(255) DEFAULT NULL COMMENT '備注信息', `del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '刪除標(biāo)記', `device_alias` varchar(255) DEFAULT NULL, `device_type` varchar(255) DEFAULT NULL, `token` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) USING BTREE, KEY `sys_user_office_id` (`office_id`) USING BTREE, KEY `sys_user_login_name` (`login_name`) USING BTREE, KEY `sys_user_company_id` (`company_id`) USING BTREE, KEY `sys_user_update_date` (`update_date`) USING BTREE, KEY `sys_user_del_flag` (`del_flag`) USING BTREE ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='用戶表';
二、創(chuàng)建Spring Boot工程
創(chuàng)建Spring Boot項(xiàng)目,網(wǎng)上很多教程,這里不再贅述。
三、引入逆向工程依賴
MyBatis-Plus本來是集成了代碼生成器的,但是在3.0.3以后的版本移除了對(duì)應(yīng)的依賴,需要我們手動(dòng)添加相關(guān)的依賴:
<!--就不需要手動(dòng)引入mybatis -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.3.2</version>
</dependency>
<!--mybatisplus 代碼生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.2</version>
</dependency>
添加模板引擎:
<!-- 模板引擎 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
全部依賴如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.gaspipn.app</groupId>
<artifactId>Generator</artifactId>
<version>1.0-SNAPSHOT</version>
<!--<name>GeneratorCommon</name>
<description>GeneratorCommon</description>-->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.0.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<mybatisplus.spring.boot.version>1.0.5</mybatisplus.spring.boot.version>
<mybatisplus.version>2.2.0</mybatisplus.version>
<mysql.version>8.0.11</mysql.version>
<mssql.version>4.0</mssql.version>
<oracle.version>11.2.0.3</oracle.version>
<druid.version>1.1.10</druid.version>
<quartz.version>2.3.0</quartz.version>
<commons.lang.version>2.6</commons.lang.version>
<commons.fileupload.version>1.2.2</commons.fileupload.version>
<commons.io.version>2.5</commons.io.version>
<commons.codec.version>1.10</commons.codec.version>
<commons.configuration.version>1.10</commons.configuration.version>
<shiro.version>1.4.0</shiro.version>
<jwt.version>0.7.0</jwt.version>
<kaptcha.version>0.0.9</kaptcha.version>
<qiniu.version>[7.2.0, 7.2.99]</qiniu.version>
<aliyun.oss.version>2.8.3</aliyun.oss.version>
<qcloud.cos.version>4.4</qcloud.cos.version>
<swagger.version>2.7.0</swagger.version>
<joda.time.version>2.9.9</joda.time.version>
<fastjson.version>1.2.47</fastjson.version>
<hutool.version>4.1.1</hutool.version>
<!--wagon plugin 配置-->
<service-path>/work/renren</service-path>
<pack-name>${project.artifactId}-${project.version}.jar</pack-name>
<remote-addr>localhost:22</remote-addr>
<remote-username>root</remote-username>
<remote-passwd>123456</remote-passwd>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>2.1.14.RELEASE</version>
</dependency>
<!-- 模板引擎 -->
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-context</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-jdbc</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-test</artifactId>
<version>5.1.5.RELEASE</version>
</dependency>
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity</artifactId>
<version>1.7</version>
</dependency>
<!--就不需要手動(dòng)引入mybatis -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus</artifactId>
<version>3.3.2</version>
</dependency>
<!--mybatisplus 代碼生成器-->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-generator</artifactId>
<version>3.3.2</version>
</dependency>
<!-- mysql依賴 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.45</version>
</dependency>
<!-- 連接池和fastjson -->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>druid</artifactId>
<version>1.0.31</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.51</version>
</dependency>
<!-- lombok模型 -->
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.20</version>
</dependency>
<!--slf4j-->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-log4j12</artifactId>
<version>1.6.1</version>
</dependency>
<!-- swagger -->
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger2</artifactId>
<version>2.10.5</version>
</dependency>
<dependency>
<groupId>io.springfox</groupId>
<artifactId>springfox-swagger-ui</artifactId>
<version>2.10.5</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-annotations</artifactId>
<version>1.5.24</version>
</dependency>
<dependency>
<groupId>io.swagger</groupId>
<artifactId>swagger-models</artifactId>
<version>1.5.24</version>
</dependency>
<!--postgresql數(shù)據(jù)庫-->
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
</dependency>
</dependencies>
</project>
四、代碼中完成逆向工程配置
代碼里面的注釋已經(jīng)很全面,就不再進(jìn)行代碼的詳細(xì)解析了,如下:
package com.johan.generator;
import com.baomidou.mybatisplus.annotation.DbType;
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.MySqlTypeConvert;
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 java.io.File;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @author JohanChan
* @ProjectName Generator
* @Description MySQL/PostGre 生成演示
* @time 2021/7/7 16:49
*/
public class GeneratorCommon {
/**
* <p> Mr.Chen
* MySQL/PostGre 生成演示
* </p>
*/
//獲取 項(xiàng)目絕對(duì)路徑
private static String canonicalPath = "";
public static void main(String[] args) {
//獲取項(xiàng)目路徑
try {
canonicalPath = new File("").getCanonicalPath();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("canonicalPath=" + canonicalPath);
// String filePath = canonicalPath+"\\mybatisPlusGer\\src\\main\\";
String filePath = canonicalPath + "\\src\\main\\";
AutoGenerator mpg = new AutoGenerator();
// 選擇 freemarker 引擎,默認(rèn) Veloctiy
//mpg.setTemplateEngine(new FreemarkerTemplateEngine());
// 全局配置
GlobalConfig gc = new GlobalConfig();
gc.setAuthor("Johan");//作者名
gc.setSwagger2(true); //實(shí)體屬性 Swagger2 注解
gc.setOutputDir(filePath + "java");//代碼生成路徑
gc.setFileOverride(true);// 是否覆蓋同名文件,默認(rèn)是false
gc.setActiveRecord(true);// 不需要ActiveRecord特性的請(qǐng)改為false
gc.setEnableCache(false);// XML 二級(jí)緩存
gc.setBaseResultMap(true);// XML ResultMap
gc.setBaseColumnList(false);// XML columList
gc.setOpen(false);//生成后打開文件夾
/* 自定義文件命名,注意 %s 會(huì)自動(dòng)填充表實(shí)體屬性! */
gc.setControllerName("%sController");
gc.setServiceName("%sService");
gc.setServiceImplName("%sServiceImpl");
gc.setMapperName("%sMapper");
gc.setXmlName("%sMapper");
mpg.setGlobalConfig(gc);
// 數(shù)據(jù)源配置
DataSourceConfig dsc = new DataSourceConfig();
//指定數(shù)據(jù)庫類型,DbType中有對(duì)應(yīng)的枚舉類型,pom文件中要添加對(duì)應(yīng)的數(shù)據(jù)庫引用
dsc.setDbType(DbType.MYSQL);//MySQL數(shù)據(jù)庫
// dsc.setDbType(DbType.POSTGRE_SQL);//PostGre數(shù)據(jù)庫
dsc.setTypeConvert(new MySqlTypeConvert() {
// 自定義數(shù)據(jù)庫表字段類型轉(zhuǎn)換【可選】
@Override
public IColumnType processTypeConvert(GlobalConfig gc, String fieldType) {
System.out.println("轉(zhuǎn)換類型:" + fieldType);
// 注意!!processTypeConvert 存在默認(rèn)類型轉(zhuǎn)換,如果不是你要的效果請(qǐng)自定義返回、非如下直接返回。
//默認(rèn)會(huì)把日期類型 轉(zhuǎn)為L(zhǎng)ocalDateTime ,在查詢的時(shí)候會(huì)報(bào)錯(cuò),這里改為Date
String t = fieldType.toLowerCase();
if (t.contains("date") || t.contains("time") || t.contains("year")) {
return DbColumnType.DATE;
} else {
return super.processTypeConvert(gc, fieldType);
}
}
});
//數(shù)據(jù)庫連接配置
dsc.setDriverName("com.mysql.jdbc.Driver");
// dsc.setDriverName("com.mysql.cj.jdbc.Driver"); //mysql8.0使用
dsc.setUsername("root");
dsc.setPassword("123456");
dsc.setUrl("jdbc:mysql://127.0.0.1:3306/test?useUnicode=true&characterEncoding=utf8");
//PostGre數(shù)據(jù)庫連接
/*dsc.setDriverName("org.postgresql.Driver");
dsc.setUsername("postgres");
dsc.setPassword("123456");
dsc.setUrl("jdbc:postgresql://127.0.0.1:5432/sjz_db?characterEncoding=utf8");*/
mpg.setDataSource(dsc);
// 策略配置
StrategyConfig strategy = new StrategyConfig();
//strategy.setCapitalMode(true);// 全局大寫命名 ORACLE 注意
//strategy.setTablePrefix("tb_");// 此處可以修改為您的表前綴
strategy.setNaming(NamingStrategy.underline_to_camel);// 表名生成策略
strategy.setColumnNaming(NamingStrategy.underline_to_camel);//采用駝峰映射
strategy.setEntityLombokModel(true);//【實(shí)體】是否為lombok模型(默認(rèn) false)
strategy.setInclude(new String[]{"node","zy"}); // 需要生成的表.如果需要生成所有的, 注釋掉此行就可以
// strategy.setExclude(new String[]{"test"}); // 排除生成的表
// 自定義實(shí)體父類
// strategy.setSuperEntityClass("com.baomidou.demo.TestEntity");
// 自定義實(shí)體,公共字段
// strategy.setSuperEntityColumns(new String[] { "test_id", "age" });
// 自定義 mapper 父類
// strategy.setSuperMapperClass("com.baomidou.demo.TestMapper");
// 自定義 service 父類
// strategy.setSuperServiceClass("com.baomidou.demo.TestService");
// 自定義 service 實(shí)現(xiàn)類父類
// strategy.setSuperServiceImplClass("com.baomidou.demo.TestServiceImpl");
// 自定義 controller 父類
// strategy.setSuperControllerClass("com.baomidou.demo.TestController");
// 【實(shí)體】是否生成字段常量(默認(rèn) false)
// public static final String ID = "test_id";
// strategy.setEntityColumnConstant(true);
// 【實(shí)體】是否為構(gòu)建者模型(默認(rèn) false)
// public User setName(String name) {this.name = name; return this;}
// strategy.setEntityBuilderModel(true);
mpg.setStrategy(strategy);
// 包配置
PackageConfig pc = new PackageConfig();
pc.setParent("com.johan.generator.manage.modules");// 自定義包路徑
pc.setController("controller");// 這里是控制器包名,默認(rèn) web
pc.setMapper("mapper");// 設(shè)置Mapper包名,默認(rèn)mapper
pc.setService("service");// 設(shè)置Service包名,默認(rèn)service
pc.setEntity("model.entity");// 設(shè)置Entity包名,默認(rèn)entity,繼承的父類 已序列化
pc.setXml("mapper.xml");// 設(shè)置Mapper XML包名,默認(rèn)mapper.xml
mpg.setPackageInfo(pc);
// 注入自定義配置,可以在 VM 中使用 cfg.abc 設(shè)置的值
InjectionConfig cfg = new InjectionConfig() {
@Override
public void initMap() {
Map<String, Object> map = new HashMap<String, Object>();
map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
this.setMap(map);
}
};
// 調(diào)整 xml 生成目錄演示
List<FileOutConfig> focList = new ArrayList<>();
focList.add(new FileOutConfig("/templates/mapper.xml.vm") {
@Override
public String outputFile(TableInfo tableInfo) {
return filePath + "\\resources\\mapper\\xml\\" + tableInfo.getEntityName() + "Mapper.xml";
}
});
cfg.setFileOutConfigList(focList);
mpg.setCfg(cfg);
// 注入自定義配置,可以在 VM 中使用 cfg.abc 【可無】
// InjectionConfig cfg = new InjectionConfig() {
// @Override
// public void initMap() {
// Map<String, Object> map = new HashMap<String, Object>();
// map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
// this.setMap(map);
// }
// };
//
// // 自定義 xxList.jsp 生成
// List<FileOutConfig> focList = new ArrayList<>();
// focList.add(new FileOutConfig("/template/list.jsp.vm") {
// @Override
// public String outputFile(TableInfo tableInfo) {
// // 自定義輸入文件名稱
// return "D://my_" + tableInfo.getEntityName() + ".jsp";
// }
// });
// cfg.setFileOutConfigList(focList);
// mpg.setCfg(cfg);
//
// // 調(diào)整 xml 生成目錄演示
// focList.add(new FileOutConfig("/templates/mapper.xml.vm") {
// @Override
// public String outputFile(TableInfo tableInfo) {
// return "/develop/code/xml/" + tableInfo.getEntityName() + ".xml";
// }
// });
// cfg.setFileOutConfigList(focList);
// mpg.setCfg(cfg);
//
// // 關(guān)閉默認(rèn) xml 生成,調(diào)整生成 至 根目錄
// TemplateConfig tc = new TemplateConfig();
// tc.setXml(null);
// mpg.setTemplate(tc);
// 自定義模板配置,可以 copy 源碼 mybatis-plus/src/main/resources/templates 下面內(nèi)容修改,
// 放置自己項(xiàng)目的 src/main/resources/templates 目錄下, 默認(rèn)名稱一下可以不配置,也可以自定義模板名稱
// TemplateConfig tc = new TemplateConfig();
// tc.setController("...");
// tc.setEntity("...");
// tc.setMapper("...");
// tc.setXml("...");
// tc.setService("...");
// tc.setServiceImpl("...");
// 如上任何一個(gè)模塊如果設(shè)置 空 OR Null 將不生成該模塊。
// mpg.setTemplate(tc);
// 執(zhí)行生成
mpg.execute();
}
}
五、測(cè)試
直接啟動(dòng)系統(tǒng)運(yùn)行,運(yùn)行結(jié)束后發(fā)現(xiàn)相關(guān)代碼已經(jīng)生成,如圖:

到此這篇關(guān)于Spring Boot整合MybatisPlus逆向工程(MySQL/PostgreSQL)的文章就介紹到這了,更多相關(guān)Spring Boot MybatisPlus逆向工程 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- SpringBoot如何使用MyBatisPlus逆向工程自動(dòng)生成代碼
- springboot3.0整合mybatis-flex實(shí)現(xiàn)逆向工程的示例代碼
- SpringBoot整合MybatisPlusGernerator實(shí)現(xiàn)逆向工程
- springboot整合mybatis-plus逆向工程的實(shí)現(xiàn)
- mybatis逆向工程與分頁在springboot中的應(yīng)用及遇到坑
- SpringBoot整合MyBatis逆向工程及 MyBatis通用Mapper實(shí)例詳解
- 淺析Spring和MyBatis整合及逆向工程
- spring和Mybatis逆向工程的實(shí)現(xiàn)
相關(guān)文章
java JDBC主要組件連接數(shù)據(jù)庫及執(zhí)行SQL過程示例全面詳解
這篇文章主要為大家介紹了java JDBC主要組件連接數(shù)據(jù)庫及執(zhí)行SQL的過程示例全面詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-06-06
JAVA技術(shù)實(shí)現(xiàn)上傳下載文件到FTP服務(wù)器(完整)
這篇文章主要介紹了JAVA技術(shù)實(shí)現(xiàn)上傳下載文件到FTP服務(wù)器(完整),本文使用 Apache Jakarta Commons Net(commons-net-3.3.jar) 基于FileZilla Server服務(wù)器實(shí)現(xiàn)FTP服務(wù)器上文件的上傳/下載/刪除等操作,需要的朋友可以參考下2015-07-07
Java?HashMap詳解及實(shí)現(xiàn)原理
Java?HashMap是Java集合框架中最常用的實(shí)現(xiàn)Map接口的數(shù)據(jù)結(jié)構(gòu),它使用哈希表實(shí)現(xiàn),允許null作為鍵和值,可以存儲(chǔ)不同類型的鍵值對(duì),在Java中,HashMap被廣泛應(yīng)用于各種場(chǎng)景,如緩存、數(shù)據(jù)庫連接池、路由器等,文中有詳細(xì)的代碼示例,需要的朋友可以參考下2023-05-05

