mybatis-generator的简单使用

本文介绍了如何使用MyBatis Generator进行代码生成。首先,提供了mybatis-generator官网和相关插件链接。接着,展示了项目目录结构,包括area.sql测试数据和pom.xml配置。在pom.xml中,添加了用于代码生成的maven插件配置。然后,提到了代码生成的相关配置,可以根据需求自定义。最后,讨论了遇到的版本不匹配问题及解决建议,并提醒读者,通常不修改逆向工程生成的代码,若需自定义查询逻辑,应另起一套。此外,还更新了添加序列化插件的内容,以适应对象在redis缓存中的序列化需求。
部署运行你感兴趣的模型镜像

相关准备

  1. mybatis-generator官网地址:http://mybatis.org/generator/
  2. mybatis官网地址:https://mybatis.org/mybatis-3/
  3. mybatis-generator-plugin插件地址:https://github.com/itfsw/mybatis-generator-plugin(这是 MyBatis Generator 插件的拓展插件包)

目录结构

在这里插入图片描述
area.sql 为测试数据,直接打开复制到数据库中即可,也可以自己准备简单的数据进行测试

pom.xml

主要给maven增加插件,用于代码生成,增加后效果如下:
在这里插入图片描述
pom.xml具体配置如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.jiaxuch</groupId>
    <artifactId>autocode</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>autocode</name>
    <description>Demo project for Spring Boot</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>
    
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi</artifactId>
            <version>3.17</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/org.apache.poi/poi-ooxml -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.17</version>
        </dependency>

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.19</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mybatis.spring.boot/mybatis-spring-boot-starter -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.3.2</version>
        </dependency>

        <!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.22</version>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <!-- MyBaties自动代码插件 -->
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.7</version>
                <configuration>
                    <!-- 配置文件 -->
<configurationFile>src/main/resources/generatorConfig.xml</configurationFile>
                    <!-- 允许移动和修改 -->
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.mybatis.generator</groupId>
                        <artifactId>mybatis-generator-core</artifactId>
                        <version>1.3.7</version>
                    </dependency>

                    <dependency>
                        <groupId>org.mybatis.generator</groupId>
                        <artifactId>mybatis-generator-maven-plugin</artifactId>
                        <version>1.3.7</version>
                    </dependency>
                    <!-- jdbc 依赖 -->
                    <dependency>
                        <groupId>mysql</groupId>
                        <artifactId>mysql-connector-java</artifactId>
                        <version>8.0.19</version>
                    </dependency>

                    <dependency>
                        <groupId>com.itfsw</groupId>
                        <artifactId>mybatis-generator-plugin</artifactId>
                        <version>1.3.8</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
</project>

代码生成相关配置

大家可以适当去掉或增加自己需要生产的代码,具体可以参考:
https://github.com/itfsw/mybatis-generator-plugin
如下:
在这里插入图片描述

<?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" >
<!-- 注意dtd属性验证顺序 -->
<generatorConfiguration>
	<context id="userTables" defaultModelType="flat"
			 targetRuntime="MyBatis3">

		<property name="autoDelimitKeywords" value="false" />
		<property name="javaFileEncoding" value="UTF-8" />

		<!--覆盖生成XML文件-->
		<plugin type="org.mybatis.generator.plugins.UnmergeableXmlMappersPlugin" />

		<!-- 【mybatis-generator-plugin插件】查询单条数据插件 -->
		<plugin
				type="com.itfsw.mybatis.generator.plugins.SelectOneByExamplePlugin" />
		<!-- 【mybatis-generator-plugin插件】MySQL分页插件 -->
		<plugin type="com.itfsw.mybatis.generator.plugins.LimitPlugin">
			<!-- 通过配置startPage影响Example中的page方法开始分页的页码,默认分页从1开始 -->
			<property name="startPage" value="1" />
		</plugin>
		<!-- 【mybatis-generator-plugin插件】数据Model链式构建插件 -->
		<plugin
				type="com.itfsw.mybatis.generator.plugins.ModelBuilderPlugin" />
				<!-- 序列化插件-->
				 <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
		<!-- Example Criteria 增强插件 -->
		<plugin
				type="com.itfsw.mybatis.generator.plugins.ExampleEnhancedPlugin">
			<!-- 是否支持已经过时的andIf方法(推荐使用when代替),默认支持 -->
			<property name="enableAndIf" value="true" />
		</plugin>
		<!-- 【mybatis-generator-plugin插件】批量插入插件 -->
		<plugin
				type="com.itfsw.mybatis.generator.plugins.BatchInsertPlugin">
			<!-- 开启后可以实现官方插件根据属性是否为空决定是否插入该字段功能 ! 需开启allowMultiQueries=true多条sql提交操作,所以不建议使用!插件默认不开启 -->
			<property name="allowMultiQueries" value="false" />
		</plugin>
		<!-- 【mybatis-generator-plugin插件】逻辑删除插件 -->
		<plugin
				type="com.itfsw.mybatis.generator.plugins.LogicalDeletePlugin">
			<!-- 这里配置的是全局逻辑删除列和逻辑删除值,当然在table中配置的值会覆盖该全局配置 -->
			<!-- 逻辑删除列类型只能为数字、字符串或者布尔类型 -->
			<property name="logicalDeleteColumn" value="deleted" />
			<!-- 逻辑删除-已删除值 -->
			<property name="logicalDeleteValue" value="1" />
			<!-- 逻辑删除-未删除值 -->
			<property name="logicalUnDeleteValue" value="0" />
			<!-- 是否生成逻辑删除常量(只有开启时 logicalDeleteConstName、logicalUnDeleteConstName
				才生效) -->
			<property name="enableLogicalDeleteConst" value="true" />
			<!-- 逻辑删除常量名称,不配置默认为 IS_DELETED -->
			<property name="logicalDeleteConstName" value="IS_DELETED" />
			<!-- 逻辑删除常量(未删除)名称,不配置默认为 NOT_DELETED -->
			<property name="logicalUnDeleteConstName"
					  value="NOT_DELETED" />
		</plugin>
		<!-- 【mybatis-generator-plugin插件】数据Model属性对应Column获取插件 -->
		<plugin
				type="com.itfsw.mybatis.generator.plugins.ModelColumnPlugin" />
		<!-- 【mybatis-generator-plugin插件】存在即更新插件 -->
		<plugin type="com.itfsw.mybatis.generator.plugins.UpsertPlugin">
			<!-- 支持upsertByExample,upsertByExampleSelective操作 !需开启allowMultiQueries=true多条sql提交操作,所以不建议使用!插件默认不开启 -->
			<property name="allowMultiQueries" value="false" />
			<!-- 开启批量功能,支持batchUpsert,batchUpsertWithBLOBs,batchUpserSelective !这几个方法中无法支持IncrementsPlugin的方法!插件默认不开启 -->
			<property name="allowBatchUpsert" value="fasle" />
		</plugin>
		<!-- 【mybatis-generator-plugin插件】Selective选择插入更新增强插件 -->
		<plugin
				type="com.itfsw.mybatis.generator.plugins.SelectiveEnhancedPlugin" />
		<!-- 【mybatis-generator-plugin插件】查询结果选择性返回插件 -->
		<plugin
				type="com.itfsw.mybatis.generator.plugins.SelectSelectivePlugin" />
		<!-- 【mybatis-generator-plugin插件】乐观锁插件 -->
		<plugin
				type="com.itfsw.mybatis.generator.plugins.OptimisticLockerPlugin">
			<!-- 是否启用自定义nextVersion,默认不启用(插件会默认使用sql的 set column = column + 1) -->
			<property name="customizedNextVersion" value="false" />
		</plugin>
		<!-- 【mybatis-generator-plugin插件】Lombok插件 -->
		<plugin type="com.itfsw.mybatis.generator.plugins.LombokPlugin">
			<!-- @Data 默认开启,同时插件会对子类自动附加@EqualsAndHashCode(callSuper = true),@ToString(callSuper
				= true) -->
			<property name="@Data" value="true" />
			<!-- @Builder 必须在 Lombok 版本 >= 1.18.2 的情况下开启,对存在继承关系的类自动替换成@SuperBuilder -->
			<property name="@Builder" value="false" />
			<!-- @NoArgsConstructor 和 @AllArgsConstructor 使用规则和Lombok一致 -->
			<property name="@AllArgsConstructor" value="false" />
			<property name="@NoArgsConstructor" value="false" />
			<!-- @Getter、@Setter、@Accessors 等使用规则参见官方文档 -->
			<property name="@Accessors(chain = true)" value="false" />
			<!-- 临时解决IDEA工具对@SuperBuilder的不支持问题,开启后(默认未开启)插件在遇到@SuperBuilder注解时会调用ModelBuilderPlugin来生成相应的builder代码 -->
			<property name="supportSuperBuilderForIdea" value="false" />
		</plugin>
		<!-- 【mybatis-generator-plugin插件】状态枚举生成插件 -->
		<plugin
				type="com.itfsw.mybatis.generator.plugins.EnumTypeStatusPlugin">
			<!-- 是否开启自动扫描根据约定注释格式生成枚举,默认true -->
			<property name="autoScan" value="true" />
			<!-- autoScan为false,这里可以定义全局需要检查生成枚举类的列名 -->
			<property name="enumColumns" value="type, status" />
		</plugin>
		<!-- 【mybatis-generator-plugin插件】Mapper注解插件 -->
		<plugin
				type="com.itfsw.mybatis.generator.plugins.MapperAnnotationPlugin">
			<!-- @Mapper 默认开启 -->
			<property name="@Mapper" value="true" />
			<!-- @Repository 默认关闭,开启后解决IDEA工具@Autowired报错 -->
			<property name="@Repository" value="false" />
		</plugin>
		<!-- 【mybatis-generator-plugin插件】Example 目标包修改插件,修改Example类生成到目标包下 -->
		<plugin
				type="com.itfsw.mybatis.generator.plugins.ExampleTargetPlugin">
			<property name="targetPackage"
					  value="com.jiaxuch.autocode.example" />
		</plugin>

		<!-- 注释生成配置 -->
		<commentGenerator>
			<property name="suppressAllComments" value="true" />
		</commentGenerator>

		<!-- 数据库链接配置 -->
		<jdbcConnection driverClass="com.mysql.cj.jdbc.Driver"
						connectionURL="jdbc:mysql://192.168.209.101:3306/mybatis" userId="root"
						password="jiaxu123">
		</jdbcConnection>

		<!-- 数据类型解析定义 -->
		<javaTypeResolver>
			<property name="forceBigDecimals" value="false" />
		</javaTypeResolver>

		<!-- 代码生成配置段 -->
		<!-- Entity -->
		<javaModelGenerator
				targetPackage="com.jiaxuch.autocode.model"
				targetProject="./src/main/java">
			<property name="enableSubPackages" value="true" />
			<property name="trimStrings" value="true" />
		</javaModelGenerator>

		<!-- XML文件 -->
		<sqlMapGenerator
				targetPackage="auto.mapper"
				targetProject="./src/main/resources">
			<property name="enableSubPackages" value="true" />
		</sqlMapGenerator>

		<!-- 接口文件 -->
		<javaClientGenerator
				targetPackage="com.jiaxuch.autocode.mapper"
				targetProject="./src/main/java" type="XMLMAPPER">
			<property name="enableSubPackages" value="true" />
		</javaClientGenerator>

		<!-- 表定义 -->
		<table tableName="T_Area" domainObjectName="AutoArea"
			   enableInsert="true" enableSelectByPrimaryKey="true"
			   enableSelectByExample="true" enableUpdateByPrimaryKey="true"
			   enableDeleteByPrimaryKey="true" enableDeleteByExample="true"
			   enableCountByExample="true" enableUpdateByExample="true"
			   selectByPrimaryKeyQueryId="true" selectByExampleQueryId="true">
			<!-- 【mybatis-generator-plugin插件】【逻辑删除插件】这里可以单独表配置逻辑删除列和删除值,覆盖全局配置 <property
				name="logicalDeleteColumn" value="del_flag"/> <property name="logicalDeleteValue"
				value="1"/> <property name="logicalUnDeleteValue" value="-1"/> -->

			<!-- 【mybatis-generator-plugin插件】【乐观锁插件】这里可以单独表配置,覆盖全局配置 <property name="customizedNextVersion"
				value="true"/> -->
			<!-- 【mybatis-generator-plugin插件】【乐观锁插件】指定版本列 <property name="versionColumn"
				value="version"/> -->
			<!-- 【mybatis-generator-plugin插件】【状态枚举生成插件】autoScan为false,也可以为单独某个table增加配置 
				<property name="enumColumns" value="user_type"/> -->
		</table>
	</context>
	<!-- Run maven cmd: mvn -Dmybatis.generator.overwrite=true mybatis-generator:generate -->
</generatorConfiguration>

在这里插入图片描述
执行后生成相关代

最后

开始选择逆向工程版本是

                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.4.0</version>

但是再使用插件

                    <dependency>
                        <groupId>com.itfsw</groupId>
                        <artifactId>mybatis-generator-plugin</artifactId>
                        <version>1.3.8</version>
                    </dependency>   

就会报错

[ERROR] Failed to execute goal org.mybatis.generator:mybatis-generator-maven-plugin:1.4.0:generate (default-cli) on project poi: Execution default-cli of goal org.mybatis.generator:mybatis-generator-maven-plugin:1.4.0:generate failed: A required class was missing while executing org.mybatis.generator:mybatis-generator-maven-plugin:1.4.0:generate: org/mybatis/generator/api/dom/xml/Element
[ERROR] -----------------------------------------------------
[ERROR] realm =    plugin>org.mybatis.generator:mybatis-generator-maven-plugin:1.4.0
[ERROR] strategy = org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy

估计是版本不匹配的原因,如果不使用mybatis-generator-plugin这个依赖,去掉代码生成相关配置里面的plugin,比如这种含有itfsw的plugin直接删除:
在这里插入图片描述

参考:
https://github.com/jiaxuch/autocode

注意:
一般情况下所有通过逆向工程生成的代码我们都是不会动的,如果需要自定义的另起一套查询逻辑,这样如果表有变动,会直接重新生成,覆盖之前的。

更新内容:

<!-- 序列化插件-->
 <plugin type="org.mybatis.generator.plugins.SerializablePlugin" />

添加序列化插件,生产的实体会序列化,主要是用到redis缓存,发现需要对对象序列化。

您可能感兴趣的与本文相关的镜像

Seed-Coder-8B-Base

Seed-Coder-8B-Base

文本生成
Seed-Coder

Seed-Coder是一个功能强大、透明、参数高效的 8B 级开源代码模型系列,包括基础变体、指导变体和推理变体,由字节团队开源

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值