一、.归纳总结逆向工程相关概念及经验
(1)什么是MyBatis逆向工程
逆向工程(Reverse Engineering)是一种从现有系统、产品或设备中提取知识、技术或设计信息,然后利用这些信息来创建新的或改进现有系统的过程。在软件开发领域,逆向工程通常指的是从已有的代码、数据库或系统架构中推导出源代码、设计文档或其他形式的知识。
(2)逆向工程与正向工程的区别
正向工程(Forward Engineering)是指根据设计文档、规格说明或其他高层次的描述来创建系统或产品的过程。它通常是从抽象到具体的实现过程。而逆向工程则正好相反,它是从已有的具体实现(如数据库表结构、二进制代码等)中推导出高层次的信息。
(3)逆向工程在软件开发中的作用
代码理解与维护:当面对遗留系统或复杂的代码库时,逆向工程可以帮助开发者理解代码的结构和功能,从而更容易地进行维护和修改。
数据库模型生成:从现有的数据库表结构中生成对象关系映射(ORM)模型或数据访问层代码,减少手动编写数据访问代码的工作量。
系统重构:在重构现有系统时,逆向工程可以作为初始步骤,从现有系统提取设计元素,然后根据新的需求进行重构。
自动生成测试用例:通过分析现有代码或数据库结构,逆向工程可以自动生成测试用例,提高测试覆盖率。
文档生成:逆向工程可以从代码中生成文档,如API文档、系统架构图等,帮助团队成员更好地理解和使用系统。
(4)逆向工程在MyBatis中的应用
在MyBatis框架中,逆向工程指的是根据数据库表结构自动生成对应的实体类(Entity)、映射文件(Mapper)以及数据访问对象(DAO)等代码。通过MyBatis Generator工具,开发者可以快速地生成这些基础代码,从而专注于业务逻辑的实现,提高开发效率。
MyBatis的逆向工程功能大大简化了数据库与Java对象之间的映射过程,减少了手动编写SQL语句和映射配置的工作量。同时,生成的代码结构清晰,易于维护和扩展,有助于提高代码质量和开发效率。
(5)原理:
① 数据库元数据提取:首先,MyBatis逆向工程工具会连接到指定的数据库,通过JDBC(Java Database Connectivity)获取数据库的元数据(Metadata)。元数据描述了数据库的结构,包括表、列、关系等信息。
② 代码生成策略:在获取到数据库的元数据后,MyBatis逆向工程工具会根据预定义
的代码生成策略来生成代码。这些策略通常可以在配置文件中进行配置,包括生成的目标位置、包名、命名规则等。
③ 模板引擎:MyBatis逆向工程工具使用模板引擎来生成代码。模板引擎是一种通用的代码生成器,它根据预定义的模板和提取到的元数据来生成代码。模板通常包含一些占位符,这些占位符在生成代码时会被实际的元数据值所替换。
④ 代码生成:根据代码生成策略和模板引擎,MyBatis逆向工程工具会生成对应的实体类、映射文件和数据访问对象等代码。
2、2.写出完成逆向工程的实现过程
(1)创建项目generator
(2)添加插件依赖:
<plugins>
<!--mybatis-generator的Maven插件-->
<plugin>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-maven-plugin</artifactId>
<version>1.3.5</version>
<configuration>
<configurationFile>
src/main/resources//generator/generatorConfig.xml</configurationFile>
<verbose>true</verbose>
<overwrite>true</overwrite>
</configuration>
<!-- 插件需要的依赖环境 -->
</plugin>
</plugins>
导入依赖:
<dependencies>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.1</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>RELEASE</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
</dependencies>
(3)在 src/main/resources 路径下创建创建generator文件夹,并在该文件夹下创建 generatorConfig.xml 文件
(4)根据指定的数据库表生成对应的实体类、映射文件和Dao接口
<?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>
<!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包 -->
<classPathEntry location="D:\WdGame\mysql-connector-j-8.3.0.jar"/>
<!-- 此处ID和数据库连接处名称一致 -->
<context id="ssm" targetRuntime="mybatis3">
<commentGenerator>
<property name="suppressDate" value="true" />
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="true" />
</commentGenerator>
<jdbcConnection
driverClass="com.mysql.cj.jdbc.Driver"
connectionURL="jdbc:mysql:///ssm?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8&useSSL=false"
userId="root"
password="root123456">
</jdbcConnection>
<javaTypeResolver>
<property name="forceBigDecimals" value="false" />
</javaTypeResolver>
<javaModelGenerator targetPackage="com.dlxy.pojo"
targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
<property name="trimStrings" value="true" />
</javaModelGenerator>
<sqlMapGenerator targetPackage="com.dlxy.mapper"
targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
</sqlMapGenerator>
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.dlxy.dao"
targetProject="src/main/java">
<property name="enableSubPackages" value="true" />
</javaClientGenerator>
<table tableName="product" domainObjectName="Product"
enableCountByExample="true"
enableUpdateByExample="true"
enableDeleteByExample="true"
enableSelectByExample="true"
selectByExampleQueryId="true">
</table>
</context>
</generatorConfiguration>
数据库表:
(5)创建相应的包:
(6)右侧Maven处 Plugins -> mybatis-generator -> mybatis-generator:generate
实体类、dao层、以及映射文件被添加了数据:
MyBatis逆向工程是指使用MyBatis Generator(MBG)等工具,根据数据库表结构自动生成MyBatis框架所需的Java代码和映射文件的过程。逆向工程可以提高开发效率,通过自动生成代码,避免了手动编写实体类、映射文件和DAO接口的重复性工作,大大缩短了项目开发周期。并且能够减少出错概率。手动编写代码时容易出错,特别是在处理复杂的数据库表结构时。逆向工程自动生成的代码可以减少拼写错误和逻辑错误。逆向工程还可以快速适应数据库变更:当数据库表结构发生变化时,通过重新运行逆向工程,可以快速生成新的实体类和映射文件,使代码与数据库保持同步。