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>
posted @   努力的夢泽  阅读(103)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示