mybatis-plus-autoGenerator(自動コードジェネレータ構成)

45694 ワード

ヒント:文章が書き終わると、ディレクトリが自動的に生成されます.右側のヘルプドキュメントを生成する方法
mybatis-plus-AutoGenerator
  • 使用手順
  • 1.導入依存
  • 2.mybaitsconfig(ページングプラグイン、楽観ロックの構成)
  • 3.MetaObjectHandler(自動充填処理の構成)
  • 4.自動生成コード(AutoGenerator)
  • 5.application.yml構成
  • 6.JacksonConfig(雪花アルゴリズムの精度喪失問題を解決)
  • 7.Oracleシーケンス自己増加ポリシー
  • まとめ
  • 手順の使用
    1.導入依存
    コードは次のとおりです(例).
            <!-- mybatisPlus       -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-generator</artifactId>
                <version>3.3.1.tmp</version>
            </dependency>
            <!-- mybatisPlus Velocity      -->
            <dependency>
                <groupId>org.apache.velocity</groupId>
                <artifactId>velocity-engine-core</artifactId>
                <version>2.2</version>
            </dependency>
            <!-- mybatisPlus Freemarker      -->
            <dependency>
                <groupId>org.freemarker</groupId>
                <artifactId>freemarker</artifactId>
                <version>2.3.29</version>
            </dependency>
            <!--mysql  -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <!-- springfox-swagger-ui -->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger-ui</artifactId>
                <version>2.9.2</version>
            </dependency>
            <!-- springfox-swagger2 -->
            <dependency>
                <groupId>io.springfox</groupId>
                <artifactId>springfox-swagger2</artifactId>
                <version>2.9.2</version>
            </dependency>
            <!-- mybatis-plus    -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-boot-starter</artifactId>
                <version>3.4.2</version>
            </dependency>
            <!--mybatis-plus   -->
            <dependency>
                <groupId>com.baomidou</groupId>
                <artifactId>mybatis-plus-extension</artifactId>
                <version>3.4.2</version>
            </dependency>
    

    2.mybaitsconfig(ページングプラグイン、楽観ロックの構成)
    コードは次のとおりです(例).
    package com.config;
    
    import com.baomidou.mybatisplus.annotation.DbType;
    import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
    import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor;
    import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
    import org.mybatis.spring.annotation.MapperScan;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.transaction.annotation.EnableTransactionManagement;
    
    @MapperScan("com.mapper")
    @EnableTransactionManagement
    @Configuration
    public class MyBatisPlusConfig {
         
    
    
        @Bean
        public MybatisPlusInterceptor mybatisPlusInterceptor() {
         
            MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
            //     
            interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.H2));
            //        
            interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());
            return interceptor;
        }
    
    
    }
    

    3.MetaObjectHandler(自動充填処理の構成)
    コードは次のとおりです(例).
    package com.handler;
    
    import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler;
    import lombok.extern.slf4j.Slf4j;
    import org.apache.ibatis.reflection.MetaObject;
    import org.springframework.stereotype.Component;
    
    import java.time.LocalDateTime;
    
    
    @Slf4j
    @Component
    public class MyMetaObjectHandler implements MetaObjectHandler {
         
    
        @Override
        public void insertFill(MetaObject metaObject) {
         
            log.info("start insert fill ....");
            this.strictInsertFill(metaObject, "createTime", LocalDateTime.class, LocalDateTime.now());
            this.strictInsertFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
            // update     ,           
        }
        @Override
        public void updateFill(MetaObject metaObject) {
         
            log.info("start update fill ....");
            this.strictUpdateFill(metaObject, "updateTime", LocalDateTime.class, LocalDateTime.now());
        }
    }
    

    4.自動生成コード(AutoGenerator)
    コードは次のとおりです(例).
    package com;
    
    import com.baomidou.mybatisplus.annotation.DbType;
    import com.baomidou.mybatisplus.annotation.FieldFill;
    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.po.TableFill;
    import com.baomidou.mybatisplus.generator.config.rules.DateType;
    import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
    
    import java.util.ArrayList;
    
    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("  ");
            gc.setOpen(false);
            //     
            gc.setFileOverride(false);
            //  Service I  
            gc.setServiceName("%sService");
            //    
            gc.setIdType(IdType.ASSIGN_ID);
            //     Swagger2   
            gc.setSwagger2(true);
            mpg.setGlobalConfig(gc);
            gc.setDateType(DateType.TIME_PACK);
    
            //      
            DataSourceConfig dsc = new DataSourceConfig();
            dsc.setUrl("jdbc:mysql://localhost:3306/chen?useUnicode=true&useSSL=false&characterEncoding=utf8&serverTimezone=Asia/Shanghai");
            // dsc.setSchemaName("public");
            dsc.setDriverName("com.mysql.cj.jdbc.Driver");
            dsc.setUsername("root");
            dsc.setPassword("123");
            //     
            dsc.setDbType(DbType.MYSQL);
            mpg.setDataSource(dsc);
    
            //    
            PackageConfig pc = new PackageConfig();
            pc.setParent("com");
            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.setInclude("user");
            // localhost:8080/hello_id_2
            strategy.setControllerMappingHyphenStyle(true);
    
            //    
            strategy.setLogicDeleteFieldName("deleted");
            //       
            TableFill gmtCreate = new TableFill("create_time", FieldFill.INSERT);
            TableFill gmtModified = new TableFill("update_time", FieldFill.INSERT_UPDATE);
            ArrayList<TableFill> tableFills = new ArrayList<>();
            tableFills.add(gmtCreate);
            tableFills.add(gmtModified);
            strategy.setTableFillList(tableFills);
    
            //    
            strategy.setVersionFieldName("version");
    
            mpg.setStrategy(strategy);
            mpg.execute();
        }
    
    }
    

    5.application.yml構成
    コードは次のとおりです(例).
    #     
    spring.application.name=springboot-mybatis-plus
    #      WEB     
    server.port=8090
    
    spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
    spring.datasource.url=jdbc:mysql://127.0.0.1:3306/chen?serverTimezone=UTC
    spring.datasource.username=root
    spring.datasource.password=123
    
    mybatis-plus.type-aliases-package=com.entity
    #    (     )
    mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl
    mybatis-plus.global-config.db-config.logic-delete-value=1
    mybatis-plus.global-config.db-config.logic-not-delete-value=0
    

    6.JacksonConfig(雪花アルゴリズムの精度喪失問題を解決)
    コードは次のとおりです(例).
    package com.config;
    
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.module.SimpleModule;
    import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
    import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.context.annotation.Primary;
    import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder;
    
    @Configuration
    public class JacksonConfig {
         
    
        @Bean
        @Primary
        @ConditionalOnMissingBean(ObjectMapper.class)
        public ObjectMapper jacksonObjectMapper(Jackson2ObjectMapperBuilder builder) {
         
            ObjectMapper objectMapper = builder.createXmlMapper(false).build();
            //           JSON   
            SimpleModule simpleModule = new SimpleModule();
            //JSON Long ==> String
            simpleModule.addSerializer(Long.class, ToStringSerializer.instance);
            objectMapper.registerModule(simpleModule);
            return objectMapper;
        }
    }
    

    7.Oracleシーケンスの自己増加ポリシー
    Oracleのプライマリ・キーがnumberであり、短すぎて雪アルゴリズムを使用できない場合、ymlプロファイルを追加できません.
    #id    (oracle  )
    mybatis-plus:
      global-config:
        db-config:
          id-type: input
    

    エンティティークラスに追加:
    @KeySequence("Oracle         ")
    public class Vip implements Serializable {
         
        @ApiModelProperty(value = "    ")
        @TableId(value = "VID", type = IdType.INPUT)
        private Long vid;
    	***********************************    
       }
    

    beanを登録します.
        //     
        @Bean
        public OracleKeyGenerator oracleKeyGenerator(){
         
            return new OracleKeyGenerator();
        }
    

    補足:このフィールドがデータベース・テーブル内のフィールドではないことを注記で宣言します.
        @TableField(exist = false)
        private  String status;
    

    まとめ
    勤勉な菜鶏