MyBatis-Plus学习笔记(五)---代码自动生成


简介

MyBatis-Plus 的代码生成器是AutoGenerator ,通过 AutoGenerator 可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各个模块的代码,极大的提升了开发效率

使用步骤

1. 导入MyBatis-Plus相关依赖
  <!-- mybatisplus的依赖-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.0.5</version>
        </dependency>
           <!--MyBatis-Plus模板引擎-->
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.2</version>
        </dependency>
            <!--swagger依赖-->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>spring-boot-starter-swagger</artifactId>
            <version>1.5.1.RELEASE</version>
        </dependency>

模板引擎 依赖,MyBatis-Plus 支持 Velocity(默认)、Freemarker、Beetl,用户可以选择自己熟悉的模板引擎,如果都不满足您的要求,可以采用自定义模板引擎。
如果您选择了非默认引擎,需要在 AutoGenerator 中 设置模板引擎。

2. 项目的端口和连接数据库配置:
# 端口配置
server.port=8081
# 导入mysql的连接驱动
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.username=root
spring.datasource.password=123456
spring.datasource.url=jdbc:mysql://localhost:3306/mybatis_plus1?useUnicode=true&characterEncoding=UTF-8&useSSL=FALSE&serverTimezone=UTC
#useSSL是否使用安全连接
3. 添加配置类
//扫描mapper文件夹
@MapperScan("com.syp.mybatis.mapper")
@EnableTransactionManagement//事务的注解,自动管理事务,默认开启
@Configuration//声明这是一个配置类
public class MyBatisPlusConfig {

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

    //分页插件的配置:官网配置
    @Bean
    public PaginationInterceptor paginationInterceptor() {
        return new PaginationInterceptor();
    }


    //逻辑删除组件
    @Bean
    public ISqlInjector iSqlInjector(){
        return  new LogicSqlInjector();
    }

    //性能组件的配置
    @Bean
    @Profile({"dev","test"}) //设置dev和test,在相应的环境中开启,保证效率
    public PerformanceInterceptor performanceInterceptor(){
        PerformanceInterceptor performanceInterceptor = new PerformanceInterceptor();
        performanceInterceptor.setMaxTime(1000);//默认为毫秒设置SQL执行的最大时间,如果超过了该时间,就不执行了
        performanceInterceptor.setFormat(true);//是否开启格式化支持
        return performanceInterceptor;
    }
4. 编写代码生成器的类
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;

/**
 * @description:代码自动生成器
 * @return
 */

public class MyAutoCode {
    public static void main(String[] args) {
        //需要构建一个代码自动生成器的对象
        AutoGenerator autoGenerator = new AutoGenerator();

        //执行之前的配置策略
        //1. 全局配置
        GlobalConfig gcfig = new GlobalConfig();
        //1.1获取系统的一些属性
        //1.1.1 输出路径的配置
        String projectPath = System.getProperty("user.dir");//获取当前用户的目录,项目路径
        gcfig.setOutputDir(projectPath+"/src/main/java");//输出到该目录下的:/src/main/java

        //1.1.2 自动策略的配置
        gcfig.setAuthor("SYP");//所有的生成代码上面都会有作者
        gcfig.setOpen(false); //是否打开windows的资源管理器
        gcfig.setFileOverride(false);//是否覆盖之前已经生成的代码
        gcfig.setServiceName("%sService");//服务的名字,通过正则表达式去掉之前的I
        gcfig.setIdType(IdType.ID_WORKER);//id主键的的策略是默认的
        gcfig.setDateType(DateType.ONLY_DATE);//日期的类型,仅仅只是时间
        gcfig.setSwagger2(true);//是否自动配置Swagger文档

        //1.1.3 将全局配置丢到自动生成器中
        autoGenerator.setGlobalConfig(gcfig);

        //2 数据库,数据源的配置
        //2.1 数据源的配置
        DataSourceConfig dsConfig = new DataSourceConfig();
        dsConfig.setUrl("jdbc:mysql://localhost:3306/mybatis_plus1?useUnicode=true&characterEncoding=UTF-8&useSSL=FALSE&serverTimezone=UTC");
        dsConfig.setDriverName("com.mysql.cj.jdbc.Driver");//数据库的连接驱动
        dsConfig.setUsername("root");
        dsConfig.setPassword("123456");
        dsConfig.setDbType(DbType.MYSQL);//数据库的类型
        //2.2 将数据源丢入到自动生成器中
        autoGenerator.setDataSource(dsConfig);


        //3. 包的配置
        //3.1 包的配置,规定生成哪一些包,以及生成的包需要放在什么地方
        PackageConfig pkConfig = new PackageConfig();
        pkConfig.setModuleName("code");//模块名
        pkConfig.setParent("com.syp");//类的存放路径
        pkConfig.setEntity("entity");//实体类的包名
        pkConfig.setMapper("mapper");
        pkConfig.setService("service");
        pkConfig.setController("controller");
        //3.2 将配置丢入到自动生成器中
        autoGenerator.setPackageInfo(pkConfig);

        //4. 策略配置
        // 策略配置
        StrategyConfig strategy = new StrategyConfig();

//        strategy.setInclude("user");//设置需要映射的一些表名,包含的表名: 生成一张表
        strategy.setInclude("user","student","teacher");//设置需要映射的一些表名,包含的表名: 生成多张表

        strategy.setNaming(NamingStrategy.underline_to_camel);//设定包的命名规则:下划线转驼峰命名
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);//数据库字段策略,列的命名规则
//        strategy.setSuperEntityClass("你自己的父类实体,没有就不用设置!");
        strategy.setEntityLombokModel(true); //是否使用lombok开启注解

        strategy.setLogicDeleteFieldName("deleted");//逻辑删除的名字,
                //有逻辑删除字段,设计自动填充配置
        TableFill createTime = new TableFill("create_time", FieldFill.INSERT);//自动填充修改时间,国际规范中字段名为:gmt_create
        TableFill updateTime = new TableFill("update_time", FieldFill.INSERT_UPDATE);//自动填充更新时间,国际规范中字段名为:gmt_modified
                //将自动填充设置到自动生成的策略里面
        ArrayList<TableFill> tableFillList = new ArrayList<>();//创建一个list来添加策略
        tableFillList.add(createTime);//将创建时候的策略加入到list中
        tableFillList.add(updateTime);//将更新时候的策略加入到list中
        //将配置丢入到策略中
        strategy.setTableFillList(tableFillList);

        //5.乐观锁的策略配置
        strategy.setVersionFieldName("version");//乐观锁的配置

        strategy.setRestControllerStyle(true);//设置驼峰命名格式
        strategy.setControllerMappingHyphenStyle(true);//转换为下划线命名:localhost:8081/hellotest_id_1

        //将策略丢入到自动生成器对象 中
        autoGenerator.setStrategy(strategy);

        //6. 执行构造器
        autoGenerator.execute();//执行代码构造器,在执行之前需要配置一些策略
    }
}

5. 更改自己的配置

只需要在更改自己的数据库配置,之后更改需要生成的相关的表名:

strategy.setInclude("user","student","teacher");
6. 运行自动生成相关的代码

结果:
数据库表结构:

user表:

在这里插入图片描述

teacher表:

在这里插入图片描述
运行结果:
在这里插入图片描述

在这里插入图片描述
代码结构:
在这里插入图片描述
到此代码已经自动生成完毕,之后既可以根据自己的需要进行修改,添加相应的功能

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值