欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MyBatis-plus實現(xiàn)逆向生成器

 更新時間:2022年08月19日 08:19:57   作者:中國胖子風(fēng)清揚  
本文主要介紹了MyBatis-plus實現(xiàn)逆向生成器,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

1、前言

在日常的Spring Boot項目開發(fā)中,我們都會建立幾個固有的包,分別是Controller、entity(pojo)、dao、service、serviceimpl。

在單個Spring Boot項目中,用手動建立倒是簡單,但是在Spring Cloud項目中,會建立許多的Spring Boot項目,如果此時還使用手動建立這幾個固有的包,那么就有點耽誤時間了。

作為程序猿的我們,怎么可能會手動做這種重復(fù)而又浪費時間的事呢!那么Mybatis-plus所提供的逆向生成器就發(fā)揮出了我們想要的效果。

2、實現(xiàn)逆向生成器

2.1、導(dǎo)入依賴

<!--Spring Boot的啟動依賴-->
<dependency>
	<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>

<!--Mybatis-plus啟動依賴-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-boot-starter</artifactId>
    <version>3.5.2</version>
</dependency>

<!--Mybatis-plus逆向生成器依賴-->
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-generator</artifactId>
    <version>3.4.1</version>
</dependency>

<!--數(shù)據(jù)庫連接依賴-->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <scope>runtime</scope>
</dependency>

<!--Lombok依賴-->
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>

<!--Mybatis-plus逆向生成器的Freemarker模板引擎-->
<dependency>
    <groupId>org.freemarker</groupId>
    <artifactId>freemarker</artifactId>
</dependency>

mybatis-plus-generator這個依賴要使用3.5.0版本以下的,我使用的是3.4.1版本,因為這個依賴在3.5.0以后就進行了修改,需要使用相關(guān)類的Builder類來構(gòu)建對象,然后Builder類所提供的方法又不多,所以我個人覺得使用起來不太方便。
導(dǎo)入數(shù)據(jù)庫的依賴,是因為在逆向生成的過程中,Mybatis-plus會根據(jù)指定的表來生成相應(yīng)的實力類對象以及其他層的配置。

導(dǎo)入模板引擎依賴,可以根據(jù)模板引擎來規(guī)定初始化生成的包的模式。

2.2、項目結(jié)構(gòu)

項目中只有一個Utils包用來存放相關(guān)的工具類,而我也把逆向生成器類放在了這個包里面,如上圖所示的MybatisPlusGenerate類。
我習(xí)慣了使用Spring Boot項目,所以這里的演示也是使用了Spring Boot項目,對spring Boot不熟悉的猿友可以使用Maven項目。

2.3、MybatisPlusGenerate類

public class MybatisPlusGenerate {

    private static Scanner scanner = new Scanner(System.in);
    // 獲得當(dāng)前項目的路徑,如上圖就是 F:stady_program/Mybatis_plus逆向工程
    private final static String PROJECT_PATH = System.getProperty("user.dir");
    
}

2.3.1、獲取用戶在控制臺輸入的表名

 public static void scannerTableName(String parentPackageName){
        List<String> tableList = new ArrayList<>(); // 使用集合來存儲用戶輸入的多個表的名稱
        System.out.println("<=================表名列表===============>");
        while(!scanner.hasNext("end")){ // 當(dāng)用戶輸入end后結(jié)束輸入
            String tableName = scanner.next();
            if(tableName.equals("")){
                throw new RuntimeException("所輸入的表名不合法");
            }
            tableList.add(tableName); //將表名添加到集合中。
        }
        // 通過表名和當(dāng)前項目的目錄來生成相應(yīng)的包和類。
        for(String name : tableList) generateInformationByTableName(parentPackageName,name);
  }

當(dāng)前項目的目錄就是指當(dāng)前Spring Boot項目中啟動類所在的包的名稱。也就是上圖所示的com.example.mybatis_plus_reverse包。

2.3.2、數(shù)據(jù)源的配置

 private static DataSourceConfig dataSourceConfig(){
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/mybatis?useUnicode=true&useSSL=false&serverTimezone=Asia/Shanghai")
                .setUsername("root")
                .setPassword("123456")
                .setDriverName("com.mysql.cj.jdbc.Driver").setDbType(DbType.MYSQL);

        return dataSourceConfig;
 }

數(shù)據(jù)源的配置這就不用說了吧,這個配置沒什么難度。

2.3.3、全局屬性的配置

 private static GlobalConfig globalConfig(){
        GlobalConfig globalConfig = new GlobalConfig();
        globalConfig.setOutputDir(PROJECT_PATH + "/src/main/java")// 輸出文件路徑
                .setAuthor("Time Travel")// 設(shè)置作者名字
                .setOpen(false)// 是否打開資源管理器
                .setFileOverride(true)// 是否覆蓋原來生成的
                .setIdType(IdType.AUTO)// 主鍵策略
                .setBaseResultMap(true)// 生成resultMap
                .setDateType(DateType.ONLY_DATE) // 設(shè)置時間格式,采用Date
                .setServiceName("%sService");// 生成的service接口名字首字母是否為I,這樣設(shè)置就沒有I
        //setBaseColumnList(true)  XML中生成基礎(chǔ)列
        return globalConfig;
 }

2.3.4、包屬性的配置

    private static PackageConfig packageConfig(String fatherPackageName){
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent(fatherPackageName) // 配置指定項目中各層的名稱
                .setController("controller") // Controller層
                .setEntity("entity") // 實體層(pojo層)
                .setMapper("dao") // Dao 層
                .setService("service") // service層
                .setServiceImpl("service.serviceImpl"); // ServiceImp層

        return packageConfig;
    }

fatherPackageName就是上圖所示的com.example.mybatis_plus_reverse包的名稱。

2.3.5、逆向生成類的名稱配置

   private static StrategyConfig strategyConfig (String tableName){
        StrategyConfig strategyConfig = new StrategyConfig();
        strategyConfig.setCapitalMode(true)// 開啟全局大寫命名
               .setInclude(tableName)// 設(shè)置要映射的表
               .setNaming(NamingStrategy.underline_to_camel)// 下劃線到駝峰的命名方式
               .setColumnNaming(NamingStrategy.underline_to_camel)// 下劃線到駝峰的命名方式
               .setEntityLombokModel(true)// 是否使用lombok
               .setRestControllerStyle(true)// 是否開啟rest風(fēng)格
               .setTablePrefix("t_") // 去除前綴
               .setControllerMappingHyphenStyle(true); // localhost:8080/hello_a_2

        return strategyConfig;
   }

2.3.6、在resource目錄下生成Mapper文件的配置

 private static InjectionConfig injectionConfig(){
        InjectionConfig injectionConfig = new InjectionConfig() {
            @Override
            public void initMap() {
                this.setMap(new HashMap<>()); // 實現(xiàn)InjectionConfig抽象類就需要初始化一個Map集合
            }
        };
        List<FileOutConfig> fileOutConfigList = new ArrayList<>();
        // 根據(jù)/templates/mapper.xml.ftl規(guī)則在指定的位置生成Mapper文件,可以在多個地方生成。
        fileOutConfigList.add(new FileOutConfig("/templates/mapper.xml.ftl") {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 返回Mapper文件的絕對路徑
                String path = PROJECT_PATH + "/src/main/resources/mapper/" +
                        tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
                return path;
            }
        });
        // 將對Mapper文件的配置添加到文件輸出對象中
        injectionConfig.setFileOutConfigList(fileOutConfigList);
        return injectionConfig;
   }

2.3.7、配置生成器的生成模板

	// 最簡單的配置
   private static TemplateConfig templateConfig() {
        TemplateConfig templateConfig = new TemplateConfig();

        return templateConfig.setXml(null);
   }
	// 復(fù)雜點的配置
	  private static TemplateConfig templateConfig() {
        TemplateConfig templateConfig = new TemplateConfig();
        templateConfig.setController("templates/controller.java")
                .setEntity("templates/entity.java")
                .setService("templates/service.java")
                .setServiceImpl("templates/serviceImpl.java")
                .setMapper("templates/mapper.java")
                .setXml(null);
        return templateConfig;
   }

使用第二個配置方式的前提需要在mybatis-plus-generator-3.4.1.jar這個包的templates目錄中將上述的五個類的 .ftl 的文件復(fù)制到當(dāng)前項目的resource目錄下的templates包下。
如:controller.java.ftl

2.3.8、判斷用戶輸入的項目包名是否存在

  // 判斷輸入的父項目是否存在
   private static boolean parentPackageExits(String project, String parentPackageName){
        StringBuilder path = new StringBuilder(PROJECT_PATH);
        if(!"".equals(project) && project != null){
            path.append("/" + project);
        }
        path.append(("/src/main/java/" + parentPackageName).replace(".","/"));
        File file = new File(path.toString());
        return file.exists();
   }

2.3.9、測試

// 執(zhí)行、測試
    public static void main(String[] args) {
        System.out.print("父包名稱: ");
        String input = scanner.next();
        if(!parentPackageExits(null,input)){
            throw new RuntimeException("輸入的父包名不存在或者輸入錯誤,請重新輸入父包名");
        }
        scannerTableName(input);
    }

輸入

輸出上圖內(nèi)容則表示配置成功。

實現(xiàn)效果

執(zhí)行完畢后就會在項目中自動生成相應(yīng)的包和類,因為我們在GlobleConfig中配置的setFileOverride屬性,所以會覆蓋掉相同的包。

3、總結(jié)

在日常的開發(fā)中,對于重復(fù)、費時、費力的操作,作為程序猿的我們,應(yīng)該都能利用程序來簡化這些操作,做到事倍功半的效果。

到此這篇關(guān)于MyBatis-plus實現(xiàn)逆向生成器的文章就介紹到這了,更多相關(guān)MyBatis-plus實現(xiàn)逆向生成器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java結(jié)合Kotlin實現(xiàn)寶寶年齡計算

    Java結(jié)合Kotlin實現(xiàn)寶寶年齡計算

    這篇文章主要為大家介紹了Java結(jié)合Kotlin實現(xiàn)寶寶年齡計算示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-06-06
  • Java設(shè)計模式之Adapter適配器模式

    Java設(shè)計模式之Adapter適配器模式

    這篇文章主要為大家詳細介紹了Java設(shè)計模式之Adapter適配器模式,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-03-03
  • 在lambda中使用外部變量的一些心得分享

    在lambda中使用外部變量的一些心得分享

    這篇文章主要介紹了在lambda中使用外部變量的一些心得,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java找不到或無法加載主類及編碼錯誤問題的解決方案

    Java找不到或無法加載主類及編碼錯誤問題的解決方案

    今天小編就為大家分享一篇關(guān)于Java找不到或無法加載主類及編碼錯誤問題的解決方案,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • 淺談對java中鎖的理解

    淺談對java中鎖的理解

    本文主要講述java中鎖的相關(guān)知識。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • Awaitility同步異步工具實戰(zhàn)示例詳解

    Awaitility同步異步工具實戰(zhàn)示例詳解

    這篇文章主要為大家介紹了Awaitility同步異步工具實戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • Spring Boot2.0中SpringWebContext找不到無法使用的解決方法

    Spring Boot2.0中SpringWebContext找不到無法使用的解決方法

    這篇文章主要給大家介紹了關(guān)于Spring Boot2.0中SpringWebContext找不到無法使用的解決方法,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考借鑒,下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-12-12
  • Eclipse轉(zhuǎn)Itellij IDEA導(dǎo)入Git/svn本地項目的詳細步驟

    Eclipse轉(zhuǎn)Itellij IDEA導(dǎo)入Git/svn本地項目的詳細步驟

    這篇文章主要介紹了Eclipse轉(zhuǎn)Itellij IDEA導(dǎo)入Git/svn本地項目,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10
  • Java設(shè)計模式之橋接模式實例詳解

    Java設(shè)計模式之橋接模式實例詳解

    這篇文章主要介紹了Java設(shè)計模式之橋接模式,結(jié)合實例形式詳細分析了橋接模式的概念、功能、Java實現(xiàn)方法及相關(guān)注意事項,需要的朋友可以參考下
    2017-09-09
  • 使用IDEA配置Tomcat和連接MySQL數(shù)據(jù)庫(JDBC)詳細步驟

    使用IDEA配置Tomcat和連接MySQL數(shù)據(jù)庫(JDBC)詳細步驟

    這篇文章主要介紹了使用IDEA配置Tomcat和連接MySQL數(shù)據(jù)庫(JDBC)詳細步驟,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-12-12

最新評論