逆向工程
之前接触到逆向工程这个东西,感觉很有方便。只要在mysql中创好一张表,然后在IDEA中配置一下,就可以得到对应表的POJO、Mapper接口和xml文件。
今天把它记录下来方便以后使用
配置
mysql建表我就不说了,先创好一个maven的webapp工程;
依赖
进入pom.xml导入依赖
<dependencies>
<!-- 依赖 MyBatis 核心包 -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.2.8</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
</dependencies>
<build>
<finalName>atcrowdfunding06_common_reverse</finalName>
<pluginManagement><!-- lock down plugins versions to avoid using Maven defaults (may be moved to parent pom) -->
<plugins>
<!-- 具体插件, 逆向工程的操作是以构建过程中插件形式出现的 -->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.0</version>
<!-- 插件的依赖 -->
<dependencies>
<!-- 逆向工程的核心依赖 -->
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.2</version>
</dependency>
<!-- 数据库连接池 -->
<dependency>
<groupId>com.mchange</groupId>
<artifactId>c3p0</artifactId>
<version>0.9.2</version>
</dependency>
<!-- MySQL 驱动 -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.16</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<artifactId>maven-clean-plugin</artifactId>
<version>3.1.0</version>
</plugin>
<!-- see http://maven.apache.org/ref/current/maven-core/default-bindings.html#Plugin_bindings_for_war_packaging -->
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<version>3.0.2</version>
</plugin>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.0</version>
</plugin>
<plugin>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.22.1</version>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>3.2.2</version>
</plugin>
<plugin>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
</plugin>
<plugin>
<artifactId>maven-deploy-plugin</artifactId>
<version>2.8.2</version>
</plugin>
</plugins>
</pluginManagement>
</build>
xml配置文件
在resources目录下创建一个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>
<!--逆向生成命令-->
<!-- mybatis-generator:generate -->
<context id="myTables" targetRuntime="MyBatis3">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是;false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<!--数据库连接的信息: 驱动类、 连接地址、 用户名、 密码 -->
<jdbcConnection
driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/ssm?serverTimezone=UTC"
userId="root"
password="root">
<!-- 加上这个可以保证不会创建其它数据库的同名表 -->
<property name="nullCatalogMeansCurrent" value="true" />
</jdbcConnection>
<!-- 默认 false, 把 JDBC DECIMAL 和 NUMERIC 类型解析为 Integer, 为 true 时把
JDBC DECIMAL
和 NUMERIC 类型解析为 java.math.BigDecimal -->
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- targetProject:生成 Entity 类的路径 -->
<javaModelGenerator targetProject=".\src\main\java"
targetPackage="com.zx.entity.po">
<!-- enableSubPackages:是否让 schema 作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:XxxMapper.xml 映射文件生成的路径 -->
<sqlMapGenerator targetProject=".\src\main\java"
targetPackage="com.zx.mapper">
<!-- enableSubPackages:是否让 schema 作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage: Mapper 接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetProject=".\src\main\java"
targetPackage="com.zx.mapper">
<!-- enableSubPackages:是否让 schema 作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 数据库表名字和我们的 entity 类对应的映射指定 -->
<table tableName="account" domainObjectName="AccountPO" />
</context>
</generatorConfiguration>
大家可以根据文中内容自行更改
我是用的是mysql8.0.16,数据库连接那根据自己实际情况进行更改
其中的targetPackage改成自己文件目录就行,意思是将逆向生成的PO和Mapper放在哪个文件夹下面
下图中的tableName属性就填数据库中的需要进行逆向生成的表名,domainObjectName表示我们逆向生成的文件的名字。
maven逆向生成
点击IDEA右上方哪个框,没错就是我们添加tomcat那个入口
然后就是跟着图中的顺序进行操作,1、2就不说了,3就是选择逆向工程,4那里输入框中对应代码即可,点击应用。
生成
同tomcat那样在右上方选取我们刚刚配置的maven点击运行就行,生成情况如下,大家可以参照之前的xml配置进行一一对应。
后面根据自己的需要对相应的文件内容进行更该就行。
意外
自己在操作的时候,出现了一个意外,逆向生成的时候明明连接的是我的ssm数据库,要生成该库下的account表。但是实际上同时把里一个数据库中的同名account表给一起逆向生成了。
就像这样
控制台输出,说匹配到多个同名表,当时我就懵了,我不是指定了连接哪个数据库吗,为啥会匹配到其他数据库。。
解决
其实已经将解决方案附在代码上了,就是xml中的配置这个属性。其实吧,原理我也没去弄清楚,看着网上说是mysql8的问题。。咋这么多问题,连接数据库还要加serverTimezone=UTC。