使用mybatis-plus逆向工程生成controller、service、mapper及XML文件,讓代碼更簡(jiǎn)潔

前言

spring-boot整合mybatis-plus逆向工程旨在簡(jiǎn)單便捷的幫助開發(fā)者一鍵生成那些來回重復(fù)的模塊代碼,提高開發(fā)效率。

工程代碼

1、創(chuàng)建一個(gè)maven工程
2、加入相關(guān)依賴

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <java.version>1.8</java.version>
        <mybatis-plus-boot-starter.version>3.0.2</mybatis-plus-boot-starter.version>
    </properties>


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <!-- web項(xiàng)目需要的jar包 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <!-- MP 核心庫 -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>${mybatis-plus-boot-starter.version}</version>
        </dependency>

        <!-- mysql驅(qū)動(dòng) -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.25</version>
        </dependency>

        <!-- lombok需要的jar包 -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
    </dependencies>

3、核心代碼


import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.core.toolkit.StringUtils;
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.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;

import java.util.ArrayList;
import java.util.List;

/**
 * @Author: LvFang
 * @Date: Created in 2019/6/11.
 * @Description:
 */
public class MyBatisPlusCodeGenerator {

    //包名
    public static final String PACKAGE_NAME = "com.lvfang.mybatisplus.test";

    public static void main(String[] args) {
        String[] tables = new String[] {"tableName01"};//表名數(shù)組
        String[] tablePrefixs = new String[] {"APP_"};
        executeCode(PACKAGE_NAME,tables,tablePrefixs);
    }

    private static void executeCode(String pack,String[] tables,String[] tablePrefixs) {
        // 代碼生成器
        AutoGenerator mpg = new AutoGenerator();

        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        // 是否覆蓋已有文件
        gc.setFileOverride(true);
        // 生成文件的輸出目錄
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/src/main/java");
        //設(shè)置bean命名規(guī)范
        gc.setEntityName("%sModel");
        // 開發(fā)人員
        gc.setAuthor("Lvfang");
        // 是否打開輸出目錄
        gc.setOpen(false);
        // 開啟 BaseResultMap
        gc.setBaseResultMap(true);
        // 指定生成的主鍵的ID類型
        gc.setIdType(IdType.ID_WORKER);
        // 時(shí)間類型對(duì)應(yīng)策略: 只使用 java.util.date 代替
        gc.setDateType(DateType.ONLY_DATE);
        mpg.setGlobalConfig(gc);

        // 數(shù)據(jù)源配置
        DataSourceConfig config= new DataSourceConfig();
        // 從試圖獲取
        config.setUrl("jdbc:mysql://localhost:3306/庫名");
        config.setDriverName("com.mysql.jdbc.Driver");
        config.setUsername("賬號(hào)");
        config.setPassword("密碼");
        mpg.setDataSource(config);

        // 包配置
        PackageConfig pc = new PackageConfig();
        // 父包名。如果為空,將下面子包名必須寫全部, 否則就只需寫子包名
        pc.setParent(pack);
        // Entity包名
        pc.setEntity("model");
        mpg.setPackageInfo(pc);

        // 自定義配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };
        List<FileOutConfig> focList = new ArrayList<>();
        focList.add(new FileOutConfig("/templates/mapper.xml.ftl") {
            public String outputFile(TableInfo tableInfo) {
                // 自定義輸入文件名稱
                if (StringUtils.isEmpty(pc.getModuleName())) {
                    return projectPath + "/src/main/resources/mapper/" + tableInfo.getXmlName() + StringPool.DOT_XML;
                }else {
                    return projectPath + "/src/main/resources/mapper/" + pc.getModuleName() + "/" + tableInfo.getXmlName() + StringPool.DOT_XML;
                }
            }
        });
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);
        mpg.setTemplate(new TemplateConfig().setXml(null));

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        // 數(shù)據(jù)庫表映射到實(shí)體的命名策略: 下劃線轉(zhuǎn)駝峰命名
        strategy.setNaming(NamingStrategy.underline_to_camel);
        // 數(shù)據(jù)庫表字段映射到實(shí)體的命名策略: 下劃線轉(zhuǎn)駝峰命名
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        // 【實(shí)體】是否為lombok模型(默認(rèn) false)
        strategy.setEntityLombokModel(true);
        // 需要包含的表名,允許正則表達(dá)式(與exclude二選一配置)
        strategy.setInclude(tables);
        // 駝峰轉(zhuǎn)連字符
        strategy.setControllerMappingHyphenStyle(true);
        // 表前綴
        strategy.setTablePrefix(tablePrefixs);
        mpg.setStrategy(strategy);
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        mpg.execute();
    }
}

執(zhí)行main方法即可;

執(zhí)行結(jié)果.png

over ! ! !

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容