您好,登錄后才能下訂單哦!
這篇文章將為大家詳細講解有關Spring Boot中怎么利用MybatisPlus實現逆向工程,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。
我們先創建數據庫表: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 '請求方法', `params` varchar(5000) DEFAULT NULL COMMENT '請求參數', `time` bigint(20) NOT NULL COMMENT '執行時長(毫秒)', `ip` varchar(64) DEFAULT NULL COMMENT 'IP地址', `create_date` datetime DEFAULT NULL COMMENT '創建時間', 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 '工號', `name` varchar(100) NOT NULL COMMENT '姓名', `email` varchar(200) DEFAULT NULL COMMENT '郵箱', `phone` varchar(200) DEFAULT NULL COMMENT '電話', `mobile` varchar(200) DEFAULT NULL COMMENT '手機', `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 '最后登陸時間', `login_flag` varchar(64) DEFAULT NULL COMMENT '是否可登錄', `create_by` varchar(64) NOT NULL COMMENT '創建者', `create_time` datetime NOT NULL COMMENT '創建時間', `update_by` varchar(64) NOT NULL COMMENT '更新者', `update_date` datetime NOT NULL COMMENT '更新時間', `remarks` varchar(255) DEFAULT NULL COMMENT '備注信息', `del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '刪除標記', `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='用戶表';
創建Spring Boot項目,網上很多教程,這里不再贅述。
MyBatis-Plus本來是集成了代碼生成器的,但是在3.0.3以后的版本移除了對應的依賴,需要我們手動添加相關的依賴:
<!--就不需要手動引入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> <!--就不需要手動引入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數據庫--> <dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> </dependency> </dependencies> </project>
代碼里面的注釋已經很全面,就不再進行代碼的詳細解析了,如下:
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> */ //獲取 項目絕對路徑 private static String canonicalPath = ""; public static void main(String[] args) { //獲取項目路徑 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 引擎,默認 Veloctiy //mpg.setTemplateEngine(new FreemarkerTemplateEngine()); // 全局配置 GlobalConfig gc = new GlobalConfig(); gc.setAuthor("Johan");//作者名 gc.setSwagger2(true); //實體屬性 Swagger2 注解 gc.setOutputDir(filePath + "java");//代碼生成路徑 gc.setFileOverride(true);// 是否覆蓋同名文件,默認是false gc.setActiveRecord(true);// 不需要ActiveRecord特性的請改為false gc.setEnableCache(false);// XML 二級緩存 gc.setBaseResultMap(true);// XML ResultMap gc.setBaseColumnList(false);// XML columList gc.setOpen(false);//生成后打開文件夾 /* 自定義文件命名,注意 %s 會自動填充表實體屬性! */ gc.setControllerName("%sController"); gc.setServiceName("%sService"); gc.setServiceImplName("%sServiceImpl"); gc.setMapperName("%sMapper"); gc.setXmlName("%sMapper"); mpg.setGlobalConfig(gc); // 數據源配置 DataSourceConfig dsc = new DataSourceConfig(); //指定數據庫類型,DbType中有對應的枚舉類型,pom文件中要添加對應的數據庫引用 dsc.setDbType(DbType.MYSQL);//MySQL數據庫 // dsc.setDbType(DbType.POSTGRE_SQL);//PostGre數據庫 dsc.setTypeConvert(new MySqlTypeConvert() { // 自定義數據庫表字段類型轉換【可選】 @Override public IColumnType processTypeConvert(GlobalConfig gc, String fieldType) { System.out.println("轉換類型:" + fieldType); // 注意!!processTypeConvert 存在默認類型轉換,如果不是你要的效果請自定義返回、非如下直接返回。 //默認會把日期類型 轉為LocalDateTime ,在查詢的時候會報錯,這里改為Date String t = fieldType.toLowerCase(); if (t.contains("date") || t.contains("time") || t.contains("year")) { return DbColumnType.DATE; } else { return super.processTypeConvert(gc, fieldType); } } }); //數據庫連接配置 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數據庫連接 /*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);//【實體】是否為lombok模型(默認 false) strategy.setInclude(new String[]{"node","zy"}); // 需要生成的表.如果需要生成所有的, 注釋掉此行就可以 // strategy.setExclude(new String[]{"test"}); // 排除生成的表 // 自定義實體父類 // strategy.setSuperEntityClass("com.baomidou.demo.TestEntity"); // 自定義實體,公共字段 // strategy.setSuperEntityColumns(new String[] { "test_id", "age" }); // 自定義 mapper 父類 // strategy.setSuperMapperClass("com.baomidou.demo.TestMapper"); // 自定義 service 父類 // strategy.setSuperServiceClass("com.baomidou.demo.TestService"); // 自定義 service 實現類父類 // strategy.setSuperServiceImplClass("com.baomidou.demo.TestServiceImpl"); // 自定義 controller 父類 // strategy.setSuperControllerClass("com.baomidou.demo.TestController"); // 【實體】是否生成字段常量(默認 false) // public static final String ID = "test_id"; // strategy.setEntityColumnConstant(true); // 【實體】是否為構建者模型(默認 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");// 這里是控制器包名,默認 web pc.setMapper("mapper");// 設置Mapper包名,默認mapper pc.setService("service");// 設置Service包名,默認service pc.setEntity("model.entity");// 設置Entity包名,默認entity,繼承的父類 已序列化 pc.setXml("mapper.xml");// 設置Mapper XML包名,默認mapper.xml mpg.setPackageInfo(pc); // 注入自定義配置,可以在 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); } }; // 調整 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); // // // 調整 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); // // // 關閉默認 xml 生成,調整生成 至 根目錄 // TemplateConfig tc = new TemplateConfig(); // tc.setXml(null); // mpg.setTemplate(tc); // 自定義模板配置,可以 copy 源碼 mybatis-plus/src/main/resources/templates 下面內容修改, // 放置自己項目的 src/main/resources/templates 目錄下, 默認名稱一下可以不配置,也可以自定義模板名稱 // TemplateConfig tc = new TemplateConfig(); // tc.setController("..."); // tc.setEntity("..."); // tc.setMapper("..."); // tc.setXml("..."); // tc.setService("..."); // tc.setServiceImpl("..."); // 如上任何一個模塊如果設置 空 OR Null 將不生成該模塊。 // mpg.setTemplate(tc); // 執行生成 mpg.execute(); } }
直接啟動系統運行,運行結束后發現相關代碼已經生成,如圖:
關于Spring Boot中怎么利用MybatisPlus實現逆向工程就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。