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+'mybatisPlusGersrcmain';String filePath = canonicalPath + 'srcmain';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)是falsegc.setActiveRecord(true);// 不需要ActiveRecord特性的請(qǐng)改為falsegc.setEnableCache(false);// XML 二級(jí)緩存gc.setBaseResultMap(true);// XML ResultMapgc.setBaseColumnList(false);// XML columListgc.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ò),這里改為DateString 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) webpc.setMapper('mapper');// 設(shè)置Mapper包名,默認(rèn)mapperpc.setService('service');// 設(shè)置Service包名,默認(rèn)servicepc.setEntity('model.entity');// 設(shè)置Entity包名,默認(rèn)entity,繼承的父類 已序列化pc.setXml('mapper.xml');// 設(shè)置Mapper XML包名,默認(rèn)mapper.xmlmpg.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 + 'resourcesmapperxml' + 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)搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!
相關(guān)文章:
1. Django視圖類型總結(jié)2. Xml簡(jiǎn)介_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理3. 使用Docker的NFS-Ganesha鏡像搭建nfs服務(wù)器的詳細(xì)過程4. Intellij IDEA 關(guān)閉和開啟自動(dòng)更新的提示?5. Ajax引擎 ajax請(qǐng)求步驟詳細(xì)代碼6. 解析原生JS getComputedStyle7. idea重置默認(rèn)配置的方法步驟8. IntelliJ IDEA Java項(xiàng)目手動(dòng)添加依賴 jar 包的方法(圖解)9. Django使用HTTP協(xié)議向服務(wù)器傳參方式小結(jié)10. Spring @Profile注解實(shí)現(xiàn)多環(huán)境配置
