MybatisPlus——全网配置最全的代码生成器

MybatisPlus代码生成器

这里讲解的是新版 (mybatis-plus 3.5.1+版本),旧版不兼容

官方文档:https://baomidou.com/(建议多看看官方文档,每种功能里面都有讲解)

配置

这里的配置表格和官方文档一致

数据源配置(DataSource)
属性说明示例
urljdbc路径jdbc:mysql://127.0.0.1:3306/mybatis-plus
username数据库账号root
password数据库密码123456
dbQuery(IDbQuery)数据库查询new MySqlQuery()
schema(String)数据库schema(部分数据库适用)mybatis-plus
typeConvert(ITypeConvert)数据库类型转换器new MySqlTypeConvert()
keyWordsHandler(IKeyWordsHandler)数据库关键字处理器new MySqlKeyWordsHandler()
全局配置(GlobalConfig)
方法说明示例
fileOverride覆盖已生成文件默认值:false
disableOpenDir禁止打开输出目录默认值:true
outputDir(String)指定输出目录/opt/baomidou/ 默认值: windows:D:// linux or mac : /tmp
author(String)作者名baomidou 默认值:作者
enableKotlin开启 kotlin 模式默认值:false
enableSwagger开启 swagger 模式默认值:false
dateType(DateType)时间策略DateType.ONLY_DATE=Date 默认值: DateType.TIME_PACK=LocalDateTime
commentDate(String)注释日期默认值: yyyy-MM-dd
包配置(PackageConfig)
方法说明示例
parent(String)父包名默认值:com.baomidou
moduleName(String)父包模块名默认值:无
entity(String)Entity 包名默认值:entity
service(String)Service 包名默认值:service
serviceImpl(String)Service Impl 包名默认值:service.impl
mapper(String)Mapper 包名默认值:mapper
mapperXml(String)Mapper XML 包名默认值:mapper.xml
controller(String)Controller 包名默认值:controller
other(String)自定义文件包名输出自定义文件时所用到的包名
pathInfo(Map<OutputFile, String>)路径配置信息Collections.singletonMap(OutputFile.mapperXml, "D://")
策略配置(StrategyConfig)
方法说明示例
enableCapitalMode开启大写命名默认值:false
enableSkipView开启跳过视图默认值:false
disableSqlFilter禁用 sql 过滤默认值:true,语法不能支持使用 sql 过滤表的话,可以考虑关闭此开关
enableSchema启用 schema默认值:false,多 schema 场景的时候打开
likeTable(LikeTable)模糊表匹配(sql 过滤)likeTable 与 notLikeTable 只能配置一项
notLikeTable(LikeTable)模糊表排除(sql 过滤)likeTable 与 notLikeTable 只能配置一项
addInclude(String...)增加表匹配(内存过滤)include 与 exclude 只能配置一项
addExclude(String...)增加表排除匹配(内存过滤)include 与 exclude 只能配置一项
addTablePrefix(String...)增加过滤表前缀
addTableSuffix(String...)增加过滤表后缀
addFieldPrefix(String...)增加过滤字段前缀
addFieldSuffix(String...)增加过滤字段后缀
entityBuilder实体策略配置
controllerBuildercontroller 策略配置
mapperBuildermapper 策略配置
serviceBuilderservice 策略配置
模板引擎配置(TemplateEngine)

默认 Velocity ;可选模板引擎 Beetl 或 Freemarker。(二选一即可)

模板引擎代码
Velocity默认.templateEngine(new VelocityTemplateEngine())
Freemarker可选.templateEngine(new FreemarkerTemplateEngine())
Beetl可选.templateEngine(new BeetlTemplateEngine())

手动配置代码生成器

  1. 建表,插入数据

    DROP TABLE IF EXISTS user;
    
    CREATE TABLE user
    (
        id BIGINT(20) NOT NULL COMMENT '主键ID',
        name VARCHAR(30) NULL DEFAULT NULL COMMENT '姓名',
        age INT(11) NULL DEFAULT NULL COMMENT '年龄',
        email VARCHAR(50) NULL DEFAULT NULL COMMENT '邮箱',
        version INT(10) NOT NULL DEFAULT 1 COMMIT '乐观锁版本号',
        DELETED INT(10) NOT NULL DEFAULT 0 COMMIT '逻辑删除',
        CREATE_TIME DATE COMMIT '创建时间',
        modify_time DATE COMMIT '更新时间',
        PRIMARY KEY (id)
    );
    
    DELETE FROM user;
    
    INSERT INTO user (id, name, age, email) VALUES
    (1, '工藤新一','test1@baomidou.com'),
    (2, '毛利兰','est2@baomidou.com'),
    (3, '柯南', 28, 'test3@baomidou.com'),
    (4, '灰原哀', 21, 'test4@baomidou.com'),
    (5, '工藤有希子', 24, 'test5@baomidou.com');
  2. 导入依赖

    <dependencies>
        <!--spring-boot-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!--SpringBootTest-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!--swagger-->
        <dependency>
            <groupId>io.swagger</groupId>
            <artifactId>swagger-annotations</artifactId>
            <version>1.6.3</version>
        </dependency>
        <!--lombok-->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <!--mysql 驱动-->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.26</version>
        </dependency>
        <!--mybatis-plus-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!--mybatis-plus-generator 生成器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!--velocity-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>
        <!--以下两个引擎模板保留一个即可,看个人爱好选择-->
        <!--freemarker引擎模板-->
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>
        <!--beetl引擎模板-->
        <dependency>
            <groupId>com.ibeetl</groupId>
            <artifactId>beetl</artifactId>
            <version>3.8.1.RELEASE</version>
        </dependency>
    </dependencies>
  3. yaml

    #设置开发环境
    spring:
      datasource:
        username: root
        password: 123456
        driver-class-name: com.p6spy.engine.spy.P6SpyDriver
        url: jdbc:p6spy:mysql://localhost:3306/mybatis_plus?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8
    
    
    
    
    mybatis-plus:
    	#配置日志  log-impl:日志实现
      configuration:
        log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
      global-config:
        db-config:
          logic-delete-field: isDelete # 全局逻辑删除的实体字段名(since 3.3.0,配置后可以忽略不配置步骤2)
          logic-delete-value: 1 # 逻辑已删除值(默认为 1)
          logic-not-delete-value: 0 # 逻辑未删除值(默认为 0)
  4. 在测试类里写入主方法并修改参数,运行即可【配置已经封装好了】

    public static void main(String[] args) {
        
        //这里按着给的注解修改参数即可
        
            //手动配置数据源
            String url="jdbc:mysql://localhost:3306/mybatis_plus?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8";   //注意修改数据库名
            String name="root";
            String password="123456";
    
            //数据库表的设置
            List<String> listTable = Arrays.asList("user");  //设置需要自动代码生成的表名
            List<String> listTableSuffix = Arrays.asList("_b");    //设置 过滤 表的后缀
            List<String> listTablePrefix = Arrays.asList("t_","c_"); //设置 过
    
            //基本信息
            String author = "柯南";    //作者
            String parent = "com";   //父包名
            String module = "example";   //模块包名
        
        	
        	
        //已封装好,无需更改。可按照需求进行注释
        
            //1、配置数据源
            FastAutoGenerator.create(url, name, password)
                    //2、全局配置
                    .globalConfig(builder -> {
                        builder.author(author) // 设置作者名
                                .outputDir(System.getProperty("user.dir") + "/src/main/java")   //设置输出路径:项目的 java 目录下【System.getProperty("user.dir")意思是获取到项目所在的绝对路径】
                                .commentDate("yyyy-MM-dd hh:mm:ss")   //注释日期
                                .dateType(DateType.ONLY_DATE)   //定义生成的实体类中日期的类型 TIME_PACK=LocalDateTime;ONLY_DATE=Date;
                                .fileOverride()   //覆盖之前的文件
                                .enableSwagger()   //开启 swagger 模式
                                .disableOpenDir();   //禁止打开输出目录,默认打开
                    })
                    //3、包配置
                    .packageConfig(builder -> {
                        builder.parent(parent) // 设置父包名
                                .moduleName(module)   //设置模块包名
                                .entity("entity")   //pojo 实体类包名
                                .service("service") //Service 包名
                                .serviceImpl("service.impl") // ***ServiceImpl 包名
                                .mapper("mapper")   //Mapper 包名
                                .xml("mapper.xml")  //Mapper XML 包名
                                .controller("controller") //Controller 包名
                                .other("config")    //自定义包名(一般不在这里生成,而是后面编写的时候自己建包)
                                .pathInfo(Collections.singletonMap(OutputFile.mapper.xml, System.getProperty("user.dir")+"/src/main/resources/mapper"));    //配置 mapper.xml 路径信息:项目的 resources 目录下
                    })
                    //4、策略配置
                    .strategyConfig(builder -> {
                        builder
                                .enableCapitalMode()    //开启大写命名
                                .enableSkipView()   //创建实体类的时候跳过视图
                                .addInclude(listTable) // 设置需要生成的数据表名
                                .addTableSuffix(listTableSuffix) //设置 过滤 表的后缀
                                .addTablePrefix(listTablePrefix) // 设置 过滤 表的前缀
    
                                //4.1、实体类策略配置
                                .entityBuilder()
                                .enableChainModel() //开启链式模型
                                //.disableSerialVersionUID()  //默认是开启实体类序列化,可以手动disable使它不序列化。由于项目中需要使用序列化就按照默认开启了
                                .enableTableFieldAnnotation()       // 开启生成实体时生成字段注解
                                .enableLombok() //开启 Lombok
                                .versionColumnName("version")   //乐观锁字段名(数据库)
                                .versionPropertyName("version") //乐观锁属性名(实体)
                                .logicDeleteColumnName("deleted")   //逻辑删除字段名(数据库)
                                .logicDeletePropertyName("deleteFlag")  //逻辑删除属性名(实体)
                                .naming(NamingStrategy.underline_to_camel)  //数据库表映射到实体的命名策略:默认是下划线转驼峰命。这里可以不设置
                                .columnNaming(NamingStrategy.underline_to_camel)    //数据库表字段映射到实体的命名策略:下划线转驼峰命。(默认是和naming一致,所以也可以不设置)
                                .addTableFills(
                                        new Column("create_time", FieldFill.INSERT),
                                        new Column("modify_time", FieldFill.INSERT_UPDATE)
                                )   //添加表字段填充,"create_time"字段自动填充为插入时间,"modify_time"字段自动填充为插入修改时间
                                .idType(IdType.AUTO)    //设置主键自增
    
                                //4.2、Controller策略配置
                                .controllerBuilder()
                                .enableHyphenStyle()    //开启驼峰连转字符
                                .formatFileName("%sController") //格式化 Controller 类文件名称,%s进行匹配表名,如 UserController
                                .enableRestStyle()  //开启生成 @RestController 控制器
    
                                //4.3、service 策略配置
                	            .serviceBuilder()
                                .formatServiceFileName("%sService") //格式化 service 接口文件名称,%s进行匹配表名,如 UserService
                                .formatServiceImplFileName("%sServiceImpl") //格式化 service 实现类文件名称,%s进行匹配表名,如 UserServiceImpl
    
                                //4.4、Mapper策略配置
                                .mapperBuilder()
                                .superClass(BaseMapper.class)   //设置父类
                                .enableBaseResultMap()  //启用 BaseResultMap 生成
                                .enableBaseColumnList() //启用 BaseColumnList
                                .formatMapperFileName("%sMapper")   //格式化 mapper 文件名称
                                .enableMapperAnnotation()       //开启 @Mapper 注解
                                .formatXmlFileName("%sXml") //格式化Xml文件名称
                                .formatMapperFileName("%sMapper");   //格式化Mapper文件名称
    
                    })
                    //5、模板
                    .templateEngine(new VelocityTemplateEngine())
                    /*
                        模板引擎配置,默认 Velocity 可选模板引擎 Beetl 或 Freemarker(以下两个引擎用哪个就保留哪个)
                       .templateEngine(new BeetlTemplateEngine())
                       .templateEngine(new FreemarkerTemplateEngine())
                     */
                	.templateEngine(new FreemarkerTemplateEngine())	//本人选择了Freemarker
                    //6、执行
                    .execute();
        }
  5. 运行结果:

    image

    生成的包:

    image

注意:代码生成器生成的实体类是用@Setter和@Getter ,没有toString方法和有参、无参构造,所以代码生成后需要手动在实体类上删除@Setter和@Getter ,添加@Data @NoArgsConstructor @AllArgsConstructor


  • 4
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,以下是一份最全MybatisPlus代码生成器: ```java package com.example.generator; import com.baomidou.mybatisplus.annotation.DbType; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.generator.AutoGenerator; import com.baomidou.mybatisplus.generator.config.*; import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert; import com.baomidou.mybatisplus.generator.config.po.TableFill; import com.baomidou.mybatisplus.generator.config.po.TableInfo; import com.baomidou.mybatisplus.generator.config.rules.DateType; import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy; import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine; import java.util.ArrayList; import java.util.List; public class CodeGenerator { public static void main(String[] args) { // 代码生成器 AutoGenerator mpg = new AutoGenerator(); // 全局配置 GlobalConfig gc = new GlobalConfig(); String projectPath = System.getProperty("user.dir"); gc.setOutputDir(projectPath + "/src/main/java"); gc.setAuthor("your name"); gc.setOpen(false); gc.setFileOverride(true); gc.setBaseResultMap(true); gc.setBaseColumnList(true); gc.setEntityName("%sDO"); gc.setMapperName("%sDao"); gc.setXmlName("%sMapper"); gc.setDateType(DateType.ONLY_DATE); gc.setIdType(IdType.ID_WORKER); mpg.setGlobalConfig(gc); // 数据源配置 DataSourceConfig dsc = new DataSourceConfig(); dsc.setDbType(DbType.MYSQL); dsc.setUrl("jdbc:mysql://localhost:3306/mybatis_plus?useUnicode=true&useSSL=false&characterEncoding=utf8"); dsc.setDriverName("com.mysql.jdbc.Driver"); dsc.setUsername("root"); dsc.setPassword("root"); dsc.setTypeConvert(new MySqlTypeConvert()); mpg.setDataSource(dsc); // 包配置 PackageConfig pc = new PackageConfig(); pc.setParent("com.example"); pc.setEntity("entity"); pc.setMapper("dao"); pc.setXml("mapper"); pc.setService("service"); pc.setServiceImpl("service.impl"); pc.setController("controller"); mpg.setPackageInfo(pc); // 策略配置 StrategyConfig strategy = new StrategyConfig(); strategy.setNaming(NamingStrategy.underline_to_camel); strategy.setColumnNaming(NamingStrategy.underline_to_camel); strategy.setEntityLombokModel(true); strategy.setRestControllerStyle(true); strategy.setSuperEntityClass("com.example.common.BaseDO"); strategy.setSuperMapperClass("com.baomidou.mybatisplus.core.mapper.BaseMapper"); strategy.setSuperServiceClass("com.baomidou.mybatisplus.extension.service.IService"); strategy.setSuperServiceImplClass("com.baomidou.mybatisplus.extension.service.impl.ServiceImpl"); strategy.setSuperControllerClass("com.example.common.BaseController"); strategy.setInclude("user"); strategy.setControllerMappingHyphenStyle(true); List<TableFill> tableFillList = new ArrayList<>(); tableFillList.add(new TableFill("gmt_create", FieldFill.INSERT)); tableFillList.add(new TableFill("gmt_modified", FieldFill.INSERT_UPDATE)); strategy.setTableFillList(tableFillList); strategy.setVersionFieldName("version"); strategy.setLogicDeleteFieldName("deleted"); mpg.setStrategy(strategy); // 模板配置 TemplateConfig templateConfig = new TemplateConfig(); templateConfig.setEntity("/templates/entity.java"); templateConfig.setService("/templates/service.java"); templateConfig.setServiceImpl("/templates/serviceImpl.java"); templateConfig.setController("/templates/controller.java"); templateConfig.setMapper("/templates/mapper.java"); templateConfig.setXml("/templates/mapper.xml"); mpg.setTemplate(templateConfig); // 自定义模板引擎,需要引入相应的依赖 mpg.setTemplateEngine(new FreemarkerTemplateEngine()); // 模板引擎需要的属性配置 TemplateConfig tc = new TemplateConfig(); tc.setXml(null); mpg.setTemplate(tc); // 注入自定义配置,可以在 VM 中使用 cfg.abc 设置的值 InjectionConfig injectionConfig = new InjectionConfig() { @Override public void initMap() { // to do nothing } }; // 自定义输出配置 List<FileOutConfig> focList = new ArrayList<>(); // 自定义配置会被优先输出 focList.add(new FileOutConfig("/templates/mapper.xml.vm") { @Override public String outputFile(TableInfo tableInfo) { // 自定义输入文件名称 return projectPath + "/src/main/resources/mapper/" + tableInfo.getEntityName() + "Mapper.xml"; } }); injectionConfig.setFileOutConfigList(focList); mpg.setCfg(injectionConfig); // 执行生成 mpg.execute(); } } ``` 其中,需要根据实际情况修改数据库连接信息、包名、表名等参数。执行 main 方法即可生成相应的代码。该代码生成器包含了MybatisPlus的所有常用配置,并且使用了自定义模板引擎和输出配置实现更灵活的代码生成。 ### 回答2: MyBatis Plus是一个基于MyBatis的优秀的持久层框架,它提供了很多便捷的开发工具,包括代码生成器。下面是一份最全MyBatis Plus代码生成器的示例代码: 首先,引入相关的依赖: ``` <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>最新版本</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>最新版本</version> </dependency> ``` 创建一个Generator类,配置代码生成器的相关参数: ```java public class Generator { public static void main(String[] args) { // 1. 全局配置 GlobalConfig globalConfig = new GlobalConfig(); globalConfig.setOutputDir(System.getProperty("user.dir") + "/src/main/java"); globalConfig.setAuthor("Your Name"); globalConfig.setOpen(false); // 2. 数据源配置 DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/db_name"); dataSourceConfig.setDriverName("com.mysql.jdbc.Driver"); dataSourceConfig.setUsername("root"); dataSourceConfig.setPassword("password"); // 3. 策略配置 StrategyConfig strategyConfig = new StrategyConfig(); strategyConfig.setNaming(NamingStrategy.underline_to_camel); strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel); strategyConfig.setEntityLombokModel(true); // 4. 包名配置 PackageConfig packageConfig = new PackageConfig(); packageConfig.setParent("com.example"); packageConfig.setModuleName("demo"); // 5. 代码生成器配置 AutoGenerator autoGenerator = new AutoGenerator(); autoGenerator.setGlobalConfig(globalConfig); autoGenerator.setDataSource(dataSourceConfig); autoGenerator.setStrategy(strategyConfig); autoGenerator.setPackageInfo(packageConfig); // 6. 执行代码生成器 autoGenerator.execute(); } } ``` 在上面的代码中,我们配置了全局属性、数据源属性、策略配置和包名配置,然后创建了一个代码生成器对象并执行生成代码的操作。 以上就是一份使用MyBatis Plus的最全代码生成器示例,你可以根据自己的需求,修改相关配置来生成需要的代码。 ### 回答3: MyBatis Plus是一款开源的持久层框架,提供了丰富的功能和便利的API,能够极大地简化数据库操作。下面是一份使用MyBatis Plus的完整代码生成器。 首先,我们需要引入MyBatis Plus的依赖包到项目中。可以使用Maven或Gradle配置文件添加以下依赖: ``` <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>x.x.x</version> </dependency> ``` 接下来,创建一个代码生成器类,用于配置和生成代码。代码生成器可以通过读取数据库表结构自动生成实体类、Mapper接口和XML映射文件。 ```java public class CodeGenerator { public static void main(String[] args) { // 数据源配置 String url = "jdbc:mysql://localhost:3306/database"; String username = "root"; String password = "123456"; String driverName = "com.mysql.jdbc.Driver"; // 数据源 DataSourceConfig dataSourceConfig = new DataSourceConfig(); dataSourceConfig.setDbType(DbType.MYSQL); dataSourceConfig.setUrl(url); dataSourceConfig.setUsername(username); dataSourceConfig.setPassword(password); dataSourceConfig.setDriverName(driverName); // 全局配置 GlobalConfig globalConfig = new GlobalConfig(); String outputDir = System.getProperty("user.dir") + "/src/main/java"; globalConfig.setOutputDir(outputDir); globalConfig.setAuthor("Your Name"); globalConfig.setOpen(false); // 数据表配置 StrategyConfig strategyConfig = new StrategyConfig(); String[] tableNames = {"table1", "table2"}; strategyConfig.setInclude(tableNames); // 包名配置 PackageConfig packageConfig = new PackageConfig(); packageConfig.setParent("com.example"); packageConfig.setEntity("entity"); packageConfig.setMapper("mapper"); packageConfig.setXml("mapper.xml"); // 代码生成器 AutoGenerator autoGenerator = new AutoGenerator(); autoGenerator.setDataSource(dataSourceConfig); autoGenerator.setGlobalConfig(globalConfig); autoGenerator.setStrategy(strategyConfig); autoGenerator.setPackageInfo(packageConfig); // 执行生成代码 autoGenerator.execute(); } } ``` 以上代码中,配置数据库连接信息、输出路径、作者等等。通过设置数据表名称,我们可以生成对应的实体类、Mapper接口和XML映射文件。最后,调用execute()方法执行生成代码的操作。 请注意,代码生成器是一个独立的Java类,需要单独运行。在运行代码生成器之前,确保数据库连接正确,并且依赖包已经成功导入。 通过以上代码生成器,我们可以轻松地生成MyBatis Plus的完整代码,大大节省了手动创建实体类、Mapper和XML文件的时间。同时,MyBatis Plus还提供了更多高级功能和配置选项,可以根据具体需求进行扩展和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值