mybatis-plus详解

# 旧的代码生成

记得导包,依赖如下

  
  <!-- mybatis-plus -->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.1</version>
        </dependency>
        <!-- 代码生成器 一个是新的代码生成器,一个是旧的问题-->
<!--        <dependency>-->
<!--            <groupId>com.baomidou</groupId>-->
<!--            <artifactId>mybatis-plus-generator</artifactId>-->
<!--            <version>3.4.1</version>-->
<!--        </dependency>-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.1</version>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity</artifactId>
            <version>1.7</version>
        </dependency>
        <dependency>
            <groupId>org.apache.velocity</groupId>
            <artifactId>velocity-engine-core</artifactId>
            <version>2.3</version>
        </dependency>


代码


import com.baomidou.mybatisplus.annotation.DbType;
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.rules.DateType;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import org.junit.jupiter.api.Test;

/**
 * @description:
 * @author: HaHa
 * @time: 2022/4/19 20:04
 */
public class AutoMain {
    public static void main(String[] args) {
        AutoGenerator generator = new AutoGenerator();

//        设置全局配置
        GlobalConfig config = new GlobalConfig();
        String s = System.getProperty("user.dir");
        config.setOutputDir(s+"/src/main/java");
        config.setAuthor("mybatis自动生成");
        config.setOpen(false);
        config.setFileOverride(false);  //是否文件覆盖
        config.setSwagger2(true);
        config.setServiceName("%sService");  //去掉Service前面的I
        config.setDateType(DateType.ONLY_DATE);//定义生成的实体类中日期类型
        generator.setGlobalConfig(config);

        //2、设置数据源
        DataSourceConfig dsc = new DataSourceConfig();
        dsc.setUrl("jdbc:mysql://localhost:3306/admin-springboot?serverTimezone=UTC");
        dsc.setDriverName("com.mysql.cj.jdbc.Driver");
        dsc.setUsername("root");
        dsc.setPassword("123456789");
        dsc.setDbType(DbType.MYSQL);
        generator.setDataSource(dsc);

        //3、包的配置
        PackageConfig pc = new PackageConfig();
        pc.setModuleName("edu"); //模块名
        // 包:com.lu.edu
        pc.setParent("com.lu");
        pc.setEntity("entity");
        pc.setMapper("mapper");
        pc.setService("service");
        pc.setController("controller");
        generator.setPackageInfo(pc);


        //4、策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setInclude("sys_user"); // 设置要映射的表名
         //数据库表 映射到实体的命名策略
        strategy.setNaming(NamingStrategy.underline_to_camel);
        //数据库表字段 映射到实体的命名策略
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        //生成实体时去掉表前缀
        strategy.setTablePrefix(pc.getModuleName() + "_");
        strategy.setEntityLombokModel(true); // 自动lombok;
        strategy.setRestControllerStyle(true); //restful api风格控制器
        strategy.setControllerMappingHyphenStyle(true); //url中驼峰转连字符


        strategy.setLogicDeleteFieldName("deleted");  //逻辑字段,数据库字段里面有deteted,然后自动配置
        // 自动填充配置
        TableFill gmtCreate = new TableFill("gmt_create", FieldFill.INSERT);
        TableFill gmtModified = new TableFill("gmt_modified",FieldFill.INSERT_UPDATE);
        ArrayList<TableFill> tableFills = new ArrayList<>();
        tableFills.add(gmtCreate);
        tableFills.add(gmtModified);
        strategy.setTableFillList(tableFills);
        // 乐观锁
        strategy.setVersionFieldName("version");
        strategy.setRestControllerStyle(true);
        strategy.setControllerMappingHyphenStyle(true); //下划线相当于/


        generator.setStrategy(strategy);
        generator.execute();
    }
}

部分代码详解

定义生成的实体类中日期类型

  • 默认生成日期格式为 LocalDateTimeLocalDate


  • image-20220724092055627



  • 自定义添加类型 添加设置 gc.setDateType(DateType.ONLY_DATE); 已实现 Date 类型.

  • image-20220724092306265


  • 可添加注解来实现前后端日期格式的转换

  • @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
    
  • image-20220724092423168


主键策略

  • 默认雪花算法
@TableId(type = IdType.INPUT)    自行输入id
@TableId(type = IdType.AUTO)     主键自增
@TableId(type = IdType.ASSIGN_ID)  雪花算法
@TableId(type = IdType.ASSIGN_UUID)

乐观锁

  • 参考即可

(91条消息) mybatis plus的乐观锁使用总结_霉男纸的博客-CSDN博客_mybatisplus乐观锁

(91条消息) mybatis-plus的乐观锁_zhuzai233的博客-CSDN博客

自定义的模板

新的代码生成器

更多详解看官网:
https://baomidou.com/pages/779a6e/#使用

  
import com.baomidou.mybatisplus.generator.FastAutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.OutputFile;

import java.util.Collections;

/**
 * @description:
 * @author: HaHa
 * @time: 2022/4/29 16:54
 */
public class AutoFast {
    public static void main(String[] args) {
        generate();
    }

    private static void generate() {
//        UTC是根据原子钟来计算时间,而GMT是根据地球的自转和公转来计算时间
        String url="jdbc:mysql://localhost:3306/admin-springboot?serverTimezone=GMT%2b8";
        String username="root";
        String password="123456789";
        String outputDir = System.getProperty("user.dir");
        String parentPackage="com";

        DataSourceConfig.Builder database = new DataSourceConfig.Builder(url, username, password);
        FastAutoGenerator.create(database)
                .globalConfig(builder -> {
                    builder.author("雨同我")
                            
                            .enableSwagger()
                            .fileOverride()
                            .outputDir(outputDir+"/src/main/java/");
                })
                .packageConfig(builder -> {
                    builder.parent(parentPackage)
                    .moduleName(null)
                    .pathInfo(Collections.singletonMap(OutputFile.mapperXml, outputDir+"/src/main/resources/mapper/"));
                })
                .strategyConfig(builder -> {
                    builder.entityBuilder().enableLombok();
//                    builder.mapperBuilder().enableMapperAnnotation().build();   //这个是在每个mapper上面添加@Mapper
                    builder.controllerBuilder().enableHyphenStyle()  // 开启驼峰转连字符
                            .enableRestStyle();  // 开启生成@RestController 控制器
                    builder.addInclude("sys_user") // 设置需要生成的表名
                            .addTablePrefix("t_", "sys_"); // 设置过滤表前缀
                })
                //.templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .execute();
    }

}

posted @ 2022-07-24 09:57  雨同我  阅读(301)  评论(0编辑  收藏  举报