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

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

一. 使用maven插件

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

 			<plugin><groupId>org.mybatis.generatorgroupId><artifactId>mybatis-generator-maven-pluginartifactId><version>1.3.5version><configuration><configurationFile>src/main/resources/mybatis-generator-config.xmlconfigurationFile><verbose>trueverbose><overwrite>trueoverwrite>configuration><executions><execution><id>Generate MyBatis Artifactsid><goals><goal>generategoal>goals>execution>executions><dependencies><dependency><groupId>org.mybatis.generatorgroupId><artifactId>mybatis-generator-coreartifactId><version>1.3.5version>dependency><dependency><groupId>mysqlgroupId><artifactId>mysql-connector-javaartifactId><version>8.0.13version>dependency>dependencies>plugin>

mybatis-generator-config.xml配置文件


<generatorConfiguration><context id="context" targetRuntime="MyBatis3"><commentGenerator><property name="suppressDate" value="true"/><property name="suppressAllComments" value="true"/>commentGenerator><jdbcConnection driverClass="com.mysql.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/test_db?useUnicode=true&characeterEncoding=utf-8&serverTimezone=UTC" userId="root"password="123456">jdbcConnection><javaTypeResolver><property name="forceBigDecimals" value="false"/>javaTypeResolver><javaModelGenerator targetPackage="com.chenpp.mybatis.entity"targetProject="src/main/java"><property name="enableSubPackages" value="false"/><property name="constructorBased" value="false"/><property name="trimStrings" value="true"/><property name="immutable" value="true"/>javaModelGenerator><sqlMapGenerator targetPackage="com.chenpp.mybatis.mapper"targetProject="src/main/resources"><property name="enableSubPackages" value="false"/>sqlMapGenerator><javaClientGenerator targetPackage="com.chenpp.mybatis.mapper"targetProject="src/main/java" type="XMLMAPPER"><property name="enableSubPackages" value="false"/>javaClientGenerator><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><groupId>org.mybatis.generatorgroupId><artifactId>mybatis-generator-maven-pluginartifactId><version>1.3.5version><configuration><configurationFile>src/main/resources/mybatis-generator-config.xmlconfigurationFile><verbose>trueverbose><overwrite>trueoverwrite>configuration><executions><execution><id>Generate MyBatis Artifactsid><goals><goal>generategoal>goals>execution>executions><dependencies><dependency><groupId>org.mybatis.generatorgroupId><artifactId>mybatis-generator-coreartifactId><version>1.3.5version><scope>systemscope><systemPath>${project.basedir}/src/main/java/com/ctrip/ibu/itinerary/offline/repository/lib/mybatis-generator.jarsystemPath>dependency><dependency><groupId>mysqlgroupId><artifactId>mysql-connector-javaartifactId><version>5.1.47version>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>mysqlgroupId><artifactId>mysql-connector-javaartifactId><version>8.0.13version>dependency><dependency><groupId>org.mybatis.generatorgroupId><artifactId>mybatis-generator-coreartifactId><version>1.3.5version>dependency>

mybatis-generator配置文件:


<generatorConfiguration><context id="context" targetRuntime="MyBatis3"><commentGenerator><property name="suppressDate" value="true"/><property name="suppressAllComments" value="true"/>commentGenerator><jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"connectionURL="jdbc:mysql://localhost:3306/test_db?useUnicode=true&characeterEncoding=utf-8&serverTimezone=UTC" userId="root"password="123456">jdbcConnection><javaTypeResolver>        <property name="forceBigDecimals" value="false"/>javaTypeResolver><javaModelGenerator targetPackage="com.chenpp.mybatis.entity"targetProject="mybatis-generator/src/main/java"><property name="enableSubPackages" value="false"/><property name="constructorBased" value="false"/><property name="trimStrings" value="true"/><property name="immutable" value="true"/>javaModelGenerator><sqlMapGenerator targetPackage="com.chenpp.mybatis.mapper"targetProject="mybatis-generator/src/main/resources"><property name="enableSubPackages" value="false"/>sqlMapGenerator><javaClientGenerator targetPackage="com.chenpp.mybatis.mapper"targetProject="mybatis-generator/src/main/java" type="XMLMAPPER"><property name="enableSubPackages" value="false"/>javaClientGenerator><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时并不是直接覆盖原文件,而是在同样的目录下生成了一个新文件,导致运行时使用的还是旧文件,出现问题

解决办法:

  1. MyBatis Generator 在1.3.7版本提供了解决方案,可升级为1.3.7版本
  2. 删除旧mapper.xml,重新生成mapper文件

参考资料:
MyBatis Generator 详解
Running MyBatis Generator


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部