Mybatis 逆向生成工具可以自动生成数据库表对应的实体类、mapper 接口以及对应的 xml 文件。
# 1、pom.xml 添加插件
<plugin> | |
<groupId>org.mybatis.generator</groupId> | |
<artifactId>mybatis-generator-maven-plugin</artifactId> | |
<version>1.3.7</version> | |
<dependencies> | |
<dependency> | |
<groupId>mysql</groupId> | |
<artifactId>mysql-connector-java</artifactId> | |
<version>5.1.6</version> | |
</dependency> | |
<dependency> | |
<groupId>org.mybatis.generator</groupId> | |
<artifactId>mybatis-generator-core</artifactId> | |
<version>1.3.7</version> | |
</dependency> | |
</dependencies> | |
<executions> | |
<execution> | |
<id>Generate MyBatis Artifacts</id> | |
<phase>package</phase> | |
<goals> | |
<goal>generate</goal> | |
</goals> | |
</execution> | |
</executions> | |
<configuration> | |
<!-- 允许移动生成的文件 --> | |
<verbose>true</verbose> | |
<!-- 是否覆盖 --> | |
<overwrite>true</overwrite> | |
<!-- 自动生成的配置 --> | |
<configurationFile>generatorConfig.xml</configurationFile> | |
</configuration> | |
</plugin> |
# 2、项目根目录添加 generatorConfig.xml
<?xml version="1.0" encoding="UTF-8"?> | |
<!DOCTYPE generatorConfiguration | |
PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" | |
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"> | |
<generatorConfiguration> | |
<context id="testTables" targetRuntime="MyBatis3" defaultModelType="flat"> | |
<commentGenerator> | |
<!-- 是否去除自动生成的注释 true:是 : false: 否 --> | |
<property name="suppressAllComments" value="true" /> | |
</commentGenerator> | |
<!-- 数据库连接的信息:驱动类、连接地址、用户名、密码 --> | |
<jdbcConnection driverClass="com.mysql.jdbc.Driver" | |
connectionURL="jdbc:mysql://localhost:3306/redpacket?serverTimezone=UTC" userId="root" | |
password=""> | |
</jdbcConnection> | |
<!-- 默认 false,把 JDBC DECIMAL 和 NUMERIC 类型解析为 Integer,为 true 时把 JDBC DECIMAL 和 | |
NUMERIC 类型解析为 java.math.BigDecimal --> | |
<javaTypeResolver> | |
<property name="forceBigDecimals" value="false" /> | |
</javaTypeResolver> | |
<!-- targetProject: 生成 PO 类的位置 --> | |
<javaModelGenerator targetPackage="com.huihui.redpacket.model" | |
targetProject="src/main/java"> | |
<!-- enableSubPackages: 是否让 schema 作为包的后缀 --> | |
<property name="enableSubPackages" value="false" /> | |
<!-- 从数据库返回的值被清理前后的空格 --> | |
<property name="trimStrings" value="true" /> | |
</javaModelGenerator> | |
<!-- targetProject:mapper 映射文件生成的位置 | |
如果 maven 工程只是单独的一个工程,targetProject="src/main/java" | |
若果 maven 工程是分模块的工程,targetProject="所属模块的名称",例如: | |
targetProject="ecps-manager-mapper",下同 --> | |
<sqlMapGenerator targetPackage="mapper" | |
targetProject="src/main/resources"> | |
<!-- enableSubPackages: 是否让 schema 作为包的后缀 --> | |
<property name="enableSubPackages" value="false" /> | |
</sqlMapGenerator> | |
<!-- targetPackage:mapper 接口生成的位置 --> | |
<javaClientGenerator type="XMLMAPPER" | |
targetPackage="com.huihui.redpacket.mapper" | |
targetProject="src/main/java"> | |
<!-- enableSubPackages: 是否让 schema 作为包的后缀 --> | |
<property name="enableSubPackages" value="false" /> | |
</javaClientGenerator> | |
<!-- 指定数据库表 --> | |
<table tableName="t_red_packet" domainObjectName="RedPacket" mapperName="RedPacketMapper" | |
enableCountByExample="false" | |
enableUpdateByExample="false" | |
enableDeleteByExample="false" | |
enableSelectByExample="false" | |
selectByExampleQueryId="false" | |
> | |
<generatedKey column="id" sqlStatement="JDBC"/> | |
</table> | |
<table tableName="t_user_red_packet" domainObjectName="UserRedPacket" mapperName="UserRedPacketMapper" | |
enableCountByExample="false" | |
enableUpdateByExample="false" | |
enableDeleteByExample="false" | |
enableSelectByExample="false" | |
selectByExampleQueryId="false" | |
> | |
<generatedKey column="id" sqlStatement="JDBC"/> | |
</table> | |
</context> | |
</generatorConfiguration> |
# 3、运行插件
控制台打印 Build Success 即代表生成成功。
# 4、遇到的坑
自动生成的 Mapper 中只有 insert 方法和 insertSelective 方法。
# 5、解决方案
- 检查数据库中的表是否有主键。
- 检查 generatorConfig.xml 配置文件中的 table 标签是否把 enableSelectByPrimaryKey 等属性设为了 false,默认是 true。
- 检查使用的 mysql 驱动的版本,版本太高是无法生成的,本人使用的是 5.1.6 的版本。