如何让 Mybatis 自动生成代码,提高开发效率

2023-11-02

出处:https://www.cnblogs.com/homejim/p/9782403.html
在使用 mybatis 过程中, 当手写 JavaBean和XML 写的越来越多的时候, 就越来越同意出错。这种重复性的工作, 我们当然不希望做那么多。

还好, mybatis 为我们提供了强大的代码生成--MybatisGenerator

通过简单的配置, 我们就可以生成各种类型的实体类, Mapper接口, MapperXML文件, Example对象等。通过这些生成的文件, 我们就可以方便的进行单表进行增删改查的操作。

以下的工具使用的都是 IDEA

1 创建代码生成器

1.1 创建Maven项目

1.1.1 菜单上选择新建项目

File | New | Project

1.1.2 选择左侧的Maven

由于我们只是创建一个普通的项目, 此处点击 Next即可。

1.1.3 输入GroupIdArtifactId

  • 在我的项目中,

GroupId 填 com.homejim.mybatis

ArtifactId 填 mybatis-generator

点击 Next

1.1.4 Finish

通过以上步骤, 一个普通的Maven项目就创建好了。

1.2 配置 generator.xml

其实名字无所谓, 只要跟下面的 pom.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>

    <!-- 本地数据库驱动程序jar包的全路径 -->
    <classPathEntry location="C:\Users\\Administrator\\.m2\repository\\mysql\\mysql-connector-java\\8.0.12\\mysql-connector-java-8.0.12.jar"/>
    <context id="context" targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressAllComments" value="false"/>
            <property name="suppressDate" value="true"/>
        </commentGenerator>

        <!-- 数据库的相关配置 -->
        <jdbcConnection
                driverClass="com.mysql.jdbc.Driver"
                connectionURL="jdbc:mysql://localhost:3306/mybatis"
                userId="root"
                password="jim777"/>

        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>

        <!-- 实体类生成的位置 -->
        <javaModelGenerator
                targetPackage="com.homejim.mybatis.entity"
                targetProject=".\src\main\java">
            <property name="enableSubPackages" value="false"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>

        <!-- *Mapper.xml 文件的位置  sqlMapGenerator-->
        <sqlMapGenerator
                targetPackage="mybatis/mapper"
                targetProject=".\src\main\resources">
            <property name="enableSubPackages" value="false"/>
        </sqlMapGenerator>

        <!-- Mapper 接口文件的位置 -->
        <javaClientGenerator type="XMLMAPPER"
                             targetPackage="com.homejim.mybatis.mapper"
                             targetProject=".\src\main\java">
            <property name="enableSubPackages" value="false"/>
        </javaClientGenerator>

        <!-- 相关表的配置 -->

        <table tableName="blog" />
    </context>
</generatorConfiguration>

需要改一些内容:

  1. 本地数据库驱动程序jar包的全路径(必须要改)。

  2. 数据库的相关配置(必须要改

  3. 相关表的配置(必须要改

  4. 实体类生成存放的位置。

  5. MapperXML 生成文件存放的位置。

  6. Mapper 接口存放的位置。

如果不知道怎么改, 请看后面的配置详解

1.3 配置 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 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.homejim.mybatis</groupId>
    <artifactId>mybatis-generator</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--在原基础上添加 这些就好了-->
    <build>
        <finalName>mybatis-generator</finalName>
        <plugins>
            <plugin>
                <groupId>org.mybatis.generator</groupId>
                <artifactId>mybatis-generator-maven-plugin</artifactId>
                <version>1.3.7</version>
                <configuration>
                   <!--此处需要注意, 文件与上面的文件匹配-->
                   <configurationFile>src/main/resources/generator.xml</configurationFile>
                    <verbose>true</verbose>
                    <overwrite>true</overwrite>
                </configuration>
                <executions>
                    <execution>
                        <id>Generate MyBatis Artifacts</id>
                        <goals>
                            <goal>generate</goal>
                        </goals>
                    </execution>
                </executions>
                <dependencies>
                    <dependency>
                        <groupId>org.mybatis.generator</groupId>
                        <artifactId>mybatis-generator-core</artifactId>
                        <version>1.3.7</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>
    <!--到此结束-->
</project>

需要注意的是 configurationFile 中的文件指的是 generator.xml。因此路径写的是该文件的相对路径, 名称也跟该文件相同。

到此, mybatis-generator 就可以使用啦。

1.4 使用及测试

1.4.1 打开 Maven Projects 视图

在 IDEA 上, 打开:

View | Tools | Windwos | Maven Projects

Maven项目窗口

1.4.2 Maven Projects 中双击 mybatis-generator

在右侧此时可以看到 Maven Projects 了。找到 mybatis-generator 插件。

mybatis-generator | Plugins | mybatis-generator | mybatis-generator

运行插件

1.4.3 双击运行

运行正确后, 生成代码, 得到如下的结构

2 XML 配置详解

仅仅是上面那么简单的使用还不够爽。那么我们就可以通过更改 generator.xml 配置文件的方式进行生成的配置。

2.1 优先

推荐查看官方的文档。

英文不错的:官方网站。

中文翻译版:翻译版网站

2.2 官网没有的

2.2.1 property 标签

该标签在官网中只是说用来指定元素的属性, 至于怎么用没有详细的讲解。

2.2.1.1 分隔符相关

<property name="autoDelimitKeywords" value="true"/>
<property name="beginningDelimiter" value="`"/>
<property name="endingDelimiter" value="`"/>

以上的配置对应的是 mysql当数据库中的字段和数据库的关键字一样时, 就会使用分隔符。

比如我们的数据列是 delete, 按以上的配置后, 在它出现的地方, 就变成 delete

2.2.1.2 编码

默认是使用当前的系统环境的编码, 可以配置为 GBK 或 UTF-8。

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

我想项目为 UTF-8, 如果指定生成 GBK, 则自动生成的中文就是乱码。

2.2.1.3 格式化

<!--格式化生成的 Java 代码-->
<property name="javaFormatter" value="org.mybatis.generator.api.dom.DefaultJavaFormatter"/>
<!--格式化生成的 XML-->
<property name="xmlFormatter" value="org.mybatis.generator.api.dom.DefaultXmlFormatter"/>

这些显然都是可以自定义实现的的。

2.2.2 plugins 标签

plugins 标签用来扩展或修改代码生成器生成的代码。

在生成的 XML 中, 是没有 **** 这个标签的。该标签是配置缓存的。

如果我们想生成这个标签, 那么可以 plugins 中进行配置。

<plugin type="org.mybatis.generator.plugins.CachePlugin" >
            <property name="cache_eviction" value="LRU"/>
</plugin>
cache

比如你想生成的 JavaBean 中自行实现 Serializable 接口。

<plugin type="org.mybatis.generator.plugins.SerializablePlugin" />
序列化接口实现

还能自定义插件。

这些插件都蛮有用的, 感觉后续可以专门开一篇文章来讲解。

2.2.3 commentGenerator 标签

看名称, 就知道是用来生成注释用的。

默认配置:

    <commentGenerator >
        <property name="suppressAllComments" value="false"/>
        <property name="suppressDate" value="false"/>
        <property name="addRemarkComments" value="false"/>
    </commentGenerator>

suppressAllComments:阻止生成注释, 默认值是false。

suppressDate: 阻止生成的注释包含时间戳, 默认为false。

addRemarkComments: 注释中添加数据库的注释, 默认为 false。

还有一个就是我们可以通过 type 属性指定我们自定义的注解实现类, 生成我们自己想要的注解。自定义的实现类需要实现 org.mybatis.generator.api.CommentGenerator

推荐阅读


代码对比工具,我就用这6个

分享我常用的5个免费的在线 SQL 数据库环境,简直太方便了!

Spring Boot 三招组合拳,手把手教你打出优雅的后端接口

MySQL 5.7 vs 8.0,你选那个?网友:我继续原地踏步~


最后,推荐给大家一个有趣有料的公众号:写代码的渣渣鹏,7年老程序员教你写bug,回复 面试|资源 送一你整套开发笔记 有惊喜哦

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何让 Mybatis 自动生成代码,提高开发效率 的相关文章

  • 带有嵌套表的 XSLT 中的数据对齐问题

    我正在通过 FoundationPHP 使用 XSLT 和嵌套表生成 Word 文档 我想要的结果是 Table 1 Table 2 Image 1 Image 2 Label 1 Label 2 Data 1 Data 2 Table 3
  • 反射找不到对象子类型

    我试图通过使用反射来获取包中的所有类 当我使用具体类的代码 本例中为 A 时 它可以工作并打印子类信息 B 扩展 A 因此它打印 B 信息 但是当我将它与对象类一起使用时 它不起作用 我该如何修复它 这段代码的工作原理 Reflection
  • 操作错误不会显示在 JSP 上

    我尝试在 Action 类中添加操作错误并将其打印在 JSP 页面上 当发生异常时 它将进入 catch 块并在控制台中打印 插入异常时出错 请联系管理员 在 catch 块中 我添加了它addActionError 我尝试在jsp页面中打
  • 我可以使用 HSQLDB 进行 junit 测试克隆 mySQL 数据库吗

    我正在开发一个 spring webflow 项目 我想我可以使用 HSQLDB 而不是 mysql 进行 junit 测试吗 如何将我的 mysql 数据库克隆到 HSQLDB 如果您使用 spring 3 1 或更高版本 您可以使用 s
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 为什么 XML 中的 CDATA 语法看起来如此奇怪?

    CDATA 在 XML 中的使用如下
  • Java按日期升序对列表对象进行排序[重复]

    这个问题在这里已经有答案了 我想按一个参数对对象列表进行排序 其日期格式为 YYYY MM DD HH mm 按升序排列 我找不到正确的解决方案 在 python 中使用 lambda 很容易对其进行排序 但在 Java 中我遇到了问题 f
  • 在两个活动之间传输数据[重复]

    这个问题在这里已经有答案了 我正在尝试在两个不同的活动之间发送和接收数据 我在这个网站上看到了一些其他问题 但没有任何问题涉及保留头等舱的状态 例如 如果我想从 A 类发送一个整数 X 到 B 类 然后对整数 X 进行一些操作 然后将其发送
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 如何从泛型类调用静态方法?

    我有一个包含静态创建方法的类 public class TestClass public static
  • 声明的包“”与预期的包不匹配

    我可以编译并运行我的代码 但 VSCode 中始终显示错误 早些时候有一个弹出窗口 我不记得是什么了 我点击了 全局应用 从那以后一直是这样 Output is there but so is the error The declared
  • 静态变量的线程安全

    class ABC implements Runnable private static int a private static int b public void run 我有一个如上所述的 Java 类 我有这个类的多个线程 在里面r
  • 在 MySQL 中存储表情符号的编码问题:如何使用 Prisma ORM 在 NodeJS 中定义字符排序规则?

    亲爱的 Nodejs 专家和数据库专家 我们在 MySQL 数据库中存储表情符号和其他特殊字符时遇到问题 我们使用 Prisma 得到一个错误 这是我们使用的 ORM 参数无法从排序规则 utf8 general ci 转换为 utf8mb
  • 捕获的图像分辨率太大

    我在做什么 我允许用户捕获图像 将其存储到 SD 卡中并上传到服务器 但捕获图像的分辨率为宽度 4608 像素和高度 2592 像素 现在我想要什么 如何在不影响质量的情况下获得小分辨率图像 例如我可以获取或设置捕获的图像分辨率为原始图像分
  • 使用 JMF 创建 RTP 流时出现问题

    我正处于一个项目的早期阶段 需要使用 RTP 广播DataStream创建自MediaLocation 我正在遵循一些示例代码 该代码目前在rptManager initalize localAddress 出现错误 无法打开本地数据端口
  • JGit 检查分支是否已签出

    我正在使用 JGit 开发一个项目 我设法删除了一个分支 但我还想检查该分支是否已签出 我发现了一个变量CheckoutCommand但它是私有的 private boolean isCheckoutIndex return startCo
  • 将 List 转换为 JSON

    Hi guys 有人可以帮助我 如何将我的 HQL 查询结果转换为带有对象列表的 JSON 并通过休息服务获取它 这是我的服务方法 它返回查询结果列表 Override public List
  • 按日期对 RecyclerView 进行排序

    我正在尝试按日期对 RecyclerView 进行排序 但我尝试了太多的事情 我不知道现在该尝试什么 问题就出在这条线上适配器 notifyDataSetChanged 因为如果我不放 不会显示错误 但也不会更新 recyclerview
  • Spring Boot @ConfigurationProperties 不从环境中检索属性

    我正在使用 Spring Boot 1 2 1 并尝试创建一个 ConfigurationProperties带有验证的bean 如下所示 package com sampleapp import java net URL import j

随机推荐

  • 同学,同事,KTV聚会的小游戏

    1 吸心大全 搞个扑克用嘴吸住 传给旁边的人 他在吸过去 依次传下去 谁掉了就喝酒 2 两个人一队 一定要男女搭配哦 一个人口里含一口水或者饮料都可以 然后说裁判指定的话 由另一人来猜 规定时间里猜对最多的就算赢 3 弄个超大的骰子 这个估
  • 最小二乘法,最大似然估计

    最小二乘法 最大似然估计 一 最小二乘法 1 基本思想 2 作用 3 如何求解最小二乘法 二 最大似然估计 1 概念 2 似然估计的思想是 3 如何求解最大似然估计 三 最小二乘法和最大似然估计的联系和区别 四总结 一 最小二乘法 最小二乘
  • gamma分布的推导与理解

    1 概述 gamma分布与指数分布 泊松分布甚至其它一些混合分布有较为紧密的联系 本文通过对比与之相关的概率分布 建立某种联系并推导其概率密度函数 以便加深理解与认知 2 Gamma分布的必要性 在设置 Gamma 分布的两个参数 并将它们
  • Spring Cloud 学习笔记十五:搭建微服务工程之Knife4j 介绍及使用

    目录 Knife4j 介绍及使用 Knife4j 介绍及使用 Knife4j的前身是swagger bootstrap ui 前身swagger bootstrap ui是一个纯swagger ui的ui皮肤项目 具体介绍见官方文档 htt
  • 商业数据分析概论

    我正在和鲸社区参加 商业数据分析训练营活动 https www heywhale com home competition 6487de6649463ee38dbaf58b 以下是我的学习笔记 学习主题 波士顿房价数据快速查看 日期 202
  • Java进阶--编译时注解处理器(APT)详解

    本文同步发布在掘金 未经本人允许不得转载 上篇文章 Java进阶 Java注解及其实例应用 我们使用注解 反射实现了一个仿ButterKnife功能的示例 考虑到反射是在运行时完成的 多少会影响程序性能 因此 ButterKnife本身并非
  • JDBC连接数据库常用的一些配置项

    最近在服务器中部署服务遇到了一个连接超时的报错CommunicationsException 查找解决方法后发现可以通过配置JDBC重连来解决 添加 autoReconnect true failOverReadOnly false 配置在
  • pg_dump 命令

    pg数据库安装目录 bin 下面 有 pg dump exe cmd切换到 安装目录 bin 下 使用pg dump 命令 pg dump help 查看命令详情 导出sql语句 如下 将 10 20 25 224 主机的 数据库fdb11
  • [深度学习]更好地理解正则化:可视化模型权重分布

    在机器学习中 经常需要对模型进行正则化 以降低模型对数据的过拟合程度 那么究竟如何理解正则化的影响 本文尝试从可视化的角度来解释其影响 首先 正则化通常分为三种 都是在loss函数的基础上外加一项 L0 即不等于0的元素个数 L1 即所有元
  • 剪映电脑版_剪映如何剪视频?详细图文教程+更多进阶高级玩法,新手必看!...

    短视频的火爆 平台上出现了各式各样酷炫的视频 因此 许多人也想做出高逼格的视频 但相信大部分的人都会遇到这么一个难题 那就是从未接触过剪辑 不知道视频要怎么优化处理 今天这篇文章 就带着小伙伴们了解一款非常适合新手的手机剪辑软件一一剪映AP
  • Qt5教程: (4) 带参数信号与槽

    在subwidget h中声明一个signal 和之前的信号函数重名但是有参数 void backSignal QString 之后在subwidget cpp的槽函数sendSignal 中也发送该信号 emit backSignal 子
  • Java 爬虫遇到需要登录的网站,该怎么办?

    这是 Java 网络爬虫系列博文的第二篇 在上一篇 Java 网络爬虫 就是这么的简单 中 我们简单的学习了一下如何利用 Java 进行网络爬虫 在这一篇中我们将简单的聊一聊在网络爬虫时 遇到需要登录的网站 我们该怎么办 在做爬虫时 遇到需
  • 为什么uzi排到古手羽就秒_Uzi排到古手羽秒退,网友争相发表看法,直播间弹幕疑似给出答案...

    英雄联盟职业选手Uzi是一位热门人物 他在自己的职业生涯当中也取得过很多令人羡慕的职场比赛成就 因为自己征战的时间较久 多年来也累积了大批量的粉丝 因为他的努力与执着 如今也凝聚了不少喜欢他的真爱粉丝 甚至有不少黑他的粉丝都因此得出了感情
  • C语言面试高频问题:自己代码实现字符串相关的常用API

    参考 C语言面试高频问题 自己代码实现字符串相关的常用API 作者 图触靓 发布时间 2020 08 08 13 31 33 网址 https blog csdn net bhbhhyg article details 107878102
  • 学习《Linux从入门到精通》day-4

    1 cal指令 作用 用来操作日历 语法1 cal 等价于 cal 1 直接输出当前月份的日历 语法2 cal 3 表示输出上一个月 本月 下个月的日历 语法3 cal y 年份 表示输出某一年的日历 语法4 cal m 以周一开头 2 c
  • 自定义windows登录认证(微软 Credential Providers 详解一《调用原理》)

    windows登录认证在不同的windows版本中有不同的方式 在xp中使用gina dll 而在win7及以上版本使用Credential Providers 在win8及以上版本也是使用Credential Providers但是与wi
  • 深度学习(二)(loss、BP、正则化、激活函数)

    神经网络基础 目录 神经网络基础 5 得分函数 6 损失函数 7 前向传播整体流程 8 反向传播计算方法 9 神经网络整体架构 10 神经网络架构细节 11 神经元的个数对结果的影响 12 正则化与激活函数 13 神经网络过拟合解决办法 5
  • 企业级DevOps全链路自动化流水线综合解决方案详解

    一 Pipeline流水线 1 Pipeline 简介 Pipeline 简单来说 就是一套运行在 Jenkins 上的工作流框架 将原来独立运行于单个或者多个节点的任务连接起来 实现单个任务难以完成的复杂流程编排和可视化的工作 Pipel
  • Android开发——项目实例(一)迷你背单词软件

    本文是第一版 第二版与第一版排版与功能不同 第二版地址 迷你背单词软件 软件效果图 源码及APK 链接 https pan baidu com s 1Eak3XDf6 R 7IWEGatNnBQ 提取码 pcqa 如有想修改但不会的 欢迎私
  • 如何让 Mybatis 自动生成代码,提高开发效率

    出处 https www cnblogs com homejim p 9782403 html 在使用 mybatis 过程中 当手写 JavaBean和XML 写的越来越多的时候 就越来越同意出错 这种重复性的工作 我们当然不希望做那么多