mybatis plus 代码生成器

本文介绍如何使用MyBatis Plus代码生成器自动生成控制器、服务、数据访问对象和映射器,减少手工创建文件的工作量。通过具体配置示例,包括依赖项、数据源、策略和全局配置等,展示如何针对Oracle数据库生成符合命名规范的Java代码。

1.功能

替你生成 controller , service ,dao ,mapper, 基本上不要自己创建文件了

2.依赖

  1. mybatis-plus-generator
<!-- https://mvnrepository.com/artifact/com.baomidou/mybatis-plus-generator -->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.3.0</version>
</dependency>

  1. velocity
<!-- https://mvnrepository.com/artifact/org.apache.velocity/velocity-engine-core -->
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.1</version>
</dependency>

3.代码生成器

需要根据自己的数据进行配置
我使用的是oracle

package com.atoz.mpm.project.Utils;


import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;


/**
 *  1. 注意: 数据库里为Number类型的字段
 *   1~4    --short类型
 *   5~9    --Integer类型
 *   10~18  --Long类型
 *   18+    --BigDecimal类型
 *   所以建表时需要指定Number字段的长度
 *
 *  2. 注意
 *   实体类主键需要手写
 *   如
 *   @TableId(type= IdType.ASSIGN_UUID)
 *
 *  3. 注意
 *    TBL_USER  生成 User对象
 *    需要去除表名的前缀
 *    setTablePrefix("TBL", "SYS","MPM")
 *
 *
 * @author baojian.yuan
 * @date 2020/1/13
 * @time 17:52
 */
public class Generator {

    public static void main(String[] args) {
        Generator g = new Generator();
        boolean startWithI = false;
        // 1.模块名
        String projectName = "mpmsystem-project";
        // 2.代码位置
        String packageName = "com.atoz.mpm.project";
        // 3.表名
        String[] tableNameArray={"MPM_COMM_PROJECT", "TBL_FEATURE"} ;
        g.generateByTables(startWithI,projectName,packageName, tableNameArray);
    }
    /**
     * 根据表自动生成
     *
     * @param serviceNameStartWithI 默认为false
     * @param packageName           包名
     * @param tableNames            表名
     */
    private void generateByTables(boolean serviceNameStartWithI,String projectName, String packageName, String... tableNames) {
        // 1.配置数据源
        DataSourceConfig dataSourceConfig = getDataSourceConfig();
        // 2.策略配置
        StrategyConfig strategyConfig = getStrategyConfig(tableNames);
        // 3.全局变量配置
        GlobalConfig globalConfig = getGlobalConfig(serviceNameStartWithI,projectName);
        // 4.包名配置
        PackageConfig packageConfig = getPackageConfig(packageName);
        // 5.自动生成
        atuoGenerator(dataSourceConfig, strategyConfig, globalConfig, packageConfig);
    }

    /**
     * 集成
     *
     * @param dataSourceConfig 配置数据源
     * @param strategyConfig   策略配置
     * @param config           全局变量配置
     * @param packageConfig    包名配置
     */
    private void atuoGenerator(DataSourceConfig dataSourceConfig, StrategyConfig strategyConfig, GlobalConfig config, PackageConfig packageConfig) {
        new AutoGenerator()
                .setGlobalConfig(config)
                .setDataSource(dataSourceConfig)
                .setStrategy(strategyConfig)
                .setPackageInfo(packageConfig)
                .setTemplateEngine(new VelocityTemplateEngine())
                .execute();
    }

    /**
     * 设置包名
     *
     * @param packageName 父路径包名
     * @return PackageConfig 包名配置
     */
    private PackageConfig getPackageConfig(String packageName) {
        return new PackageConfig()
                .setParent(packageName)
                .setXml("mapping")
                .setMapper("dao")
                .setController("controller")
                .setService("service")
                .setEntity("model");
    }

    /**
     * 全局配置
     *
     * @param serviceNameStartWithI false
     * @return GlobalConfig
     */
    private GlobalConfig getGlobalConfig(boolean serviceNameStartWithI,String projectName) {
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig
                .setBaseColumnList(true)
                .setBaseResultMap(true)
                .setActiveRecord(false)
                .setAuthor("ybj")
                // 设置输出路径
                .setOutputDir(System.getProperty("user.dir")+ "/" +projectName +"/src/main/java/")
                // 是否覆盖文件
                .setFileOverride(true);
        if (!serviceNameStartWithI) {
            //设置service名
            globalConfig.setServiceName("%sService");
        }
        return globalConfig;
    }

    /**
     * 策略配置
     *
     * @param tableNames 表名
     * @return StrategyConfig
     */
    private StrategyConfig getStrategyConfig(String... tableNames) {
        return new StrategyConfig()
                // 全局大写命名 ORACLE 注意
                .setCapitalMode(true)
                .setEntityLombokModel(true)
                .setRestControllerStyle(true)
                //从数据库表到文件的命名策略
                .setNaming(NamingStrategy.underline_to_camel)
                .setColumnNaming(NamingStrategy.underline_to_camel)
                //需要生成的的表名,多个表名传数组
                .setInclude(tableNames)
                .setTablePrefix("TBL", "SYS","MPM");
    }

    /**
     * 配置数据源
     *
     * @return 数据源配置 DataSourceConfig
     */
    private DataSourceConfig getDataSourceConfig() {
        return new DataSourceConfig().setDbType(DbType.ORACLE)
                .setUrl("jdbc:oracle:thin:@192.168.6.193:1521:cappdb")
                .setUsername("c##devuser")
                .setPassword("devuser")
                .setDriverName("oracle.jdbc.driver.OracleDriver");
    }

}
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值