天天看點

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();
    }
}
           

部分代碼詳解

定義生成的實體類中日期類型

  • 預設生成日期格式為 LocalDateTime 和 LocalDate
  • mybatis-plus詳解
  • 自定義添加類型 添加設定 gc.setDateType(DateType.ONLY_DATE); 已實作 Date 類型.
  • mybatis-plus詳解
  • 可添加注解來實作前後端日期格式的轉換
  • @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
               
  • mybatis-plus詳解

主鍵政策

  • 預設雪花算法
@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部落格

自定義的模闆

mybatis-plus詳解
mybatis-plus詳解

新的代碼生成器

更多詳解看官網:

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();
    }

}