Mybatis-Plus的使用(二)—— 代码生成器

7 篇文章 0 订阅
4 篇文章 0 订阅

原文链接:橙子&栗子&世界——Mybatis-Plus的使用(二)—— 代码生成器

代码生成器的介绍

对于我来说,开发时最难受的时候除了有bug没有解决之外,就是做复制粘贴了。每次创建一个新的模块,都要重复的不断复制实体类的属性,然后在写上一次注释,再把代码中该继承的继承。用Mybatis-Plus的代码生成器AutoGenerator就可以省去这一部分的烦恼。它帮我直接把EntityMapperMapper XMLServiceController等文件预先生成好,也帮我把Entity对应的表做好了映射,也写好的注释,还有Service以及Mapper文件,也帮我把Mybatis-Plus需要用的父类继承好了。这样就省去我这一部分的开发工作。

代码生成器的依赖

除了一章节的Mybatis-Plus的核心依赖以外,还需要添加两个重要的依赖:

	<!--mybatisplus的代码生成器依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.1.2</version>
        </dependency>

以及

	<!--freemarker模板引擎-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.28</version>
        </dependency>

代码生成工具类

AutoGenerator

代码生成器的主类,之后的各种配置都会添加到这个类里面,例如:

  • GlobalConfig(全局配置);
  • DataSourceConfig(数据源配置);
  • PackageConfig(包配置);
  • TemplateConfig(模板配置)
  • InjectionConfig(自定义配置);
  • StrategyConfig(策略配置(数据库表配置));
	AutoGenerator mpg = new AutoGenerator();// 代码生成器主类

GlobalConfig

全局配置,定义文件的输出目录,设置文件的@author信息等

        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");// 获取用户程序当前路径(项目根的路径)
        gc.setOutputDir(projectPath + "/src/main/java");// 生成文件的输出目录(默认值:D 盘根目录)
        gc.setAuthor("ck");// 开发人员(默认值:null)
        gc.setOpen(false);// 是否打开输出目录(默认值:null)
        gc.setFileOverride(true);// 是否覆盖已有文件(默认值:false)
        mpg.setGlobalConfig(gc);//把全局配置添加到代码生成器主类

DataSourceConfig

数据源配置,这个比较清晰了,数据库表映射实体类时需要配置数据库的连接信息。

        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://47.103.17.3:3306/lm_dev?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8");
        dsc.setSchemaName("public");// 数据库 schema name(例如 PostgreSQL 可指定为 public)
        dsc.setDbType(DbType.MYSQL);// 数据库类型
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");// 驱动名称
        dsc.setUsername("chenkang"); // 用户名
        dsc.setPassword("258963"); // 密码

类型转换 默认由 dbType 类型决定选择对应数据库内置实现。
实现 ITypeConvert 接口自定义数据库 字段类型 转换为自己需要的 java 类型,也可以直接重写自带的MySqlTypeConvert类的processTypeConvert方法,是一个道理

	dsc.setTypeConvert(new MySqlTypeConvert() {
            @Override
            public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
                return super.processTypeConvert(globalConfig, fieldType);
            }
        });
	mpg.setDataSource(dsc);//把数据源配置添加到代码生成器主类

PackageConfig

包配置,就是每个类最上面的package,比如:package com.ck.mybatisplus.foundation.service;这里包配置可以分别配置serviceentitycontroller等等

	PackageConfig pc = new PackageConfig();
        pc.setModuleName("foundation");// 父包模块名
        pc.setParent("com.ck.mybatisplus");// 父包名。如果为空,将下面子包名必须写全部, 否则就只需写子包名
        pc.setService("service");// Service包名
        pc.setEntity("entity");// Entity包名
        pc.setServiceImpl("service.impl");// ServiceImpl包名
        pc.setMapper("mapper");// Mapper包名
        pc.setController("controller");// Contoller包名
        // pc.setXml("mapper.xml");// Mapper.xml包名
        mpg.setPackageInfo(pc);// 把包配置添加到代码生成器主类

TemplateConfig

模板配置,配置模板,此模板配置默认生成mybatisplus自带模板的controller.javaservice.javaserviceImpl.javamapper.java.xmlentity类的文件
若不想用默认的模板生成的文件,有两种方法:

  1. 一种是直接set自定义的模板路径,如下面的templateConfig.setController("/templates/MyController.java.ftl")
  2. 第二种是使用自定义配置(下面有讲解),前提是要先把默认值设为null,如templateConfig.setXml(null)。两种方法的共同点是都需要先有自定义的模板文件,

不同是第一种的文件生成路径是在前面的包配置固定了的,第二种是连文件生成的路径都是可以自定义的!

	TemplateConfig templateConfig = new TemplateConfig();
        templateConfig.setXml(null);
//        templateConfig.setController("/templates/MyController.java.ftl");
        mpg.setTemplate(templateConfig);// 把模板配置添加到代码生成器主类

InjectionConfig

自定义配置,前面也说了,只要有相应的模板文件,基本上能满足在项目中任何位置生成你想要的文件,比如.java.xml.jsp文件等,首先new出自定义配置的对象,如下

	InjectionConfig cfg = new InjectionConfig() {
            /**
             * 使用initMap是抽象方法,所以必须被重写,
             * 注入自定义 Map 对象(注意需要setMap放进去),该对象可以传递到模板引擎通过 cfg.xxx 引用
             */
            @Override
            public void initMap() {
                Map<String, Object> map = new HashMap<>();
                map.put("mapperId", "testMapperId");
                this.setMap(map);
            }
        };

然后配置模板的路径

.ftl表示是模板引擎是 freemarker,还有.vm表示模板引擎是 velocity等等

String templatePath = "/templates/mapper.xml.ftl";

再自定义输出配置,配置 FileOutConfig 指定模板文件、输出文件达到自定义文件生成目的,如果同时自定义两个或多个以上,可以直接focList.add多个new FileOutConfig(templatePath) {}配置

自定义配置会被优先输出

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

自定义判断是否创建文件,该配置用于判断某个类是否需要覆盖创建,如果想覆盖之前已生成的文件,isCreate方法直接返回true,默认是false

一般情况可以不用配置这个,直接使用默认的不覆盖

	cfg.setFileCreate(new IFileCreate() {
            @Override
            public boolean isCreate(ConfigBuilder configBuilder, FileType fileType, String filePath) {
                // 判断自定义文件夹是否需要创建,
//                checkDir("调用默认方法创建的目录");
                // 当然也可以自定义哪些文件可以被覆盖哪些不可以被覆盖,更新判断逻辑返回true或者false
                return false;
            }
        });
	cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);

StrategyConfig

数据库表配置,通过该配置,可指定需要生成哪些表或者排除哪些表等信息,

	StrategyConfig strategy = new StrategyConfig();
        // 数据库表映射到实体的命名策略:下划线转驼峰
        strategy.setNaming(NamingStrategy.underline_to_camel);
        // 数据库表字段映射到实体的命名策略, 未指定按照 naming 执行
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        // 自定义继承类全称,带包名 (以下为示例)
        strategy.setSuperEntityClass("com.baomidou.ant.common.BaseEntity");
        strategy.setSuperControllerClass("com.baomidou.ant.common.BaseController");
        strategy.setEntityLombokModel(true);// 【实体】是否为lombok模型(默认 false)
        strategy.setRestControllerStyle(true);// 生成 @RestController 控制器
        strategy.setSuperEntityColumns("id");// 写于父类中的公共字段
        strategy.setInclude("fnd_user");// 需要包含的表名,允许正则表达式(与exclude二选一配置)
        strategy.setExclude("m_fnd_user1");// 需要排除的表名,允许正则表达式
        strategy.setControllerMappingHyphenStyle(true);// 驼峰转连字符
        strategy.setEntityTableFieldAnnotationEnable(true);// 是否生成实体时,生成字段注解 默认false;
        strategy.setTablePrefix(pc.getModuleName() + "_");// 表前缀
        mpg.setStrategy(strategy);// 把策略配置添加到代码生成器主类

模板引擎

向代码生成器主类上配置模板引擎,这是是freemarkermpg.execute()方法就是执行生成代码类。

	mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        mpg.execute();

以上内容来源于

  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Mybatis-Plus Generator是一个非常强大的代码生成器工具,可以帮助开发人员快速生成基于Mybatis-Plus框架的CRUD代码。 下面是一个Mybatis-Plus Generator 3.5.1的实例: 首先,需要在pom.xml文件中添加相应的依赖: ``` <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.5.1</version> </dependency> ``` 然后,在项目的配置文件(如application.properties或application.yml)中配置数据库连接信息: ``` spring.datasource.url=jdbc:mysql://localhost:3306/my_database spring.datasource.username=root spring.datasource.password=123456 spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ``` 接下来,创建一个GeneratorConfig类,并在其中进行相应的配置: ```java public class GeneratorConfig { public static void main(String[] args) { // 代码生成器 AutoGenerator autoGenerator = new AutoGenerator(); // 全局配置 GlobalConfig globalConfig = new GlobalConfig(); String outputDir = System.getProperty("user.dir") + "/src/main/java"; globalConfig.setOutputDir(outputDir); globalConfig.setAuthor("your_name"); globalConfig.setOpen(false); autoGenerator.setGlobalConfig(globalConfig); // 数据源配置 DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/my_database"); dataSourceConfig.setUsername("root"); dataSourceConfig.setPassword("123456"); dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver"); autoGenerator.setDataSource(dataSourceConfig); // 包配置 PackageConfig packageConfig = new PackageConfig(); packageConfig.setParent("com.example"); autoGenerator.setPackageInfo(packageConfig); // 策略配置 StrategyConfig strategyConfig = new StrategyConfig(); strategyConfig.setNaming(NamingStrategy.underline_to_camel); strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel); strategyConfig.setRestControllerStyle(true); autoGenerator.setStrategy(strategyConfig); // 执行代码生成器 autoGenerator.execute(); } } ``` 最后,运行GeneratorConfig类中的main方法,即可生成相应的实体类、Mapper接口、Service接口以及Controller类。 这样,使用Mybatis-Plus Generator 3.5.1代码生成器,我们可以快速生成与数据库表对应的Java代码,省去了手写的繁琐工作,提高了开发效率。使用起来非常方便,适用于大部分的项目开发。 ### 回答2: Mybatis-Plus是基于Mybatis的增强工具,可以简化开发过程中对数据库的操作。其中,Mybatis-Plus Generator是一款代码生成器,可以根据数据库表结构自动生成Java实体类、Mapper接口以及XML映射文件。 Mybatis-Plus Generator 3.5.1版本是最新发布的版本,具有一些新的特性和优化,可以更加方便、快捷地生成代码。下面以一个示例来说明如何使用这个代码生成器: 首先,我们需要在项目的pom.xml文件中添加Mybatis-Plus Generator的依赖: ``` <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.5.1</version> </dependency> ``` 然后,我们需要在项目的配置文件中配置数据库连接信息、生成代码的包名等相关配置: ``` mybatis-plus: # 数据库连接信息 datasource: url: jdbc:mysql://localhost:3306/testdb username: root password: 123456 driver-class-name: com.mysql.jdbc.Driver # 生成代码的包名 global-config: output-dir: src/main/java author: your_name open: false entity-name: %sEntity mapper-name: %sMapper xml-name: %sMapper service-name: %sService service-impl-name: %sServiceImpl controller-name: %sController ``` 接下来,我们可以使用Mybatis-Plus Generator提供的工具类进行代码生成。可以通过以下方式调用: ``` AutoGenerator generator = new AutoGenerator(); // 设置全局配置 generator.setGlobalConfig(config); // 设置数据源配置 generator.setDataSource(dataSourceConfig); // 设置包名配置 generator.setPackageInfo(packageConfig); // 设置策略配置 generator.setStrategy(strategyConfig); // 执行生成 generator.execute(); ``` 最后,执行代码生成命令,即可完成代码的自动生成。生成的代码会按照配置的包名和格式生成在指定目录下。 通过使用Mybatis-Plus Generator 3.5.1代码生成器,我们可以简化开发过程中的手动编写实体类、Mapper接口和XML映射文件的工作量,提高开发效率。同时,它也提供了丰富的配置选项,可以根据具体项目的需求进行定制,生成符合项目要求的代码。 ### 回答3: mybatis-plus-generator是MyBatis-Plus框架中的一个代码生成器工具,可以根据数据库表结构自动生成对应的实体类、Mapper接口、Service接口以及ServiceImpl类等代码。以下是一个使用mybatis-plus-generator 3.5.1生成代码的示例: 1. 首先,需要在项目的pom.xml文件中添加mybatis-plus-generator的依赖: ```xml <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>3.5.1</version> </dependency> ``` 2. 创建一个配置类,设置代码生成所需的参数,如数据库连接信息、代码输出路径、包名等等。例如: ```java public class GeneratorConfig { public static void main(String[] args) { // 数据源配置 DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/mybatis_test?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai"); dataSourceConfig.setDriverName("com.mysql.jdbc.Driver"); dataSourceConfig.setUsername("root"); dataSourceConfig.setPassword("password"); // 代码生成器配置 AutoGenerator autoGenerator = new AutoGenerator(); autoGenerator.setDataSource(dataSourceConfig); autoGenerator.setGlobalConfig(new GlobalConfig().setOutputDir("D:/code").setAuthor("mybatis-plus-generator").setOpen(false)); autoGenerator.setPackageInfo(new PackageConfig().setParent("com.example.demo").setModuleName("entity")); autoGenerator.setStrategy(new StrategyConfig().setNaming(NamingStrategy.underline_to_camel).setColumnNaming(NamingStrategy.underline_to_camel)); // 执行生成代码 autoGenerator.execute(); } } ``` 3. 运行配置类的main方法即可生成代码,生成的代码将会按照设置的路径和包名进行输出。 总的来说,使用mybatis-plus-generator能够大大加速开发过程,减少手写代码的工作量,提高项目代码的一致性和规范性。而3.5.1版本是mybatis-plus-generator的一个较新的版本,一般来说,较新的版本往往修复了一些bug并提供了更好的性能和功能。因此,推荐使用mybatis-plus-generator 3.5.1来进行代码生成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值