MyBatis-Plus 代码自动生成器

x33g5p2x  于2021-12-19 转载在 其他  
字(5.7k)|赞(0)|评价(0)|浏览(268)

一、引言

在实际开发过程中,也难免需要生成一些基本的代码,也能大大的提高开发效率。

那么那么那么小编也写了一个基本的代码生成器,包括实体、持久层、Service、Controller、xml

二、引入依赖

<!--mybatis plus代码生成器-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.1.1</version>
</dependency>

<!--apache velocity 模板-->
<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.1</version>
</dependency>

<!--slf4j 日志-->
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-log4j12</artifactId>
</dependency>
<dependency>
    <groupId>org.slf4j</groupId>
    <artifactId>slf4j-api</artifactId>
</dependency>

三、具体实现

package com.example.demo.generator;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

/**
 * @Auther: IT贱男
 * @Date: 2019/6/14 14:29
 * @Description: Mybatis Plus 代码生成器
 */
public class MybatisPlusGenerator {

    public static void main(String[] args) {

        // 全局配置
        GlobalConfig globalConfig = globalConfig();

        // 数据源配置
        DataSourceConfig dataSourceConfig = dataSourceConfig();

        // 策略配置
        StrategyConfig strategyConfig = strategyConfig();

        // 包名策略配置
        PackageConfig packageConfig = packageConfig();

        // 整合配置
        AutoGenerator autoGenerator = new AutoGenerator();
        autoGenerator.setGlobalConfig(globalConfig);
        autoGenerator.setDataSource(dataSourceConfig);
        autoGenerator.setStrategy(strategyConfig);
        autoGenerator.setPackageInfo(packageConfig);

        autoGenerator.execute();

    }

    /**
     * 全局配置
     *
     * @return
     */
    private static GlobalConfig globalConfig() {
        GlobalConfig config = new GlobalConfig();
        config.setActiveRecord(false) // 是否开启AR模式
                .setAuthor("IT贱男") // 作者
                .setOutputDir("/Volumes/Cute/Taify/学习/项目/mybatis-plus/frist/src/main/java") //生成路径
                .setFileOverride(true) //文件是否覆盖
                .setIdType(IdType.AUTO) // 主键策略
                .setServiceName("%sService") //默认情况下生成的Service接口的名字首字母都带有I
                .setBaseResultMap(true) // 是否生成基本的sql中的ResultMap
                .setBaseColumnList(true); // 是否生成基本的sql列
        return config;
    }

    /**
     * 数据源配置
     *
     * @return
     */
    private static DataSourceConfig dataSourceConfig() {
        DataSourceConfig dsconfig = new DataSourceConfig();
        // 设置数据库类型
        dsconfig.setDbType(DbType.MYSQL);
        dsconfig.setDriverName("com.mysql.jdbc.Driver");
        dsconfig.setUrl("jdbc:mysql://127.0.0.1:3306/mdp?userSSL=false");
        dsconfig.setUsername("root");
        dsconfig.setPassword("123456");
        return dsconfig;
    }

    /**
     * 策略配置
     * @return
     */
    private static StrategyConfig strategyConfig() {
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setCapitalMode(true); // 是否大写命名
        strategyConfig.setTablePrefix("sys_"); // 表前缀
        strategyConfig.setNaming(NamingStrategy.underline_to_camel); // 从数据库表到文件的命名策略
        strategyConfig.setInclude("sys_user"); // 对应数据库所需要生成的表名
        return strategyConfig;
    }

    /**
     * 包名策略配置
     * @return
     */
   private static PackageConfig packageConfig() {
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("com.example.demo"); // 所需要生成的包下
        packageConfig.setEntity("model"); // 设置实体生成包名
        packageConfig.setController("controller"); // 设置控制层包名,以下以此类推
        packageConfig.setService("service");
        packageConfig.setMapper("mapper");
        packageConfig.setXml("mapper");
        return packageConfig;
   }
}

三、自定义配置

由于有小伙伴提问怎么把xml文件生成到resources文件夹下,实现步骤如下:

引入模板pom文件,默认是Velocity,也可以更换Freemarker、Beetl,三个选其中一个就行了。

Velocity(默认):

<dependency>
    <groupId>org.apache.velocity</groupId>
    <artifactId>velocity-engine-core</artifactId>
    <version>2.1</version>
</dependency>

Freemarker:

<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
    <version>2.3.29</version>
</dependency>

Beetl:

<dependency>
    <groupId>com.ibeetl</groupId>
    <artifactId>beetl</artifactId>
    <version>3.0.13.RELEASE</version>
</dependency>

定义自定义配置私有方法,返回InjectionConfig对象,这个模板内容根据自己需求来编写,小编这里就不提供了。

/**
     * 自定义配置文件输出
     * @return
     */
   private static InjectionConfig customConfig(){
       // 自定义配置
       InjectionConfig cfg = new InjectionConfig() {
           @Override
           public void initMap() {
               // to do nothing
           }
       };

       // 如果模板引擎是 freemarker
       String templatePath = "/templates/mapper.xml.ftl";
       // 如果模板引擎是 velocity
       // String templatePath = "/templates/mapper.xml.vm";
       
       // 自定义输出配置
       List<FileOutConfig> focList = new ArrayList<>();
       // 自定义配置会被优先输出
       String projectPath = System.getProperty("user.dir");

       focList.add(new FileOutConfig(templatePath) {
           @Override
           public String outputFile(TableInfo tableInfo) {
               // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
               return projectPath+"/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
           }
       });

       cfg.setFileOutConfigList(focList);
       return cfg;
   }

最后还需要整合到GlobalConfig对象中去,这样就可以实现把自定义的xml生成到resources目录下了。

public static void main(String[] args) {

        // 全局配置
        GlobalConfig globalConfig = globalConfig();

        // 数据源配置
        DataSourceConfig dataSourceConfig = dataSourceConfig();

        // 策略配置
        StrategyConfig strategyConfig = strategyConfig();

        // 包名策略配置
        PackageConfig packageConfig = packageConfig();

        // 自定义配置文件输出
        InjectionConfig injectionConfig = customConfig();

        // 整合配置
        AutoGenerator autoGenerator = new AutoGenerator();
        autoGenerator.setGlobalConfig(globalConfig);
        autoGenerator.setDataSource(dataSourceConfig);
        autoGenerator.setStrategy(strategyConfig);
        autoGenerator.setPackageInfo(packageConfig);
        autoGenerator.setCfg(injectionConfig);
        autoGenerator.execute();

    }

相关文章