<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          取代 Mybatis Generator,這款代碼生成神器配置更簡單,開發(fā)效率更高!

          共 4686字,需瀏覽 10分鐘

           ·

          2022-02-17 04:52

          作為一名 Java 后端開發(fā),日常工作中免不了要生成數(shù)據(jù)庫表對應的持久化對象 PO,操作數(shù)據(jù)庫的接口 DAO,以及 CRUD 的 XML,也就是 mapper。

          Mybatis Generator 是 MyBatis 官方提供的一個代碼生成工具,完全可以勝任這個工作,不過最近在開發(fā)“編程貓”開源網(wǎng)站的時候試用了一下 MyBatis-Plus 官方提供 ?AutoGenerator,發(fā)現(xiàn)配置更簡單,開發(fā)效率更高!于是就來給小伙伴們安利一波。

          一、使用 Mybatis Generator

          為了形成鮮明的對比,我們先來使用 Mybatis Generator 生成一次代碼,感受一下整個過程。

          第一步,在 pom.xml 文件中添加 MySQL+MyBatis 的依賴(Mybatis Generator 的前置條件)。



          ????mysql
          ????mysql-connector-java
          ????${mysql.version}



          ????org.mybatis.spring.boot
          ????mybatis-spring-boot-starter
          ????2.2.2

          添加完成后,一定要執(zhí)行一次 Maven 重載(見下圖),確保 MyBatis 的依賴加載完畢后再執(zhí)行第二步。

          否則下一步可能不通過,但又得不到任何錯誤提示。不要問我為什么,踩過坑后痛苦的領悟。

          添加完成后,可以通過 Maven 插件來生成代碼,也可以通過 Java 代碼來生成代碼,這里以 Maven 插件的形式來演示。Java 代碼的形式可參照 Mybatis Generator:

          https://mybatis.org/generator/running/runningWithJava.html

          第二步,在 pom.xml 的 MyBatis Generator 插件,先來看一下整體的結(jié)構(gòu)圖,注意是在 build→plugins 下節(jié)點下添加。

          首先是 MyBatis Generator 插件,目前最新版是 1.4.0,我們采用上一個穩(wěn)定版本 1.3.7,穩(wěn)一點。

          org.mybatis.generator
          mybatis-generator-maven-plugin
          1.3.7

          只添加插件還不夠,還需要對其進行配置,我們使用 configurationFile 元素來指定一個配置文件 mybatis-generator-config.xml:

          src/main/resources/mybatis-generator-config.xml

          來看一下 mybatis-generator-config.xml 的內(nèi)容。


          ????"myContext"?targetRuntime="MyBatis3"?defaultModelType="flat">

          ????????
          ????????
          ????????????
          ????????????"suppressAllComments"?value="true"/>
          ????????


          ????????
          ????????"com.mysql.cj.jdbc.Driver"
          ????????????????????????connectionURL="jdbc:mysql://ip:3306/codingmoretiny02?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai&useSSL=false"
          ????????????????????????userId="codingmoretiny02"
          ????????????????????????password="123456">
          ????????????
          ????????????"nullCatalogMeansCurrent"?value="true"/>
          ????????

          ????????
          ????????
          ????????????"forceBigDecimals"?value="true"/>
          ????????


          ????????
          ????????"com.codingmore.mbg.po"?targetProject="src/main/java">
          ????????????
          ????????????"trimStrings"?value="true"/>
          ????????


          ????????
          ????????"com.codingmore.mbg.mapper"?targetProject="src/main/resources">
          ????????

          ????????
          ????????"com.codingmore.mbg.dao"?targetProject="src/main/java"?type="XMLMAPPER">
          ????????

          ????????""?tableName="user"?domainObjectName="User"
          ???????????????enableCountByExample="false"?enableDeleteByExample="false"?enableSelectByExample="false"
          ???????????????enableUpdateByExample="false"?selectByExampleQueryId="false">
          ????????
          ????

          • 配置文件至少得包含一個context
          • commentGenerator 用來配置生成的注釋
          • jdbcConnection 用來鏈接數(shù)據(jù)庫
          • javaTypeResolver 配置 JDBC 與 Java 的類型轉(zhuǎn)換規(guī)則
          • javaModelGenerator 配置 po 生成的包路徑和項目路徑
          • sqlMapGenerator 配置 mapper.xml 文件生成的目錄
          • javaClientGenerator 配置 mapper.java 文件生成的目錄
          • 一個 table 對應一張表,如果想同時生成多張表,需要配置多個 table

          更多配置信息可以參照下面這篇文章:

          https://juejin.cn/post/6844903982582743048

          由于數(shù)據(jù)庫表可能會發(fā)生變動,因此我們需要追加一個配置 true,允許覆蓋舊的文件。為了防止我們編寫的 SQL 語句被覆蓋掉,MyBatis Generator 只會覆蓋舊的 po、dao、而 *mapper.xml 不會覆蓋,而是追加。

          Mybatis Generator 需要鏈接數(shù)據(jù)庫,所以還需要添加數(shù)據(jù)庫驅(qū)動依賴,就像這樣:




          ????mysql
          ????mysql-connector-java
          ????${mysql.version}

          這樣就會顯得比較冗余,因為我們之前添加過了。好在 Maven 提供了 includeCompileDependencies 屬性,可以讓我們在插件中引用之前添加的依賴。

          true

          到此為止,mybatis-generator-maven-plugin 就算是配置完成了,完整內(nèi)容如下所示:


          ????
          ????????
          ????????????org.mybatis.generator
          ????????????mybatis-generator-maven-plugin
          ????????????1.3.7
          ????????????
          ????????????????src/main/resources/mybatis-generator-config.xml
          ????????????????truetrue
          ????????????

          ????????

          ????


          配置完成后可以雙擊運行 Maven 的插件 Mybatis Generator,沒有問題的話,可以看到生成后的文件。

          二、使用 MyBatis-Plus 的 AutoGenerator

          MyBatis-Plus(簡寫 MP)是 MyBatis 的增強工具,官方宣稱 MP 和 MyBatis 的關(guān)系就好像魂斗羅中的 1P 和 2P,可謂好基友,天下走。

          AutoGenerator 是 MyBatis-Plus 推出的代碼生成器,可以快速生成 Entity、Mapper、Mapper XML、Service、Controller 等各個模塊的代碼,比 Mybatis Generator 更強大,開發(fā)效率更高。

          通過前面的體驗,想必大家確實感覺到了 Mybatis Generator 的繁瑣,接下來,我們來體驗一下 AutoGenerator,對比過后,大家心里就有答案了。

          第一步,在 pom.xml 文件中添加 AutoGenerator 的依賴。


          ????com.baomidou
          ????mybatis-plus-generator
          ????3.4.1

          第二步,添加模板引擎依賴,MyBatis-Plus 支持 Velocity(默認)、Freemarker、Beetl,這里使用默認的 Velocity 引擎。


          ????org.apache.velocity
          ????velocity-engine-core
          ????2.3

          第三步,進行全局配置。

          //?全局配置
          GlobalConfig?gc?=?new?GlobalConfig();
          String?projectPath?=?System.getProperty("user.dir");
          gc.setOutputDir(projectPath?+?"/src/main/java");
          gc.setAuthor("沉默王二");
          gc.setOpen(false);
          gc.setDateType(DateType.ONLY_DATE);
          gc.setSwagger2(true);
          gc.setIdType(IdType.AUTO);

          第四步,配置數(shù)據(jù)源。

          //?數(shù)據(jù)源配置
          DataSourceConfig?dsc?=?new?DataSourceConfig();
          dsc.setUrl("jdbc:mysql://ip:3306/codingmoretiny02?useUnicode=true&characterEncoding=utf-8&serverTimezone=Asia/Shanghai");
          dsc.setDriverName("com.mysql.cj.jdbc.Driver");
          dsc.setUsername("codingmoretiny02");
          dsc.setPassword("123456");

          第五步,配置包。

          //?包配置
          PackageConfig?pc?=?new?PackageConfig();
          pc.setParent("top.codingmore.mpg");

          更多配置項可以到官方查看:

          https://baomidou.com/pages/061573/

          示例代碼示例如下所示:

          public?class?CodeGenerator?{
          ????public?static?void?main(String[]?args)?{
          ????????//?代碼生成器
          ????????AutoGenerator?mpg?=?new?AutoGenerator();
          ????????GlobalConfig?gc?=?new?GlobalConfig();
          ????????String?projectPath?=?System.getProperty("user.dir");
          ????????gc.setOutputDir(projectPath?+?"/src/main/java");
          ????????gc.setAuthor("沉默王二");

          ????????mpg.setGlobalConfig(gc);
          ????????DataSourceConfig?dsc?=?new?DataSourceConfig();
          ????????dsc.setDriverName("com.mysql.cj.jdbc.Driver");
          ????????mpg.setDataSource(dsc);

          ????????mpg.execute();
          ????}
          }

          再來看一下運行后的效果,可以看到數(shù)據(jù)庫表對應的 controller、service、entity、mapper 等等全有了——爽歪歪:

          三、總結(jié)對比

          對比 Mybatis 的 Generator 和 MyBatis-Plus 的 AutoGenerator,就可以得出這樣一條結(jié)論:后者的配置更簡單,開發(fā)效率也更高,功能也更強大——可快速生成 Mapper 、 Model 、 Service 、 Controller 層代碼。

          MyBatis-Plus 的確配得上 Plus 啊,確實優(yōu)秀。

          想要完整示例的話,可以到 GitHub 上查看:

          https://github.com/itwanger/codingmore-learning/tree/main/codingmore-tiny-02


          沒有什么使我停留——除了目的,縱然岸旁有玫瑰、有綠蔭、有寧靜的港灣,我是不系之舟。

          推薦閱讀

          瀏覽 154
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  日韩无修正 | 亚洲一级一射欧美999 | 爱插逼综合网 | 亚洲无码成人电影 | 69视频网在线观看 |