日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

使用mybatis-generator自动生成代码的方法介绍及踩坑

發布時間:2024/4/11 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 使用mybatis-generator自动生成代码的方法介绍及踩坑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

mybatis-geneator是一款mybatis自動代碼生成工具,可以通過配置,快速生成mapper和xml文件。

一. 使用maven插件

在pom.xml中添加mybatis-generator的plugin:

<plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.5</version><configuration><configurationFile>src/main/resources/mybatis-generator-config.xml</configurationFile><verbose>true</verbose><overwrite>true</overwrite></configuration><executions><execution><id>Generate MyBatis Artifacts</id><goals><goal>generate</goal></goals></execution></executions><dependencies><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.3.5</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.13</version></dependency></dependencies></plugin>

mybatis-generator-config.xml配置文件

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><!-- targetRuntime:設置生成的文件適用于哪個 mybatis 版本 --><context id="context" targetRuntime="MyBatis3"><!--optional 可選,指在創建class時,對注釋進行控制--><commentGenerator><!--阻止生成的注釋包含時間戳,默認為false--><property name="suppressDate" value="true"/><!-- 阻止所有自動生成的注釋 true:是 : false:否 --><property name="suppressAllComments" value="true"/><!--一般情況下由于MBG生成的注釋信息沒有任何價值,而且有時間戳的情況下每次生成的注釋都不一樣,在使用版本控制的時候每次都會提交,因而一般情況下我們都會屏蔽注釋信息--></commentGenerator><!--jdbc的數據庫連接 test_db 為數據庫名字--><jdbcConnection driverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/test_db?useUnicode=true&amp;characeterEncoding=utf-8&amp;serverTimezone=UTC" userId="root"password="123456"></jdbcConnection><!--optional 可選,類型處理器,控制數據庫類型和java類型之間的轉換--><javaTypeResolver><!-- 控制是否強制DECIMAL和NUMERIC類型的字段轉換為Java類型的java.math.BigDecimal,默認值為false --><!--默認情況下的轉換規則為:如果精度>0或者長度>18,就會使用java.math.BigDecimal如果精度=0并且10<=長度<=18,就會使用java.lang.Long如果精度=0并且5<=長度<=9,就會使用java.lang.Integer如果精度=0并且長度<5,就會使用java.lang.Short--><property name="forceBigDecimals" value="false"/></javaTypeResolver><javaModelGenerator targetPackage="com.chenpp.mybatis.entity"targetProject="src/main/java"><!-- 是否允許子包 --><property name="enableSubPackages" value="false"/><!-- 該屬性只對MyBatis3有效,如果true就會使用構造方法入參,如果false就會使用setter方式。默認為false --><property name="constructorBased" value="false"/><!-- 是否清理從數據庫中查詢出的字符串左右兩邊的空白字符 --><property name="trimStrings" value="true"/><!-- 建立modal對象是否不可改變 即生成的modal對象不會有setter方法,只有構造方法 --><property name="immutable" value="true"/></javaModelGenerator><!--*Mapper.xml文件的位置--><sqlMapGenerator targetPackage="com.chenpp.mybatis.mapper"targetProject="src/main/resources"><property name="enableSubPackages" value="false"/></sqlMapGenerator><!--Mapper接口文件位置--><javaClientGenerator targetPackage="com.chenpp.mybatis.mapper"targetProject="src/main/java" type="XMLMAPPER"><property name="enableSubPackages" value="false"/></javaClientGenerator><!--tableName是數據庫中的表名,domainObjectName是生成的JAVA實體類名--><table tableName="t_teacher"enableCountByExample="false" domainObjectName="Teacher"></table></context> </generatorConfiguration>

執行mvn mybatis-generator:generate 命令就可以生成對應的mybatis文件了

問題1 :

No plugin found for prefix ‘mybatis-generator’ in the current project and in the plugin groups [org.apache.maven.plugins, org.codehaus.mojo] available from the repositories [lo
cal (D:\java\mavenRepository), central (https://repo.maven.apache.org/maven2)] -> [Help 1]

因為執行mvn mybatis-generator:generate的目錄不對,我的mybatis-generator插件是在某個module下引入的,但是執行的時候是在根目錄下執行上述命令,切換到對應module的目錄就可以了

問題2 :

Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate (default-cli) on project mybatis-generator: Execution default-cli of goal org.mybatis
.generator:mybatis-generator-maven-plugin:1.3.2:generate failed: Exception getting JDBC Driver: com.mysql.jdbc.Driver -> [Help 1]

pom.xml里明明引入了mysql-connector-java的jar包,但是在執行的時候還是出現上述報錯,因為是插件mybatis-generator在執行的時候需要用到jdbc驅動包,所以需要將依賴包放入到plugin標簽里,如下:

<plugin><!--Mybatis-generator插件,用于自動生成Mapper和POJO--><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.5</version><configuration><!--配置文件的位置--><configurationFile>src/main/resources/mybatis-generator-config.xml</configurationFile><verbose>true</verbose><overwrite>true</overwrite></configuration><executions><execution><id>Generate MyBatis Artifacts</id><goals><goal>generate</goal></goals></execution></executions><dependencies><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.3.5</version><scope>system</scope><systemPath>${project.basedir}/src/main/java/com/ctrip/ibu/itinerary/offline/repository/lib/mybatis-generator.jar</systemPath></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version></dependency></dependencies></plugin>

問題3:

Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.3.2:generate (default-cli) on project mybatis-generator: Unknown system variable 'query_cache_size
’ -> [Help 1]

mysql-connecter-java的版本過低,很顯然是數據庫驅動程序與數據庫版本不對應
查看了一下配置,發現mysql-connector-java的版本是5.1.47,而我本地mysql版本是8.0.13,將數據庫驅動的版本改為8.0.13就可以了

二. 使用jar包和api

pom.xml

<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>8.0.13</version></dependency><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.3.5</version></dependency>

mybatis-generator配置文件:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration><!-- targetRuntime:設置生成的文件適用于哪個 mybatis 版本 --><context id="context" targetRuntime="MyBatis3"><!--optional 可選,指在創建class時,對注釋進行控制--><commentGenerator><!--阻止生成的注釋包含時間戳,默認為false--><property name="suppressDate" value="true"/><!-- 阻止所有自動生成的注釋 true:是 : false:否 --><property name="suppressAllComments" value="true"/></commentGenerator><!--jdbc的數據庫連接 test_db 為數據庫名字--><jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/test_db?useUnicode=true&amp;characeterEncoding=utf-8&amp;serverTimezone=UTC" userId="root"password="123456"></jdbcConnection><!--optional 可選,類型處理器,控制數據庫類型和java類型之間的轉換--><javaTypeResolver><!-- 控制是否強制DECIMAL和NUMERIC類型的字段轉換為Java類型的java.math.BigDecimal,默認值為false --> <property name="forceBigDecimals" value="false"/></javaTypeResolver><javaModelGenerator targetPackage="com.chenpp.mybatis.entity"targetProject="mybatis-generator/src/main/java"><!-- 是否允許子包 --><property name="enableSubPackages" value="false"/><!-- 該屬性只對MyBatis3有效,如果true就會使用構造方法入參,如果false就會使用setter方式。默認為false --><property name="constructorBased" value="false"/><!-- 是否清理從數據庫中查詢出的字符串左右兩邊的空白字符 --><property name="trimStrings" value="true"/><!-- 建立modal對象是否不可改變 即生成的modal對象不會有setter方法,只有構造方法 --><property name="immutable" value="true"/></javaModelGenerator><!--*Mapper.xml文件的位置--><sqlMapGenerator targetPackage="com.chenpp.mybatis.mapper"targetProject="mybatis-generator/src/main/resources"><property name="enableSubPackages" value="false"/></sqlMapGenerator><!--Mapper接口文件位置--><javaClientGenerator targetPackage="com.chenpp.mybatis.mapper"targetProject="mybatis-generator/src/main/java" type="XMLMAPPER"><property name="enableSubPackages" value="false"/></javaClientGenerator><!--tableName是數據庫中的表名,domainObjectName是生成的JAVA實體類名--><table tableName="t_teacher"enableCountByExample="false" domainObjectName="Teacher"></table></context> </generatorConfiguration>

執行如下代碼:

public static void main(String[] args) throws Exception{List<String> warnings = new ArrayList<String>();//生成的代碼重復時,覆蓋原代碼boolean overwrite = true;//讀取配置文件InputStream is = Surrogate.Generator.class.getResourceAsStream("/mybatis-generator-config.xml");ConfigurationParser cp = new ConfigurationParser(warnings);Configuration config = cp.parseConfiguration(is);is.close();DefaultShellCallback callback = new DefaultShellCallback(overwrite);//創建代碼生成器MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config,callback,warnings);//執行生成代碼myBatisGenerator.generate(null);//輸出警告信息for(String warning : warnings) System.out.println(warning);}

問題1:

The specified target project directory src/main/java does not exist

猜測可能是由于我是在module里執行的代碼,需要再加上對應的module,如上面的配置文件一樣,確實加上之后就成功生成了mybatis相關文件

其他還有通過java -jar命令行等方式,都差不多,就不一一贅述了。

問題2:

修改數據庫后再次執行mvn mybatis-generator:generate,對應的mapper.xml文件仍舊缺少新字段

重新檢查代碼后發現在使用Generator的時候,生成新的mapper.xml時并不是直接覆蓋原文件,而是在同樣的目錄下生成了一個新文件,導致運行時使用的還是舊文件,出現問題

解決辦法:

  • MyBatis Generator 在1.3.7版本提供了解決方案,可升級為1.3.7版本
  • 刪除舊mapper.xml,重新生成mapper文件
  • 參考資料:
    MyBatis Generator 詳解
    Running MyBatis Generator

    超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生

    總結

    以上是生活随笔為你收集整理的使用mybatis-generator自动生成代码的方法介绍及踩坑的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。