MyBatis逆向工程
Mybatis 逆向工程--以本工程为例
什么是逆向工程?
逆向工程,其实就是正常的软件开发流程的反转。本文介绍的是MyBatis的逆向工程,先设计好数据库表结构,再通过MyBatis生成相应的mapper、实体类、xml文件。
在Spring Boot中完成MyBatis逆向工程
在pom.xml文件中,引入MyBatis依赖.
<dependencies>
<dependency>
<groupId>org.mybatis.generator</groupId>
<artifactId>mybatis-generator-core</artifactId>
<version>1.3.7</version>
</dependency>
<!-- https://mvnrepository.com/artifact/tk.mybatis/mapper -->
<dependency>
<groupId>tk.mybatis</groupId>
<artifactId>mapper</artifactId>
<version>4.1.5</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
<dependency>
<groupId>org.mybatis</groupId>
<artifactId>mybatis</artifactId>
<version>3.5.3</version>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.28</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.freemarker/freemarker -->
<dependency>
<groupId>org.freemarker</groupId>
<artifactId>freemarker</artifactId>
</dependency>
</dependencies>
tk.mybatis插件
编写配置文件**generatorConfig.xml **以本工程为例,本工程使用的是tk.mybatis插件生成mapper.java、mapper.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>
<properties resource="jdbc.properties" />
<context id="Mysql" targetRuntime="MyBatis3Simple"
defaultModelType="flat">
<property name="javaFileEncoding" value="UTF-8" />
<!--配置是否使用通用 Mapper 自带的注释扩展,默认 true -->
<!--<property name="useMapperCommentGenerator" value="false"/> -->
<!-- 生成的pojo类自带序列化接口 -->
<plugin type="org.mybatis.generator.plugins.SerializablePlugin"></plugin>
<!--通用 Mapper 插件,可以生成带注解的实体类 -->
<plugin type="tk.mybatis.mapper.generator.MapperPlugin">
<property name="mappers"
value="tk.mybatis.mapper.common.Mapper,tk.mybatis.mapper.hsqldb.HsqldbMapper" />
<property name="caseSensitive" value="true" />
<property name="forceAnnotation" value="true" />
<property name="beginningDelimiter" value="`" />
<property name="endingDelimiter" value="`" />
</plugin>
<!--通用代码生成器插件 -->
<!--mapper接口 -->
<!-- ../maker-assistant-service/src/test/java -->
<plugin type="tk.mybatis.mapper.generator.TemplateFilePlugin">
<property name="targetProject"
value="foodie-shop-backend/foodie-shop-backend-mapper/src/main/java" />
<property name="targetPackage"
value="net.seehope.foodie.mapper" />
<property name="templatePath" value="generator/mapper.ftl" />
<property name="mapperSuffix" value="Mapper" />
<property name="fileName"
value="${tableClass.shortClassName}${mapperSuffix}.java" />
</plugin>
<!--mapper.xml -->
<plugin type="tk.mybatis.mapper.generator.TemplateFilePlugin">
<property name="targetProject"
value="foodie-shop-backend/foodie-shop-backend-mapper/src/main/resources" />
<property name="targetPackage" value="mappers" />
<property name="mapperPackage"
value="net.seehope.foodie.mapper" />
<property name="templatePath"
value="generator/mapperXml.ftl" />
<property name="mapperSuffix" value="Mapper" />
<property name="fileName"
value="${tableClass.shortClassName}${mapperSuffix}.xml" />
</plugin>
<!--测试输出单个文件,每个表都会生成一个对应的文件 -->
<!-- <plugin type="tk.mybatis.mapper.generator.TemplateFilePlugin"> <property
name="targetProject" value="../demo/src/test/resources" /> <property name="targetPackage"
value="generator.one" /> <property name="templatePath" value="generator/test-one.ftl"
/> <property name="fileName" value="${tableClass.shortClassName}Test.txt"
/> <property name="templateFormatter" value="tk.mybatis.mapper.generator.formatter.FreemarkerTemplateFormatter"
/> </plugin> -->
<!--测试输出整个文件,所有表都可用,一次只生成一个文件,用于聚合所有表使用 -->
<!-- <plugin type="tk.mybatis.mapper.generator.TemplateFilePlugin"> <property
name="singleMode" value="false" /> <property name="targetProject" value="../demo/src/test/resources"
/> <property name="targetPackage" value="generator" /> <property name="templatePath"
value="generator/test-all.ftl" /> <property name="fileName" value="TestAll.txt"
/> </plugin> -->
<jdbcConnection driverClass="${jdbc.driverClassName}"
connectionURL="${jdbc.url}" userId="${jdbc.username}"
password="${jdbc.password}">
<property name="nullCatalogMeansCurrent" value="true" />
</jdbcConnection>
<!--MyBatis 生成器只需要生成 Model -->
<javaModelGenerator
targetPackage="net.seehope.foodie.pojo"
targetProject="foodie-shop-backend/foodie-shop-backend-pojo/src/main/java" />
<table tableName="%">
<!-- <generatedKey column="id" sqlStatement="JDBC" /> -->
</table>
</context>
</generatorConfiguration>
一般配置文件
<!--生成映射的pojo、mapper.java、mapper.xml -->
<!-- javaModelGenerator 生成pojo-->
<!-- sqlMapGenerator 生成mapper.java-->
<!-- javaClientGenerator 生成mapper.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">
<commentGenerator>
<!-- 是否去除自动生成的注释 true:是 : false:否 -->
<property name="suppressAllComments" value="false" />
</commentGenerator>
<!--数据库连接的信息:驱动类、连接地址、用户名、密码 -->
<jdbcConnection driverClass="com.mysql.jdbc.Driver"
connectionURL="jdbc:mysql://localhost:3306/mybatis" userId="root"
password="123456">
</jdbcConnection>
<!-- <jdbcConnection driverClass="oracle.jdbc.OracleDriver"
connectionURL="jdbc:oracle:thin:@localhost:1521:mybatis"
userId=""
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.ssm.po"
targetProject="./src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
<!-- 从数据库返回的值被清理前后的空格 -->
<property name="trimStrings" value="true" />
</javaModelGenerator>
<!-- targetProject:mapper映射文件生成的位置 -->
<sqlMapGenerator targetPackage="com.ssm.mapper"
targetProject="./src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</sqlMapGenerator>
<!-- targetPackage:mapper接口生成的位置 -->
<javaClientGenerator type="XMLMAPPER"
targetPackage="com.ssm.mapper"
targetProject="./src">
<!-- enableSubPackages:是否让schema作为包的后缀 -->
<property name="enableSubPackages" value="false" />
</javaClientGenerator>
<!-- 指定数据库表 -->
<!--
tableName:要生成的表名
domainObjectName:生成后的实例名
enableCountByExample:Count语句中加入where条件查询,默认true开启
enableUpdateByExample:Update语句中加入where条件查询,默认true开启
enableDeleteByExample:Delete语句中加入where条件查询,默认true开启
enableSelectByExample:Select多条语句中加入where条件查询,默认true开启
selectByExampleQueryId:Select单个对象语句中加入where条件查询,默认true开启
-->
<table tableName="items">
<!--
常用:
property:将所有字段逆向生成为类属性,默认全部
ignoreColumn:生成时忽略列字段
-->
</table>
<table tableName="orders"></table>
<table tableName="orderdetail"></table>
<table tableName="user"></table>
</context>
</generatorConfiguration>
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义