• Springboot集成MyBatis-Plus并通过MyBatis-Plus-Generator生成代码


    MyBatis-Plus是我们在开发时经常用到的一个框架,经常需要在开发Springboot项目时进行配置,正确使用,确实能给我们减少很多工作量,让我们不用再一个一个的根据数据库一个一个建实体类了。这里记录一下

    MyBatis-Plus集成

    1. 将下面MyBatis的依赖

              <dependency>
                  <groupId>org.mybatis.spring.bootgroupId>
                  <artifactId>mybatis-spring-boot-starterartifactId>
                  <version>2.3.1version>
              dependency>
      
      • 1
      • 2
      • 3
      • 4
      • 5

      替换为

      		<dependency>
      			<groupId>com.baomidougroupId>
      			<artifactId>mybatis-plus-boot-starterartifactId>
      			<version>3.4.3.1version>
      		dependency>
      
      • 1
      • 2
      • 3
      • 4
      • 5

      原来没有使用Mybatis的直接新增就可以

    2. 数据源的配置同MyBatis,但yml文件中增加下面配置,

      mybatis-plus:
        mapper-locations: classpath:mapper/*.xml
        configuration:
          log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
        global-config:
          banner: true
          enableSqlRunner: true
          type-aliases-package: com.zwl.entity
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
    3. 做完上面的其实就已经配置好了,没有什么问题了。如果需要测试的话,就需要新建Service等,强烈建议,跟进下面的步骤,自动生成相关Service和Entity

    MyBatis-Plus-Generator自动生成代码

    1. 增加下面依赖
    		<dependency>
    			<groupId>com.baomidougroupId>
    			<artifactId>mybatis-plus-generatorartifactId>
    			<version>3.5.3.1version>
    		dependency>
    		<dependency>
     		<groupId>org.apache.velocitygroupId>
     		<artifactId>velocity-engine-coreartifactId>
     		<version>2.0version>
     	dependency>
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    1. 跟进自己的情况,修改下面代码,运行,即可自动生成Service、Dao等相关文件

      package com.breed.livestock.generator;
      
      
      import com.baomidou.mybatisplus.annotation.FieldFill;
      import com.baomidou.mybatisplus.annotation.IdType;
      import com.baomidou.mybatisplus.generator.FastAutoGenerator;
      import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
      import com.baomidou.mybatisplus.generator.config.OutputFile;
      import com.baomidou.mybatisplus.generator.config.TemplateType;
      import com.baomidou.mybatisplus.generator.config.converts.MySqlTypeConvert;
      import com.baomidou.mybatisplus.generator.config.converts.PostgreSqlTypeConvert;
      import com.baomidou.mybatisplus.generator.config.querys.MySqlQuery;
      import com.baomidou.mybatisplus.generator.config.querys.PostgreSqlQuery;
      import com.baomidou.mybatisplus.generator.config.rules.DateType;
      import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
      import com.baomidou.mybatisplus.generator.fill.Column;
      import com.baomidou.mybatisplus.generator.fill.Property;
      import com.baomidou.mybatisplus.generator.keywords.MySqlKeyWordsHandler;
      import com.baomidou.mybatisplus.generator.keywords.PostgreSqlKeyWordsHandler;
      
      import java.util.Collections;
      
      // 代码自动生成器
      public class Generator {
          // 数据库连接字段配置
          private static final String JDBC_URL = "jdbc:postgresql://localhost:5432/test2?characterEncoding=utf-8&serverTimezone=GMT%2B8&useSSl=true";
          private static final String JDBC_USER_NAME = "postgres";
          private static final String JDBC_PASSWORD = "postgres";
      
          // 包名和模块名
          private static final String PACKAGE_NAME = "com.breed.livestock";
          private static final String MODULE_NAME = "livestock";
      
          // 表名,多个表使用英文逗号分割
          private static final String[] TBL_NAMES = {"sys_department","sys_role","sys_user"};
      
          // 表名的前缀,从表生成代码时会去掉前缀
          private static final String TABLE_PREFIX = "";
      
      
          public static void main(String[] args) {
      
              //获取当前工程路径(这里无需修改)
              String projectPath = System.getProperty("user.dir");
      
      
              /**
               * 1.数据库配置(设置数据源)
               配置数据库连接以及需要使用的字段
               这里配置的是PG数据库,如果是MySQL需要修改
               */
              DataSourceConfig.Builder dataSourceConfigBuilder = new DataSourceConfig.Builder(JDBC_URL, JDBC_USER_NAME,
                      JDBC_PASSWORD)
                      .dbQuery(new PostgreSqlQuery())
                      .typeConvert(new PostgreSqlTypeConvert())
                      .keyWordsHandler(new PostgreSqlKeyWordsHandler());
      
      
              FastAutoGenerator fastAutoGenerator = FastAutoGenerator.create(dataSourceConfigBuilder);
      
      
              /**
               * 2.全局配置
               */
              fastAutoGenerator.globalConfig(
                      globalConfigBuilder -> globalConfigBuilder
                              .fileOverride()     // 覆盖已生成文件
                              .disableOpenDir()   // 不打开生成文件目录
                              .outputDir(projectPath + "/src/main/java") // 指定输出目录,注意斜杠的表示
                              .author("hanbo") // 设置注释的作者
                              .commentDate("yyyy-MM-dd HH:mm:ss") // 设置注释的日期格式
                              .dateType(DateType.TIME_PACK)   // 使用java8新的时间类型
      //                        .enableSwagger()    // 开启swagger文档
              );
      
              /**
               日期类型 DateType
               DateType.ONLY_DATE 使用 java.util.date包下的 Date
               DateType.SQL_PACK 使用 java.sql包下的 Date
               DateType.TIME_PACK   因为会使用 java.time.LocalDateTime jdk1.8以上才支持  (推荐使用)
               */
      
      
              /**
               * 3.包配置
               */
              fastAutoGenerator.packageConfig(
                      packageConfigBuilder -> packageConfigBuilder
                              .parent(PACKAGE_NAME)   // 设置父包名
                              // .moduleName(MODULE_NAME) // 设置父包模块名
                              .entity("entity") // 设置MVC下各个模块的包名
                              .mapper("mapper")
                              .service("service")
                              .serviceImpl("service.impl")
                              .controller("controller")
                              .xml( "\\src\\main\\resources\\mapper") // 设置XML资源文件的目录
                              .pathInfo(Collections.singletonMap(OutputFile.xml, projectPath + "\\src\\main\\resources\\mapper"))// 设置XML资源文件的目录
      
              );
      
      
      
              /**
               * 4.策略配置
               */
              fastAutoGenerator.strategyConfig(
                      strategyConfigBuilder -> strategyConfigBuilder
                              .enableCapitalMode()    // 开启大写命名
                              .enableSkipView()   // 开启跳过视图
                              .disableSqlFilter() // 禁用sql过滤
                              .addInclude(TBL_NAMES)  // 设置需要生成的表名
                              .addTablePrefix(TABLE_PREFIX)   // 设置过滤表前缀
              );
      
      
              /**
               * 4.1 Entity策略配置
               */
              fastAutoGenerator.strategyConfig(
                      strategyConfigBuilder -> strategyConfigBuilder.entityBuilder()
                              .enableTableFieldAnnotation()   // 生成实体时生成字段的注解,包括@TableId注解等---
                              .naming(NamingStrategy.underline_to_camel)  // 数据库表和字段映射到实体的命名策略,为下划线转驼峰
                              .columnNaming(NamingStrategy.underline_to_camel)
                              .idType(IdType.AUTO)    // 全局主键类型为AUTO(自增)
                              .enableLombok() // 支持lombok开启注解
                              .logicDeleteColumnName("deleted")   // 逻辑删除字段名(数据库)
                              .logicDeletePropertyName("deleted") // 逻辑删除属性名(实体)
                              .addTableFills(new Column("create_time", FieldFill.INSERT)) // 自动填充配置  create_time  update_time 两种方式
                              .addTableFills(new Property("updateTime", FieldFill.INSERT_UPDATE))
                              .versionColumnName("version")   // 开启乐观锁
                              .disableSerialVersionUID()  // 禁用生成 serialVersionUID,默认值:true
                              .enableChainModel() // 开启实体类链式编程
                              .formatFileName("%sEntity") // 实体名称格式化为XXXEntity   formatFileName("%sEntity")
                      .enableTableFieldAnnotation()
                      .enableFileOverride()
      
              );
      
              /**
               * 4.2 Controller策略配置
               */
              fastAutoGenerator.strategyConfig(
                      strategyConfigBuilder -> strategyConfigBuilder.controllerBuilder()
                              .enableRestStyle()  // 开启生成@RestController控制器
                              .enableHyphenStyle()    // 开启驼峰转连字符 localhost:8080/hello_id_2
              );
      
              /**
               * 4.3 Service策略配置
               格式化service接口和实现类的文件名称,去掉默认的ServiceName前面的I ----
               */
              fastAutoGenerator.strategyConfig(
                      strategyConfigBuilder -> strategyConfigBuilder.serviceBuilder()
                              .formatServiceFileName("I%sService")
                              .formatServiceImplFileName("%sServiceImpl"));
      
              /**
               * 4.4 Mapper策略配置
               格式化 mapper文件名,格式化xml实现类文件名称
               */
              fastAutoGenerator.strategyConfig(
                      strategyConfigBuilder -> strategyConfigBuilder.mapperBuilder()
                              .enableMapperAnnotation()   // 开启 @Mapper 注解
                              .formatMapperFileName("%sMapper")
                              .formatXmlFileName("%sMapper"));
      
              /** 5.生成代码
               *
               */
              // fastAutoGenerator.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
              fastAutoGenerator.execute();
      
          }
      }
      
      • 1
      • 2
      • 3
      • 4
      • 5
      • 6
      • 7
      • 8
      • 9
      • 10
      • 11
      • 12
      • 13
      • 14
      • 15
      • 16
      • 17
      • 18
      • 19
      • 20
      • 21
      • 22
      • 23
      • 24
      • 25
      • 26
      • 27
      • 28
      • 29
      • 30
      • 31
      • 32
      • 33
      • 34
      • 35
      • 36
      • 37
      • 38
      • 39
      • 40
      • 41
      • 42
      • 43
      • 44
      • 45
      • 46
      • 47
      • 48
      • 49
      • 50
      • 51
      • 52
      • 53
      • 54
      • 55
      • 56
      • 57
      • 58
      • 59
      • 60
      • 61
      • 62
      • 63
      • 64
      • 65
      • 66
      • 67
      • 68
      • 69
      • 70
      • 71
      • 72
      • 73
      • 74
      • 75
      • 76
      • 77
      • 78
      • 79
      • 80
      • 81
      • 82
      • 83
      • 84
      • 85
      • 86
      • 87
      • 88
      • 89
      • 90
      • 91
      • 92
      • 93
      • 94
      • 95
      • 96
      • 97
      • 98
      • 99
      • 100
      • 101
      • 102
      • 103
      • 104
      • 105
      • 106
      • 107
      • 108
      • 109
      • 110
      • 111
      • 112
      • 113
      • 114
      • 115
      • 116
      • 117
      • 118
      • 119
      • 120
      • 121
      • 122
      • 123
      • 124
      • 125
      • 126
      • 127
      • 128
      • 129
      • 130
      • 131
      • 132
      • 133
      • 134
      • 135
      • 136
      • 137
      • 138
      • 139
      • 140
      • 141
      • 142
      • 143
      • 144
      • 145
      • 146
      • 147
      • 148
      • 149
      • 150
      • 151
      • 152
      • 153
      • 154
      • 155
      • 156
      • 157
      • 158
      • 159
      • 160
      • 161
      • 162
      • 163
      • 164
      • 165
      • 166
      • 167
      • 168
      • 169
      • 170
      • 171
      • 172
      • 173
      • 174
  • 相关阅读:
    Spring - 框架相关内容3(Spring注解式开发)
    Nodejs安装及常见问题
    【人大金仓】迁移MySql数据库到人大金仓,出现sys_config表重复
    App Inventor 2 实现Ascii码转换(Ascii编码与解码)
    Spring Framework 6中的新功能和增强功能
    一行代码为特定状态绑定SwiftUI视图动画
    从0开始搭建vue2管理后台基础模板
    “会不会问为什么”是人机间的根本差异
    软件测试面试题及答案解析,2022最强版
    常用面试/笔试开源小项目61~70
  • 原文地址:https://blog.csdn.net/GISuuser/article/details/133916283