逆向工程
一、概念与机制
1、概念
-
正向工程:先创建Java实体类,由框架负责根据实体类生成数据库表。Hibernate是支持正向工程的。
-
逆向工程:先创建数据库表,由框架负责根据数据库表,反向生成如下资源:
Java实体类
Mapper接口
Mapper配置文件
2、基本原理
二、操作
配置pom.xml
<!-- 依赖MyBatis核心包 -->
<dependencies>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.7</version>
</dependency>
</dependencies>
<!-- 控制Maven在构建过程中相关配置 -->
<build>
<!-- 构建过程中用到的插件 -->
<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>5.1.8</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
2、MBG配置文件
文件名必须是:generatorConfig.xml
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>
<!--
targetRuntime常用值:
MyBatis3Simple(只生成基本的CRUD和少量的动态SQL)
MyBatis3(生成完整的CRUD,包含CriteriaAPI方法Example后缀的方法)
-->
<!-- 引入第三方依赖包 -->
<!--<classPathEntry location=".\lib\mysql-connector-java-8.0.12.jar" />-->
<classPathEntry
location="D:/BaiduNetdiskDownload/4_CRM项目/resource/jarproperties/mysql/mysql-connector-java-8.0.11.jar"/>
<context id="localhost_mysql" targetRuntime="MyBatis3Simple">
<!-- 不生成注释 -->
<commentGenerator>
<property name="suppersData" value="false"/>
<property name="suppersAllComments" value="false"/>
</commentGenerator>
<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/crm-2022?characterEncoding=utf8&serverTimezone=UTC&useSSL=false"
userId="root"
password="snd123456">
<!-- 如果连接的是mysql需要加上这个配置,应为mysql不支持catalog和schema,如果多个库中有相同名称的表,会重复生成代码 -->
<property name="nullCatalogMeansCurrent" value="true" />
</jdbcConnection>
<javaTypeResolver >
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<!-- 生成实体类 targetPackage 生成包在Java下的地址 targetProject在磁盘中的位置 -->
<javaModelGenerator targetPackage="com.snd.crm.settings.pojo" targetProject="E:/资源库/项目/CRM客户管理系统/crm_snd/src/main/java">
<property name="enableSubPackages" value="false" />
<property name="trimStrings" value="true" />
<property name="constructorBased" value="false"/>
<property name="immutable" value="false"/>
</javaModelGenerator>
<!-- 生成XML Mapper -->
<sqlMapGenerator targetPackage="com.snd.crm.settings.mapper" targetProject="E:/资源库/项目/CRM客户管理系统/crm_snd/src/main/java">
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- 生成Mapper接口 -->
<!-- 生成的Mapper类型:ANNOTATEDMAPPER(注解)、MIXEDMAPPER(混合)、XMLMAPPER(XML) -->
<javaClientGenerator type="XMLMAPPER" targetPackage="com.snd.crm.settings.mapper" targetProject="E:/资源库/项目/CRM客户管理系统/crm_snd/src/main/java">
<!-- 是否将数据库中的schema作为包名的一部分,默认就是false -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 完全限定一张表:catalog名称.schema名称.表名(如果多个库中有同名的表必须配置)
其实Mysql根本不支持catalog和schema,建议不要配置这两个,使用jdbcConnection标签中的nullCatalogMeansCurrent配置项解决
-->
<!--
<table catalog="lanou" schema="lanou" tableName="book">
-->
<!-- 一个table标签对应着数据库中一个表 -->
<table tableName="tbl_user">
<!-- 是否用数据库中的字段名作为POJO属性名(不自动转小驼峰),默认值是false -->
<!--
<property name="useActualColumnNames" value="true"/>
-->
<!-- 生成代码时支持获取插入数据后自增的ID, 需要通过sqlStatement配置数据库类型。 -->
<generatedKey column="id" sqlStatement="mysql" identity="true" />
<!-- 此标签用于在生成代码时忽略数据库中的某个字段 -->
<!--
<ignoreColumn column="FRED" />
-->
<!-- 通过此标签重写mybatis从数据库读到的元信息,自定义列相关配置,包括(名称、类型) -->
<!--
<columnOverride column="aa" property="sname" />
-->
</table>
</context>
</generatorConfiguration>
注意:自己配置具体的信息,如数据库连接、包名、对应的表
3、执行MBG插件的generate目标
4、效果