代碼自動生成器

這個是代碼自動生成器
MysqlGenerator.class

package com.kacen.simpleshop;

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.TableFill;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.*;

public class MysqlGenerator {

    private static final String PACKAGE_NAME = "com.kacen.simpleshop";
    private static final String OUT_PATH = "E:\\projectfortest\\simpleshop\\src\\main\\java";
    private static final String AUTHOR = "kacen";

    private static final String DRIVER = "com.mysql.cj.jdbc.Driver";
    private static final String URL = "jdbc:mysql://127.0.0.1:3306/自己的數(shù)據(jù)庫名字?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai";
    private static final String USER_NAME = "root";
    private static final String PASSWORD = "123456";


    /**
     * <p>
     * MySQL 生成演示
     * </p>
     */
    public static void main(String[] args) {
        // 自定義需要填充的字段
        List<TableFill> tableFillList = new ArrayList<TableFill>();

        // 代碼生成器
        AutoGenerator mpg = new AutoGenerator().setGlobalConfig(
                // 全局配置
                new GlobalConfig().setOutputDir(OUT_PATH)// 輸出目錄
                        .setFileOverride(true)// 是否覆蓋文件
                        .setActiveRecord(true)// 開啟 activeRecord 模式
                        .setEnableCache(false)// XML 二級緩存
                        .setBaseResultMap(false)// XML ResultMap
                        .setBaseColumnList(true)// XML columList
                        .setAuthor(AUTHOR)
                        // 自定義文件命名,注意 %s 會自動填充表實(shí)體屬性馋没!
                        .setXmlName("%sMapper").setMapperName("%sMapper")
                // .setServiceName("MP%sService")
                // .setServiceImplName("%sServiceDiy")
                // .setControllerName("%sAction")
        ).setTemplateEngine(new FreemarkerTemplateEngine()).setDataSource(
                // 數(shù)據(jù)源配置
                new DataSourceConfig().setDbType(DbType.MYSQL)// 數(shù)據(jù)庫類型
                        .setTypeConvert(new MySqlTypeConvert() {
                            // 自定義數(shù)據(jù)庫表字段類型轉(zhuǎn)換【可選】
                            //@Override
                            public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
                                System.out.println("轉(zhuǎn)換類型:" + fieldType);
                                // if ( fieldType.toLowerCase().contains( "tinyint" ) ) {
                                // return DbColumnType.BOOLEAN;
                                // }
                                return super.processTypeConvert(globalConfig, fieldType);
                            }
                        }).setDriverName(DRIVER).setUsername(USER_NAME).setPassword(PASSWORD).setUrl(URL))
                .setStrategy(
                        // 策略配置
                        new StrategyConfig()
                                // .setCapitalMode(true)// 全局大寫命名
                                // .setTablePrefix(new String[]{"unionpay_"})// 此處可以修改為您的表前綴
                                .setNaming(NamingStrategy.underline_to_camel)// 表名生成策略
                                // .setInclude(new String[] {"citycode_org"}) // 需要生成的表
                                // .setExclude(new String[]{"test"}) // 排除生成的表
                                // 自定義實(shí)體,公共字段
                                // .setSuperEntityColumns(new String[]{"test_id"})
                                .setTableFillList(tableFillList)
                                // 自定義實(shí)體父類
                                // .setSuperEntityClass("com.baomidou.demo.common.base.BsBaseEntity")
                                // // 自定義 mapper 父類
                                // .setSuperMapperClass("com.baomidou.demo.common.base.BsBaseMapper")
                                // // 自定義 service 父類
                                // .setSuperServiceClass("com.baomidou.demo.common.base.BsBaseService")
                                // // 自定義 service 實(shí)現(xiàn)類父類
                                // .setSuperServiceImplClass("com.baomidou.demo.common.base.BsBaseServiceImpl")
                                // 自定義 controller 父類
                                // .setSuperControllerClass("com.baomidou.demo.TestController")
                                // 【實(shí)體】是否生成字段常量(默認(rèn) false)
                                // public static final String ID = "test_id";
                                .setEntityColumnConstant(true)
                                // 【實(shí)體】是否為構(gòu)建者模型(默認(rèn) false)
                                // public User setName(String name) {this.name = name; return this;}
                                .setEntityBuilderModel(true)
                                // 【實(shí)體】是否為lombok模型(默認(rèn) false)<a >document</a>
                                .setEntityLombokModel(true)
                        // Boolean類型字段是否移除is前綴處理
                        // .setEntityBooleanColumnRemoveIsPrefix(true)
                        // .setRestControllerStyle(true)
                        // .setControllerMappingHyphenStyle(true)
                ).setPackageInfo(
                        // 包配置 new PackageConfig().setModuleName(MODULE_NAME).setParent(PACKAGE_NAME)
                        new PackageConfig().setParent(PACKAGE_NAME)// 自定義包路徑
                                .setController("controller")// 這里是控制器包名勾怒,默認(rèn) web
                                .setXml("mapper").setMapper("mapper")

                ).setCfg(
                        // 注入自定義配置笔链,可以在 VM 中使用 cfg.abc 設(shè)置的值
                        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);
                            }
                        }.setFileOutConfigList(
                                Collections.<FileOutConfig>singletonList(new FileOutConfig("/templates/mapper.xml.ftl") {
                                    // 自定義輸出文件目錄
                                    @Override
                                    public String outputFile(TableInfo tableInfo) {
                                            return OUT_PATH + "/xml/" + tableInfo.getEntityName() + "Mapper.xml";
                                    }
                                })))
                .setTemplate(
                        // 關(guān)閉默認(rèn) xml 生成,調(diào)整生成 至 根目錄
                        new TemplateConfig().setXml(null)
                        // 自定義模板配置卡乾,模板可以參考源碼 /mybatis-plus/src/main/resources/template 使用 copy
                        // 至您項(xiàng)目 src/main/resources/template 目錄下,模板名稱也可自定義如下配置:
                        // .setController("...");
                        // .setEntity("...");
                        // .setMapper("...");
                        // .setXml("...");
                        // .setService("...");
                        // .setServiceImpl("...");
                );

        // 執(zhí)行生成
        mpg.execute();
    }

}

為什么特地分開來寫呢幔妨,因?yàn)檎冞@里有的人使用
1.freemarker引擎
2.用velocity引擎
這兩者之間用法稍有不同鹦赎,如果遇到報(bào)錯請自行檢查一下古话。

不同處在于

1.使用freeMarker的小伙伴,記得再set的使用加上這一行锁施,不然默認(rèn)是使用velocity引擎的

setTemplateEngine(new FreemarkerTemplateEngine())

2./templates/mapper.xml.ftl和/templates/mapper.xml.vm

1.freemarker
setFileOutConfigList(
         Collections.<FileOutConfig>singletonList(new FileOutConfig("/templates/mapper.xml.ftl") {
                                    // 自定義輸出文件目錄
                                    @Override
                                    public String outputFile(TableInfo tableInfo) {
                                            return OUT_PATH + "/xml/" + tableInfo.getEntityName() + "Mapper.xml";
                                    }
                                })))

2.velocity
setFileOutConfigList(
         Collections.<FileOutConfig>singletonList(new FileOutConfig("/templates/mapper.xml.vm") {
                                    // 自定義輸出文件目錄
                                    @Override
                                    public String outputFile(TableInfo tableInfo) {
                                            return OUT_PATH + "/xml/" + tableInfo.getEntityName() + "Mapper.xml";
                                    }
                                })))
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
禁止轉(zhuǎn)載悉抵,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。
  • 序言:七十年代末姥饰,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子列粪,更是在濱河造成了極大的恐慌审磁,老刑警劉巖岂座,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異费什,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)吕喘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門刑桑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人祠斧,你說我怎么就攤上這事闻察≡” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵钉嘹,是天一觀的道長。 經(jīng)常有香客問我鲸阻,道長缨睡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任奖年,我火速辦了婚禮,結(jié)果婚禮上陋守,老公的妹妹穿的比我還像新娘。我一直安慰自己利赋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布之碗。 她就那樣靜靜地躺著霞赫,像睡著了一般湃鹊。 火紅的嫁衣襯著肌膚如雪水醋。 梳的紋絲不亂的頭發(fā)上林艘,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天灰伟,我揣著相機(jī)與錄音峰尝,去河邊找鬼偏窝。 笑死武学,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的火窒。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼熏矿,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了票编?” 一聲冷哼從身側(cè)響起褪储,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤鲤竹,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后昔榴,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瑟啃,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡揩尸,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了岩榆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡勇边,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出粒褒,到底是詐尸還是另有隱情识颊,我是刑警寧澤奕坟,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布,位于F島的核電站月杉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏苛萎。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一腌歉、第九天 我趴在偏房一處隱蔽的房頂上張望蛙酪。 院中可真熱鬧翘盖,春花似錦、人聲如沸最仑。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽卿啡。三九已至,卻和暖如春颈娜,著一層夾襖步出監(jiān)牢的瞬間剑逃,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工蛹磺, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人萤捆。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像俗或,于是被迫代替她去往敵國和親市怎。 傳聞我的和親對象是個殘疾皇子辛慰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評論 2 345