mybatisplus代码生成器_想做时间管理大师?你可以试试Mybatis Plus代码生成器
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                mybatisplus代码生成器_想做时间管理大师?你可以试试Mybatis Plus代码生成器
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.                        
                                1. 前言
對于寫Crud的老司機來說時間非常寶貴,一些樣板代碼寫不但費時費力,而且枯燥無味。經常有小伙伴問我,胖哥你怎么天天那么有時間去搞新東西,透露一下秘訣唄。
好吧,今天就把Mybatis-plus的代碼生成器分享出來,讓你也成為一個優秀的時間管理大師。
2. 基本依賴
以Spring Boot和MySQL為例,你需要下面這些依賴:
<!-- lombok 如果不使用 需要修改代碼生成器的相關配置 --> <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><scope>compile</scope> </dependency> <!-- 連接池 你可以使用其它替換掉 --> <dependency><groupId>com.zaxxer</groupId><artifactId>HikariCP</artifactId> </dependency> <!-- mysql --> <dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId> </dependency> <!-- mybatis plus starter --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId> </dependency> <!-- mybatis plus 生成器模塊 --> <dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-generator</artifactId><scope>compile</scope><optional>true</optional> </dependency> <!-- 引入freemarker包 作為代碼生成器引擎 --> <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-freemarker</artifactId><scope>compile</scope><optional>true</optional> </dependency>然后配置好你的數據庫,確保數據庫連接通訊暢通。
3. 定制代碼生成器
這里我期望生成的目錄結構是這樣的:
于是我花了點時間定制了一些生成器的配置,代碼如下,就是這么硬核!
package cn.felord.mybatis.util;import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.IdType; 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.TableInfo; 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.Optional;/*** 代碼生成器配置** @author felord* @since 10 :39 2018/9/9*/ public class CodeGenerator {private String dbUrl;private String userName;private String password;private String dir;private String xmlDir;private String packageName;private CodeGenerator() {}/*** The type Config builder.*/public static class ConfigBuilder {private String dbUrl;private String userName;private String password;private String dir;private String xmlDir;private String packageName;/*** Db url config builder.** @param dbUrl the db url* @return the config builder*/public ConfigBuilder dbUrl(final String dbUrl) {this.dbUrl = dbUrl;return this;}/*** User name config builder.** @param userName the user name* @return the config builder*/public ConfigBuilder userName(final String userName) {this.userName = userName;return this;}/*** Password config builder.** @param password the password* @return the config builder*/public ConfigBuilder password(final String password) {this.password = password;return this;}/*** Dir config builder.** @param dir the dir* @return the config builder*/public ConfigBuilder dir(final String dir) {this.dir = dir;return this;}/*** Dir config builder.** @param xmlDir the dir* @return the config builder*/public ConfigBuilder xmlDir(final String xmlDir) {this.xmlDir = xmlDir;return this;}/*** Package name config builder.** @param packageName the package name* @return the config builder*/public ConfigBuilder packageName(final String packageName) {this.packageName = packageName;return this;}/*** Build code generator.** @return the code generator*/public CodeGenerator build() {CodeGenerator generator = new CodeGenerator();generator.dbUrl = Optional.of(this.dbUrl).get();generator.userName = Optional.of(this.userName).get();generator.password = Optional.of(this.password).get();generator.dir = Optional.of(this.dir).get();generator.xmlDir = Optional.of(this.xmlDir).get();generator.packageName = Optional.of(this.packageName).get();return generator;}}/*** Code.** @param tableNames the table names*/public void code(String... tableNames) {codingMysql(true, false, true, this.dbUrl, this.userName, this.password, this.dir, this.xmlDir, this.packageName, tableNames);}/**** 生成器核心部分** @param serviceNameStartWithI 是否前綴I* @param createController 是否生成controller* @param useLombok 是否使用 lombok* @param dbUrl 數據庫連接* @param username 用戶名稱* @param password 密碼* @param outDir 輸出目錄* @param xmlDir xml 文件目錄* @param packageName 包路徑* @param tableNames 表名稱*/private static void codingMysql(boolean serviceNameStartWithI,boolean createController,boolean useLombok,String dbUrl,String username,String password,String outDir,String xmlDir,String packageName,String... tableNames) {GlobalConfig config = new GlobalConfig();DataSourceConfig dataSourceConfig = new DataSourceConfig(); // 數據庫類型 這里使用 mysqldataSourceConfig.setDbType(DbType.MYSQL).setUrl(dbUrl).setUsername(username).setPassword(password) // 驅動名稱 這里使用mysql.setDriverName("com.mysql.jdbc.Driver");// 自定義xml輸出路徑InjectionConfig cfg = new InjectionConfig() {@Overridepublic void initMap() {// to do nothing}};List<FileOutConfig> focList = new ArrayList<>(); // 你也可以定制 xml 的模板focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {@Overridepublic String outputFile(TableInfo tableInfo) {// 自定義xml文件的路徑return xmlDir + "/mapper/" + tableInfo.getMapperName() + StringPool.DOT_XML;}});cfg.setFileOutConfigList(focList);// 策略配置項StrategyConfig strategyConfig = new StrategyConfig();strategyConfig.setCapitalMode(false) // 是否使用 lombok.setEntityLombokModel(useLombok) // 下劃線轉駝峰.setNaming(NamingStrategy.underline_to_camel)//修改替換成你需要的表名,多個表名傳數組.setInclude(tableNames); // 使用 AR 模式config.setActiveRecord(true) // 設置頭注釋的 author.setAuthor("system") // 項目輸出路徑.setOutputDir(outDir) // 是否覆蓋已經生成的同名文件.setFileOverride(true) // 雪花算法生成id.setIdType(IdType.ASSIGN_ID) // 是否使用緩存.setEnableCache(false) // 是否生成 xml 中的 基礎 resultMap.setBaseResultMap(true);if (!serviceNameStartWithI) { // Service 層的 通用格式后綴config.setServiceName("%sService");} // 實體類包名PackageConfig packageConfig = new PackageConfig().setParent(packageName).setEntity("entity");TemplateConfig templateConfig = new TemplateConfig().setXml(null); // 這里選擇不生成 controller 實際上 生成的大多不符合我們需要 到服務層就行了if (!createController) {templateConfig.setController(null);} // 整合起來運行new AutoGenerator().setGlobalConfig(config).setTemplateEngine(new FreemarkerTemplateEngine()).setDataSource(dataSourceConfig).setStrategy(strategyConfig).setPackageInfo(packageConfig).setCfg(cfg).setTemplate(templateConfig).execute();}}如果我生成的目錄結構能夠滿足你的需要,那就巧了,直接拿去用;如果不滿足需要,你可以按照注釋的說明進行微調。18年搞的用了好幾年,沒出過什么亂子。
4. 代碼生成器的使用
使用起來非常簡單,確保數據庫能夠使用JDBC連接成功,寫個main方法,配置一下,跑起來就是了:
/*** @author felord.cn* @since 11:34**/ public class AutoCoding {public static void main(String[] args) {// maven 工程 main 包的全路徑final String mainDir = "C:IdeaProjectsbc-recylingsrcmain";CodeGenerator.ConfigBuilder builder = new CodeGenerator.ConfigBuilder();CodeGenerator codeGenerator = builder // 數據庫連接.dbUrl("jdbc:mysql://localhost:3306/test") // 賬戶.userName("root") // 密碼.password("123456")// 生成類位置.dir(mainDir + "java")// 生成xml 位置.xmlDir(mainDir + "resources")// 包引用路徑.packageName("cn.felord.mybatis").build();//根據表生成后臺代碼codeGenerator.code("user_info");} }然后代碼就生成了,是不是非常的好用?恭喜你獲得了 時間管理大師 榮譽稱號。
切記不要炫耀,否則需求加倍。
5. 總結
雖然好用,但是建議新手不要使用,多手寫一下代碼。另外復雜的SQL還是建議自己寫,多鍛煉寫SQL的能力。如果你在使用中有什么問題,可以私信我進行溝通。
關注微信公眾號:Felordcn 獲取更多干貨
總結
以上是生活随笔為你收集整理的mybatisplus代码生成器_想做时间管理大师?你可以试试Mybatis Plus代码生成器的全部內容,希望文章能夠幫你解決所遇到的問題。
                            
                        - 上一篇: dnf卡片怎么合成
 - 下一篇: 保卫萝卜挑战关34之全清金萝卜攻略