MyBatis-Plus 代码生成器

                                      MyBatis-Plus Generator

        采用代码或者 Maven 插件可快速生成 Mapper 、 Model 、 Service 、 Controller 层代码,支持模板引擎,更有超多自定义配置等您来使用(P.S. 比 Mybatis 官方的 Generator 更加强大!) 

一、添加依赖

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

    <!-- 模板引擎,需要指定 mpg.setTemplateEngine(new FreemarkerTemplateEngine()); -->
    <dependency>
      <groupId>org.freemarker</groupId>
      <artifactId>freemarker</artifactId>
      <version>2.3.23</version>
    </dependency>

    <!-- MP 核心库 -->
    <dependency>
      <groupId>com.baomidou</groupId>
      <artifactId>mybatis-plus</artifactId>
      <version>2.3</version>
    </dependency>

二、脚本初始化

    1)创建数据库(mybatis-plus)。

    2)导入数据。

-- ----------------------------
--  Table structure for `sys_user`
-- ----------------------------
DROP TABLE IF EXISTS `sys_user`;
CREATE TABLE `sys_user` (
  `id` bigint(20) NOT NULL COMMENT '用户ID',
  `name` varchar(50) DEFAULT NULL COMMENT '用户名',
  `age` int(3) DEFAULT NULL COMMENT '用户年龄',
  `type` int(1) DEFAULT '0' COMMENT '0、禁用 1、正常, 如果使用tinyint(1),mysql连接没加tinyInt1isBit=false,默认mysql驱动会把值转成boolean',
  `ctime` datetime DEFAULT NULL COMMENT '自定义填充的创建时间',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='系统用户表';

-- ----------------------------
--  Records of `sys_user`
-- ----------------------------
BEGIN;
INSERT INTO `sys_user`(id,name,age,ctime,type) VALUES ('784972358981328902', 'Tom', '24', '2017-06-25 20:53:33', '1');
INSERT INTO `sys_user`(id,name,age,ctime,type) VALUES ('784972358981328903', 'Jammy', '21', '2017-06-25 20:53:37', '1');
COMMIT;

SET FOREIGN_KEY_CHECKS = 1;

三、创建MyGeneratorJ类(二选一)

    1)MyGeneratorJ 类在 java 目录下创建 mapper 文件夹。

    2)在 mapper 目录下创建 xml 文件夹。

    3)在 xml 目录下创建 xxMapper.xml 配置文件。

    4)常用参数已提取,可直接修改使用。

/**
 * @author Ray
 * @date 2018/7/17 0017
 * Mybaits-Plus 测试代码生成器
 */
public class MyGeneratorJ {


//    private static Logger logger = LoggerFactory.getLogger(MyGeneratorJ.class.getName());

    // 数据库配置
    private String url = "jdbc:mysql://localhost:3306/mybatis-plus";
    private String driver = "com.mysql.jdbc.Driver";
    private String username = "root";
    private String password = "root";

    // 开发人员
    private String author = "Ray";

    // 生成文件的输出目录
    private String javaHome = "F:\\codeGen\\java\\"; // java路径

    // 生成包名和类名
    private String packageName = "com.ray"; // 生成的包名  如: com.ray
    private String[] tables = {"sys_user"}; // 生成对应表的类名,可多个表

    // 设置子包名 如: com.ray.controller
    private String controllerName = "controller";
    private String entityName = "entity";

    /**
     * 运行代码生成器
     */
    @Test
    public void generateCode() {
        generateByTables(packageName, tables);
    }

    /**
     * 代码生成器
     * @param packageName 生成的包名
     * @param tableNames 生成对应表名及类名
     */
    private void generateByTables(String packageName, String... tableNames) {
        /**
         * 全局配置
         */
        GlobalConfig config = new GlobalConfig();
        config
                .setActiveRecord(false) // 需要ActiveRecord特性的请改为true
                .setAuthor(author)
                .setOutputDir(javaHome)
                .setFileOverride(true) // 覆盖已有文件
                .setEnableCache(false) // 二级缓存配置
                .setBaseColumnList(true) // XML columList
                .setBaseResultMap(true) // XML ResultMap
                // 自定义文件命名,注意 %s 会自动填充表实体属性!
                .setServiceName("%sService");

        /**
         * 数据库配置
         */
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig
                .setDbType(DbType.MYSQL)
                .setUrl(url)
                .setUsername(username)
                .setPassword(password)
                .setDriverName(driver);

        /**
         * 策略配置项
         */
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig
                .setCapitalMode(true)
                .setEntityLombokModel(false) // 个人喜欢设为true,需添加Lombok依赖
                .setDbColumnUnderline(true)
                .setNaming(NamingStrategy.underline_to_camel) // 下划线转驼峰命名
                .setInclude(tableNames); // 生成对应表的类名


        /**
         * 生成文件
         */
        new AutoGenerator().setGlobalConfig(config)
                .setDataSource(dataSourceConfig)
                .setStrategy(strategyConfig)
                .setPackageInfo(
                        new PackageConfig()
                                .setParent(packageName)
                                .setController(controllerName)
                                .setEntity(entityName)
                )
                .execute(); // 执行生成
    }
}
扫描二维码关注公众号,回复: 2622508 查看本文章

三、创建MyGeneratorR类(二选一)

    1)MyGeneratorR 类在 resources 目录下创建 mapper 文件夹。

    2)在 mapper 目录下创建 xxMapper.xml 配置文件。

    3)将 java 目录下 mapper 文件夹 改名为 dao。

    4)常用参数已提取,可直接修改使用。

/**
 * @author Ray
 * @date 2018/7/17 0017
 * Mybaits-Plus 测试代码生成器
 */
public class MyGeneratorR {

//    private static Logger logger = LoggerFactory.getLogger(MyGeneratorR.class.getName());

    // 数据库配置
    private String url = "jdbc:mysql://localhost:3306/mybatis-plus";
    private String driver = "com.mysql.jdbc.Driver";
    private String username = "root";
    private String password = "root";

    // 开发人员
    private String author = "Ray";

    // 生成文件的输出目录
    private String javaHome = "F:\\codeGen\\java\\"; // java路径
    private String resourcesHome = "F:\\codeGen\\resources\\mapper\\"; // resources路径

    // 生成包名和类名
    private String packageName = "com.ray"; // 生成的包名  如: com.ray
    private String[] tables = {"sys_user"}; // 生成对应表的类名,可多个表

    // 设置子包名 如: com.ray.controller
    private String controllerName = "controller";
    private String entityName = "entity";
    private String mapperName = "dao";

    /**
     * 运行代码生成器
     */
    @Test
    public void generateCode() {
        generateByTables(packageName, tables);
    }

    /**
     * 代码生成器
     * @param packageName 生成的包名
     * @param tableNames 生成对应表名及类名
     */
    private void generateByTables(String packageName, String... tableNames) {
        /**
         * 全局配置
         */
        GlobalConfig config = new GlobalConfig();
        config
                .setActiveRecord(false) // 需要ActiveRecord特性的请改为true
                .setAuthor(author)
                .setOutputDir(javaHome)
                .setFileOverride(true) // 覆盖已有文件
                .setEnableCache(false) // 二级缓存配置
                .setBaseColumnList(true) // XML columList
                .setBaseResultMap(true) // XML ResultMap
                // 自定义文件命名,注意 %s 会自动填充表实体属性!
                .setServiceName("%sService")
                .setMapperName("%sDao");

        /**
         * 数据库配置
         */
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig
                .setDbType(DbType.MYSQL)
                .setUrl(url)
                .setUsername(username)
                .setPassword(password)
                .setDriverName(driver);

        /**
         * 策略配置项
         */
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig
                .setCapitalMode(true)
                .setEntityLombokModel(false) // 个人喜欢设为true,需添加Lombok依赖
                .setDbColumnUnderline(true)
                .setNaming(NamingStrategy.underline_to_camel) // 下划线转驼峰命名
                .setInclude(tableNames); // 生成对应表的类名

        /**
         * 调整 xml 生成目录
         */
        InjectionConfig injectionConfig = new InjectionConfig() {
            @Override
            public void initMap() {

            }
        };
        List list = new ArrayList();
        list.add(new FileOutConfig("/templates/mapper.xml.vm") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 生成文件的输出目录
                return resourcesHome + tableInfo.getEntityName() + "Mapper.xml";
            }
        });
        injectionConfig.setFileOutConfigList(list);

        // 关闭默认 xml 生成,调整生成 至 根目录
        TemplateConfig templateConfig = new TemplateConfig();
        // 去掉自定义模板
        templateConfig.setXml(null);

        /**
         * 生成文件
         */
        new AutoGenerator().setGlobalConfig(config)
                .setDataSource(dataSourceConfig)
                .setStrategy(strategyConfig)
                .setPackageInfo(
                        new PackageConfig()
                                .setParent(packageName)
                                .setController(controllerName)
                                .setEntity(entityName)
                                .setMapper(mapperName)
                )
                .setCfg(injectionConfig)
                .setTemplate(templateConfig)
                .execute(); // 执行生成
    }
}

四、运行结果

    1)MyGeneratorJ类测试结果:

    2)MyGeneratorR类测试结果: 

猜你喜欢

转载自blog.csdn.net/q343509740/article/details/81087929