1. 程式人生 > 實用技巧 >mybatis-plus程式碼生成器,mybatis-plus3.4自動生成程式碼,mybatis-plus3.4分頁

mybatis-plus程式碼生成器,mybatis-plus3.4自動生成程式碼,mybatis-plus3.4分頁

mybatis-plus程式碼生成器,mybatis-plus3.4自動生成程式碼,mybatis-plus3.4分頁

================================

©Copyright 蕃薯耀 2020-10-21

https://www.cnblogs.com/fanshuyao/

一、Jar包依賴

    <properties>
        <!-- 構建時編碼 -->    
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<!-- 輸出時編碼 --> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!-- JDK版本 --> <java.version>1.8</java.version> <mybatisPlus.version>3.4.0</mybatisPlus.version> <shardingsphere.version
>4.1.1</shardingsphere.version> </properties>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>
        
        <dependency>
            <groupId>
org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.1.2</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-freemarker</artifactId> </dependency> <dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.13</version> </dependency> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-boot-starter</artifactId> <version>${mybatisPlus.version}</version> </dependency> <!--mybatis-plus 碼生成器 新增 模板引擎依賴 這個需要增加模板引擎依賴,如freemarker--> <dependency> <groupId>com.baomidou</groupId> <artifactId>mybatis-plus-generator</artifactId> <version>${mybatisPlus.version}</version> </dependency> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <scope>provided</scope> </dependency>

二、程式碼生成器程式碼:

import java.util.Date;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.lang3.StringUtils;
import org.apache.log4j.Logger;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
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.converts.OracleTypeConvert;
import com.baomidou.mybatisplus.generator.config.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.DbColumnType;
import com.baomidou.mybatisplus.generator.config.rules.IColumnType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.FreemarkerTemplateEngine;
import com.lqy.ss.utils.DateUtils;
import com.lqy.ss.utils.StrUtils;

public class CodeGenerator {

    private static Logger log = Logger.getLogger(CodeGenerator.class);
    
    //使用者名稱:SUPLIS 密碼:plansuplis
    //使用者:SUPPLAN 密碼:plansup
    //使用者:CSGX 密碼:gxcs
    //使用者:CSGXUSER 密碼:usercsgx
    //使用者:PLATFORM 密碼:
    private static final String jdbcUserName = "root";
    private static final String jdbcPassword = "root";
    
    //表名,可以設定多個,通過英文逗號分隔
    //資料庫使用者密碼,必須使用表的所有者(Owner)
    private static final String tables = "my_user";
    private static final String moduleName = "shardingSphere.";//模組名稱,分業務,不要漏最後面一個點
    
    private static final String tablePrefix = "";//表名字首
    
    /**
     * 程式碼生成器的配置常量
     */
    private static final String outPutDir = "/src/main/java";
    //Oracle:jdbc:oracle:thin:@192.168.110.2:1521:ORAPLAN
    //mysql:jdbc:mysql://localhost:3306/mydbone?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8&pinGlobalTxToPhysicalConnection=true&autoReconnect=true
    private static final String jdbcUrl = "jdbc:mysql://localhost:3306/sh1?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8&pinGlobalTxToPhysicalConnection=true&autoReconnect=true";
    
    //oracle.jdbc.OracleDriver
    //oracle.jdbc.driver.OracleDriver
    //com.mysql.cj.jdbc.Driver
    private static final String jdbcDriverClassName = "com.mysql.jdbc.Driver";
    
    private static final String parentPackage = "com.xxx.ss.biz";
    
    private static final String authorName = jdbcUserName;//作者
    
    private static final String mapperPattern = "%sDao";//dao檔案命名格式
    private static final String mapperName = moduleName + "dao";
    private static final String xmlName = mapperName;
    
    private static final String serviceNamePattern = "%sService";//Service檔案命名格式
    private static final String serviceName =  moduleName + "service";
    private static final String implName =  moduleName + "service.impl";
    private static final String pojoName =  moduleName + "entity";
    private static final String controllerName =  moduleName + "controller";
    
    
    // 當前工程路徑   配合outPutDir使用,例如多模組開發 Demo/test1,Demo/test2
    // projectPath拿到的是Demo路徑,把outPutDir設定成/test1即可
    private static final String projectPath = System.getProperty("user.dir");
    
    public static void generator() {
        
        // 全域性配置
        GlobalConfig gc = new GlobalConfig();
        gc.setOutputDir(projectPath + outPutDir);
        gc.setAuthor(authorName);
        gc.setBaseResultMap(true);
        gc.setBaseColumnList(true);
        // 覆蓋生成的檔案
        gc.setFileOverride(true);
        gc.setServiceName(serviceNamePattern);
        gc.setMapperName(mapperPattern);
        gc.setEnableCache(false);//是否在xml中新增二級快取配置:false不生成
        gc.setOpen(false);//true:生成檔案後,自動開啟資料夾
        gc.setDateType(DateType.ONLY_DATE);//設定時間型別
        //gc.setSwagger2(true);//設定生成Swagger2 Api註解
        
        // 資料來源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setDbType(DbType.MYSQL);
        
        //設定型別轉換,預設不太好
        //這個是Oracle的
        /*
        dsc.setTypeConvert(new OracleTypeConvert() {

            @Override
            public IColumnType processTypeConvert(GlobalConfig globalConfig, String fieldType) {
                String fileTypeLower = fieldType.toLowerCase();
                if(fileTypeLower.contains("number")) {
                    //System.out.println("fileTypeLower = " + fileTypeLower);
                    
                    if(fileTypeLower.equals("number")) {//預設長度為38位,佔用22個位元組空間
                        return DbColumnType.LONG;
                    }
                    if(fileTypeLower.contains(",")) {
                        return DbColumnType.DOUBLE;
                    }else {
                        String num = StrUtils.getNumberText(fileTypeLower);
                        int numInt = Integer.parseInt(num);
                        if(numInt == 1) {
                            return DbColumnType.BYTE;
                        }
                        if(numInt > 1 && numInt <=4) {
                            return DbColumnType.SHORT;
                        }
                        if(numInt > 4 && numInt <=9) {
                            return DbColumnType.INTEGER;
                        }
                        if(numInt > 9 && numInt <=18) {
                            return DbColumnType.LONG;
                        }
                        if(numInt > 18) {
                            return DbColumnType.BIG_DECIMAL;
                        }
                        return DbColumnType.LONG;
                    }
                }
                return super.processTypeConvert(globalConfig, fieldType);
            }
        });
        */
        dsc.setUrl(jdbcUrl);
        dsc.setDriverName(jdbcDriverClassName);
        dsc.setUsername(jdbcUserName);
        dsc.setPassword(jdbcPassword);
        // dsc.setSchemaName("public");
        
        
        // 包配置
        PackageConfig pc = new PackageConfig();
        //pc.setModuleName(scanner("模組名"));
        pc.setParent(parentPackage);
        
        pc.setParent(parentPackage);
        pc.setMapper(mapperName);
        pc.setEntity(pojoName);
        pc.setService(serviceName);
        pc.setController(controllerName);
        pc.setServiceImpl(implName);
        pc.setXml(xmlName);
        
        
        
        
        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        //strategy.setSuperEntityClass("你自己的父類實體,沒有就不用設定!");
        strategy.setEntityLombokModel(false);//設定Lombok模式
        strategy.setRestControllerStyle(true);
        strategy.setControllerMappingHyphenStyle(false);
        // 公共父類
        //strategy.setSuperControllerClass("你自己的父類控制器,沒有就不用設定!");
        // 寫於父類中的公共欄位
        //strategy.setSuperEntityColumns("id");
        strategy.setControllerMappingHyphenStyle(true);
        if(!StringUtils.isBlank(tablePrefix)) {
            strategy.setTablePrefix(tablePrefix);
        }
        //strategy.entityTableFieldAnnotationEnable(true);
        strategy.setEntityTableFieldAnnotationEnable(true);
        strategy.setInclude(tables.toUpperCase().split(","));//Oracle資料,表名一定要大寫,且表名要對應建立的使用者,否則不生成程式碼
        
        
        InjectionConfig injectionConfig = new InjectionConfig() {
            
            @Override
            public void initMap() {
                Map<String, Object> map = new HashMap<String, Object>();
                map.put("abc", this.getConfig().getGlobalConfig().getAuthor() + "-mp");
                this.setMap(map);
            }
        };
        
        
     // 程式碼生成器
        AutoGenerator mpg = new AutoGenerator();
        mpg.setGlobalConfig(gc);
        mpg.setDataSource(dsc);
        mpg.setPackageInfo(pc);
        mpg.setStrategy(strategy);
        mpg.setCfg(injectionConfig);
        mpg.setTemplateEngine(new FreemarkerTemplateEngine());
        mpg.execute();
        log.info("程式碼生成已經完成。" + DateUtils.formatDateTime(new Date()));
    }
    
    
    public static void main(String[] args) {
        generator();
    }
    
}

三、mybatis-plus3.4.0分頁配置及Oracle序列增長配置

mybatis-plus3.4.0的分頁發生了變化的,具體如下:

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;

@Configuration
public class MybatisPlusConfig {

    private static Logger log = LoggerFactory.getLogger(MybatisPlusConfig.class);
    
    @Bean
    public MybatisPlusInterceptor mybatisPlusInterceptor() {
        log.info("初始化分頁外掛…");
        MybatisPlusInterceptor mybatisPlusInterceptor = new MybatisPlusInterceptor();
        mybatisPlusInterceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
        return mybatisPlusInterceptor;
    }
    
    
    /**
     * 注入oracleKeyGenerator,自動生成序列主鍵
     * @return
     */
    /*
    @Bean
    public OracleKeyGenerator oracleKeyGenerator(){
        log.info("初始化Oracle主鍵生成策略…");
        return new OracleKeyGenerator();
    }
    */
    
    
}

================================

©Copyright 蕃薯耀 2020-10-21

https://www.cnblogs.com/fanshuyao/