`

mybatis-plus代码生成器,mybatis-plus3.4自动生成代码,mybatis-plus3.4分页

阅读更多

mybatis-plus代码生成器,mybatis-plus3.4自动生成代码,mybatis-plus3.4分页

 

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

©Copyright 蕃薯耀 2020-10-21

http://fanshuyao.iteye.com/

 

一、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);
    

    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

http://fanshuyao.iteye.com/

 

1
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics