mybatis-plus详解


旧的代码生成

记得导包,依赖如下

  
  
        
            com.baomidou
            mybatis-plus-boot-starter
            3.5.1
        
        





        
            com.baomidou
            mybatis-plus-generator
            3.5.1
        
        
            org.apache.velocity
            velocity
            1.7
        
        
            org.apache.velocity
            velocity-engine-core
            2.3
        


代码


/**
 * @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.setLogicDeleteFieldName("deleted");  //逻辑字段,数据库字段里面有deteted,然后自动配置
        // 自动填充配置
        TableFill gmtCreate = new TableFill("gmt_create", FieldFill.INSERT);
        TableFill gmtModified = new TableFill("gmt_modified",FieldFill.INSERT_UPDATE);
        ArrayList 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




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


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

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

主键策略

  • 默认雪花算法
@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();
    }

}