MyBatis-Plus 代码自动生成器

一、引言

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

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

二、引入依赖



    com.baomidou
    mybatis-plus-generator
    3.1.1




    org.apache.velocity
    velocity-engine-core
    2.1




    org.slf4j
    slf4j-log4j12


    org.slf4j
    slf4j-api

三、具体实现

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(默认):


    org.apache.velocity
    velocity-engine-core
    2.1

Freemarker:


    org.freemarker
    freemarker
    2.3.29

Beetl:


    com.ibeetl
    beetl
    3.0.13.RELEASE

定义自定义配置私有方法,返回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 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();

    }

 

你可能感兴趣的:(Mybatis-Plus)