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时并不是直接覆盖原文件,而是在同样的目录下生成了一个新文件,导致运行时使用的还是旧文件,出现问题

解决办法:

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

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

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

  1. SpringBoot如何自动生成实体类和Dao层以及映射文件(mybatis generator 自动生成代码)

    一.首先添加自动生成代码插件 <!-- mybatis generator 自动生成代码插件 生成时解除注释 --><plugin><groupId>org.myb ...

  2. SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件

    我们这一一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池的好处我 ...

  3. mybatis generator 自动生成代码(带注释的实体类)

    使用前提: 当你开发的java 项目或新模块的数据库有N张表操作时,这时要自己写实体类.dao.SqlMapper.xml等文件,如果有多个表,就是造成时间浪费降低开发效率,所以建议使用mybatis ...

  4. 使用Mybatis Generator自动生成代码

    MyBatis Generator(MBG)是MyBatis MyBatis 和iBATIS的代码生成器. 它将为所有版本的MyBatis以及版本2.2.0之后的iBATIS版本生成代码. 它将内省数 ...

  5. Mybatis(1)——Mybatis Generator自动生成代码

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...

  6. Eclipse使用mybatis generator自动生成代码

    一.写在前面 Mybatis属于半自动ORM,在使用这个框架中,工作量最大的就是书写Mapping的映射文件,由于手动书写很容易出错,我们可以利用Mybatis-Generator来帮我们自动生成文件 ...

  7. maven mybatis generator自动生成代码

    利用maven插件生成mybatis的 mapper dao entity 大大减少了工作量. 我的环境 Eclipse Java EE IDE for Web Developers. Version ...

  8. mybatis generator自动生成sqlmap代码的不完善之处以及解决方法

    mybatis generator自动生成sqlmap代码的不完善之处以及解决方法 参考文章: (1)mybatis generator自动生成sqlmap代码的不完善之处以及解决方法 (2)http ...

  9. 使用MyBatis Generator自动生成持久层CRUD代码的两种方法

    最近在使用MyBatis,得知可以利用MyBatis Generator自动生成实体类.DAO接口和Mapping映射文件.当数据库中的表多的时候,让你不用再手写Mapping映射文件,和实体类,就可 ...

最新文章

  1. wxPython 笔记(3)基本结构
  2. 实事求是来讲,比较艰难的环境能够激发人的斗志
  3. android游戏开发框架libgdx的使用(完)—杂谈Libgdx
  4. NumPy学习笔记 一
  5. java高并发(一)导学
  6. python获取钉钉日志数据_python3实现zabbix告警推送钉钉的示例
  7. 编译期java_java编译期和运行期
  8. 怎样解决VirtrualBox不能新建64bit的系统的问题
  9. Ubuntu 16.04下用Wine运行的软件出现方块的解决思路(应该是兼容现在所有平台的Wine碰到这个的问题)
  10. 符冉迪 计算机 培训,一种卫星云图的二次聚类分割方法专利_专利申请于2012-11-30_专利查询 - 天眼查...
  11. backdrop-filter: blur() safari 浏览器 无效 解决
  12. 微信小游戏世界排行榜的绘制
  13. Godot Shader:读屏着色器
  14. [封装插件]酒仙网和京东左侧动态菜单栏案例
  15. 织梦+php获取数据,DedeCms 用JS+PHP获取是否有新短消息
  16. 华尔街见闻下操作mysql_GitHub - boshengw-shzq/reainl: 华尔街见闻和新浪财经新闻采集...
  17. Matlab神经网络语音增强,基于BP神经网络的语音增强研究
  18. 公众号小伙伴“进群”学习交流
  19. CF229D 动态规划dp
  20. 祖传Python代码

热门文章

  1. 垃圾回收机制之标记清除算法
  2. 华为防火墙ftp_FTP被动模式访问问题
  3. Cortex‐M3-指令集
  4. TVS 管性能及选型总结
  5. PostgreSQL 10.1 手册_部分 II. SQL 语言_第 9 章 函数和操作符_9.18. 数组函数和操作符...
  6. Linux学习日记——源码编译Apache
  7. CodeForces - 1350B Orac and Models(dp)
  8. CodeForces - 1287D Numbers on Tree(dfs+stl)
  9. 中石油训练赛 - Edit Distance(思维+构造)
  10. python 元组捷豹_GitHub - jaguarzls/pyecharts: Python Echarts Plotting Library