MyBatisPlus逆向工程

MyBatisPlus逆向工程

一、创建Springboot工程

二、引入pom依赖

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.mao</groupId>
    <artifactId>TestMybatisPlus</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>TestMybatisPlus</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        <spring-boot.version>2.6.5</spring-boot.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <!-- springmvc -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.4.2</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.projectlombok/lombok -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.12</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.xml.bind</groupId>
            <artifactId>jaxb-api</artifactId>
            <version>2.3.0</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-impl</artifactId>
            <version>2.3.0</version>
        </dependency>
        <dependency>
            <groupId>com.sun.xml.bind</groupId>
            <artifactId>jaxb-core</artifactId>
            <version>2.3.0</version>
        </dependency>
        <dependency>
            <groupId>javax.activation</groupId>
            <artifactId>activation</artifactId>
            <version>1.1.1</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.1.0</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>
    </dependencies>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-dependencies</artifactId>
                <version>${spring-boot.version}</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <version>2.4.1</version>
                <configuration>
                    <mainClass>com.mao.testmybatisplus.TestMybatisPlusApplication</mainClass>
                </configuration>
                <executions>
                    <execution>
                        <id>repackage</id>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

三、配置数据库连接(application.properties)

# 应用名称
spring.application.name=TestMybatisPlus

#设置开发环境
spring.profiles.active=dev

#数据库连接配置
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/maomao?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false
spring.datasource.username=mao
spring.datasource.password=123

#日志配置
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

四、配置插件注册(MyBatisPlusConfig.java)

package com.mao.testmybatisplus.config;

import com.baomidou.mybatisplus.core.injector.ISqlInjector;
import com.baomidou.mybatisplus.extension.injector.LogicSqlInjector;
import com.baomidou.mybatisplus.extension.plugins.OptimisticLockerInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor;
import com.baomidou.mybatisplus.extension.plugins.PerformanceInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Profile;

public class MyBatisPlusConfig {
    //注册乐观锁插件
    @Bean
    public OptimisticLockerInterceptor optimisticLockerInterceptor() {
        return new OptimisticLockerInterceptor();
    }

    //注册分页插件
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        PaginationInterceptor paginationInterceptor = new PaginationInterceptor();
        // 设置请求的页面大于最大页后操作, true调回到首页,false 继续请求  默认false
        // paginationInterceptor.setOverflow(false);
        // 设置最大单页限制数量,默认 500 条,-1 不受限制
        // paginationInterceptor.setLimit(500);
        // 开启 count 的 join 优化,只针对部分 left join
        // paginationInterceptor.setCountSqlParser(new JsqlParserCountOptimize(true));
        return paginationInterceptor;
    }

    //注册逻辑删除插件
    @Bean
    public ISqlInjector sqlInjector(){
        return new LogicSqlInjector();
    }

    //注册性能插件
    @Bean
    // 设置 dev test 环境开启
    @Profile({"dev","test"})
    public PerformanceInterceptor performanceInterceptor() {
        PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
        performanceInterceptor.setMaxTime(50);
        //ms,超过此处设置的ms则sql不执行
        //performanceInterceptor.setFormat(true);
        return performanceInterceptor;
    }
}

五、配置自动生成类(CodeGenerator.java)

1、控制台输入

public class CodeGenerator {
    //0、读取控制台内容
    public static String scanner(String tip) {
        Scanner scanner = new Scanner(System.in);
        StringBuilder help = new StringBuilder();
        help.append("请输入" + tip + ":");
        System.out.println(help.toString());
        if (scanner.hasNext()) {
            String ipt = scanner.next();
            if (StringUtils.isNotBlank(ipt)) {
                return ipt;
            }
        }
        throw new MybatisPlusException("请输入正确的" + tip + "!");
    }

    public static void main(String[] args) {
        //1、获取代码生成器对象
        AutoGenerator mpg = new AutoGenerator();

        //2、全局配置
        GlobalConfig gc = new GlobalConfig();
        //获取用户目录
        String projectPath = System.getProperty("user.dir");
        //代码生成路径
        gc.setOutputDir(projectPath + "/src/main/java");
        //作者信息
        gc.setAuthor("黄果");
        gc.setOpen(false);
        //生成ID类型
        gc.setIdType(IdType.AUTO);
        gc.setDateType(DateType.ONLY_DATE);
        gc.setFileOverride(true);
        //去掉Servce前缀
        gc.setServiceImplName("%sService");
        mpg.setGlobalConfig(gc);

        //3、数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/school?useUnicode=true&useSSL=false&characterEncoding=utf8");
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("123456");
        dsc.setDbType(DbType.MYSQL);
        mpg.setDataSource(dsc);

        //4、包配置
        PackageConfig pc = new PackageConfig();
        //设置模块名 com.iflytek.project
        //pc.setModuleName("project");  //没有第0步时此代码必写
        pc.setModuleName(scanner("模块名"));  //第0步省略时此代码可删

        //5、设置工程名
        pc.setParent("com.iflytek");
        //设置包名
        pc.setEntity("entity");
        pc.setMapper("mapper");
        pc.setService("service");
        pc.setController("controller");
        mpg.setPackageInfo(pc);


        //6、自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
                // to do nothing
            }
        };

        //7、如果模板引擎是 freemarker
        String templatePath = "/templates/mapper.xml.ftl";


        //8、自定义输出配置
        List<FileOutConfig> focList = new ArrayList<>();
        // 自定义配置会被优先输出
        focList.add(new FileOutConfig(templatePath) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输出文件名 , 如果你 Entity 设置了前后缀、此处注意 xml 的名称会跟着发生变化!!
                return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);

        //9、配置模板
        TemplateConfig templateConfig = new TemplateConfig();
        templateConfig.setXml(null);
        mpg.setTemplate(templateConfig);



        //10、策略配置
        StrategyConfig strategy = new StrategyConfig();
        //数据库表名优先映射,配置
        strategy.setInclude("person");
        //下划线转驼峰命名的策略
        strategy.setNaming(NamingStrategy.underline_to_camel);
        //数据库命名规则
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        //自动生成lombok注解
        strategy.setEntityLombokModel(true);
        //自动添加控制结构
        strategy.setRestControllerStyle(true);
        //自动添加逻辑删除策略
        strategy.setLogicDeleteFieldName("deleted");

        //11、设置自动填充策略
        TableFill gmtCreatereate = new TableFill("gmt_create", FieldFill.INSERT);
        //设置自动更新时间策略
        TableFill gmtModifiedodified = new TableFill("gmt_modified", FieldFill.UPDATE);
        //获取自动填充对象
        ArrayList<TableFill> tableFills = new ArrayList<>();
        //添加填充策略
        tableFills.add(gmtCreatereate);
        tableFills.add(gmtModifiedodified);
        strategy.setTableFillList(tableFills);

        //12、设置乐观锁策略
        strategy.setVersionFieldName("version");
        //设置Restful风格
        strategy.setRestControllerStyle(true);
        //设置连接请求 http://localhost:8080/hello_id_2
        strategy.setControllerMappingHyphenStyle(true);
        //第0步省略,此行代码可删
        strategy.setInclude(scanner("表名,多个英文逗号分割").split(","));
        mpg.setStrategy(strategy);
        mpg.execute();
    }
}

2、无控制台输入

package com.mao;

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) {
            //1、获取代码生成器对象
            AutoGenerator mpg = new AutoGenerator();

            //2、全局配置
            GlobalConfig gc = new GlobalConfig();
            //获取用户目录
            String projectPath = System.getProperty("user.dir");
            //代码生成路径
            gc.setOutputDir(projectPath + "/src/main/java");
            //作者信息
            gc.setAuthor("毛毛");
            gc.setOpen(false);
            //生成ID类型
            gc.setIdType(IdType.AUTO);
            gc.setDateType(DateType.ONLY_DATE);
            gc.setFileOverride(true);
            //去掉Servce前缀
            gc.setServiceImplName("%sService");
            mpg.setGlobalConfig(gc);

            //3、数据源配置
            DataSourceConfig dsc = new DataSourceConfig();
            dsc.setUrl("jdbc:mysql://127.0.0.1:3306/maomao?serverTimezone=UTC&useUnicode=true&characterEncoding=utf-8&useSSL=false");
            dsc.setDriverName("com.mysql.cj.jdbc.Driver");
            dsc.setUsername("mao");
            dsc.setPassword("123");
            dsc.setDbType(DbType.MYSQL);
            mpg.setDataSource(dsc);

            //4、包配置
            PackageConfig pc = new PackageConfig();
            //设置模块名 com.mao.project
            pc.setModuleName("project");  //没有第0步时此代码必写

            //5、设置工程名
            pc.setParent("com.mao");
            //设置包名
            pc.setEntity("pojo");
            pc.setMapper("mapper");
            pc.setService("service");
            pc.setController("controller");
            mpg.setPackageInfo(pc);


            //6、策略配置
            StrategyConfig strategy = new StrategyConfig();
            //数据库表名优先映射,配置
            strategy.setInclude("user","userinfo","student","tb_video_info");
            //下划线转驼峰命名的策略
            strategy.setNaming(NamingStrategy.underline_to_camel);
            //数据库命名规则
            strategy.setColumnNaming(NamingStrategy.underline_to_camel);
            //自动生成lombok注解
            strategy.setEntityLombokModel(true);
            //自动添加控制结构
            strategy.setRestControllerStyle(true);
            //自动添加逻辑删除策略
            strategy.setLogicDeleteFieldName("deleted");

            //7、设置自动填充策略
            TableFill gmtCreatereate = new TableFill("gmt_create", FieldFill.INSERT);
            //设置自动更新时间策略
            TableFill gmtModifiedodified = new TableFill("gmt_modified", FieldFill.UPDATE);
            //获取自动填充对象
            ArrayList<TableFill> tableFills = new ArrayList<>();
            //添加填充策略
            tableFills.add(gmtCreatereate);
            tableFills.add(gmtModifiedodified);
            strategy.setTableFillList(tableFills);

            //8、设置乐观锁策略
            strategy.setVersionFieldName("version");
            //设置Restful风格
            strategy.setRestControllerStyle(true);
            //设置连接请求 http://localhost:8080/hello_id_2
            strategy.setControllerMappingHyphenStyle(true);
            mpg.setStrategy(strategy);
            mpg.execute();
        }

}

参考自:(14条消息) MyBatis-Plus逆向工程,超详细_hg14150的博客-CSDN博客

posted @   没有烦恼的猫猫  阅读(198)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示