MyBatis 的好帮手-MybatisX

avatar
@海尔优家智能科技(北京)有限公司

前言

你是否碰见过这样的情况:

Dao/Mapper 层无法一键跳转到对应 Xml 中的 SQL,还要复制粘贴去对比;

需要对新建的表进行增删改查操作,复制粘贴一套 Xml,然后改改改;

需要对新建的表创建 DTO 对象,对着数据库表结构看花眼一个个设置属性;

Mapper 命名麻烦,自己想的名字还不够规范;

MybatisX 能很好的解决这些问题。

1. MybatisX 介绍

MybatisX 是一款基于 IDEA 的快速开发插件,通过对 MyBatis 和 MyBatis-Plus 的适配,实现 DTO、Xml、SQL 等模式化代码的一键生成,并可以定制化模板,是 Java 开发工程师的好帮手。

2. 使用准备

2.1 安装插件

Intellij IDEA → Settings → Plugins → Marketplace → MybatisX → 重启 IDEA

安装完插件需要重启,另外如果进入不了 Marketplace 可以尝试挂代理

2.2 配置数据源

Database → 点击➕号 → Data Source → MySQL → 填写 数据库 信息 → Apply → Make Global → OK

不要忘记点击 Make Global 按钮,不然每一个工程都要进行数据源配置,非常麻烦

2.3 选择自己常用数据库

选择数据源 → 点击 Data Source Properties(或者数据源后的 1 of xxx) → Schemas →选择数据源

这一步主要是为了查找方便,常用的数据库一般就几个,只勾选常用的利于操作

3. 使用场景

3.1 XML 跳转

在 Mapper 层中点点击这个按钮可以直接跳转到对应的 Xml 或者 SQL 语句

3.2 生成代码

可以生成 Mapper 层、Xml、DTO 代码,并可以指定生成的模板、路径、语句等,非常便捷,是核心功能

表 → 右键 → MybatisX-Generator

标签解释
module path模块路径。点击编辑框可以选择在哪个模块里生成代码。
base package基础包名。在基础路径的基础上生成的包名。
base path基础路径。在模块路径的基础上生成的包名。
relative package相对包名。DTO 对象会在这里生成。
encoding编码格式,默认 UTF-8。
extra class suffix附加类后缀。DTO 的类名会在生成后添加指定的后缀。
ignore filed prefix忽略字段前缀。DTO 的字段会在生成后删除指定的前缀。
ignore filed suffix忽略字段后缀。DTO 的字段会在生成后删除指定的后缀。
class name strategy类名生成策略。可选:camel(驼峰结构)和 same as tablename(与表名相同)
superClassDTO 对象继承的父类。
ignore table prefix忽略表前缀。DTO 的类名会在生成后删除指定的前缀。
ignore table suffix忽略表后缀。DTO 的类名会在生成后删除指定的后缀。

点击 Next,进入 Mapper 和 Xml 的设置

标签解释
annotation注解类型。目前支持四种注解:None(无注解)Mybatis-Plus 3Mybatis-Plust 2JPA如果没有使用直接选 None 即可。
options额外的一些选项。Comment(注释,建议勾选)toString/hashCode/equals(重写这些方法,根据需要勾选)Lombok(使用 Lombok 注解方式,如果使用了 Lombok 建议勾选)Actual Column(实际列名,比如 user_name 列对应的属性也叫 user_name,不勾选就是 userName,不建议勾选)Actual Column Annotation(添加列注解,建议勾选)JSR310:Date API(是否选用新标准的时间 API,建议勾选)Model(是否生成 DTO 模型,根据需要勾选)
template生成模板。custom-model-swagger(属性上会自动增加 swagger 的相关注解)default-all(生成所有常用的 curd 方法,包括 Mapper 和 Xml)default-empty(生成的 Mapper 和 Xml 没有方法)mybatis-plus2mybatis-plus3

注意在生成过程中要保持数据源的连接状态,不然无法生成

3.3 重置模板

重置模板功能可以自定义生成的 Xml 文件,或者刷新最新版本的模板格式

Project → Scratches and Consoles → Extensions → MyBatisX → templates

刷新默认的模板需要先删除模板文件,如删除 defalut-all,然后右键 templates → Restore Default Extensions

自定义模板内容

名称含义
tableClass.fullClassName类的全称(包括包名)
tableClass.shortClassName类的简称
tableClass.tableName表名
tableClass.pkFields表的所有主键字段
tableClass.allFields表的所有字段
tableClass.baseFields排除主键和 blob 的所有字段
tableClass.baseBlobFields排除主键的所有字段
tableClass.remark表注释

字段信息

名称含义
field.fieldName字段名称
field.columnName列名称
field.jdbcTypejdbc 类型
field.columnLength列的长度
field.columnScale列的精度
field.columnIsArray字段类型是不是数组类型
field.shortTypeNamejava 类型短名称, 通常用于定义字段
field.fullTypeNamejava 类型的长名称, 通常用于导入
field.remark字段注释
field.autoIncrement是否自增
field.nullable是否允许为空

配置信息

名称含义
baseInfo.shortClassName配置名称
baseInfo.tableName配置文件名称
baseInfo.pkFields配置名称
baseInfo.allFields后缀
baseInfo.baseFields包名
baseInfo.baseBlobFields模板内容
baseInfo.remark相对模块的资源文件路径

3.4 根据 Mapper 命名生成 SQL

这是 Mybatis 最强大的地方,可以根据命名生成 SQL,并且可以自定义生成方式

如图,右键 Mapper 中的名字,选择 Show ContextActions,如果需要自定义则选择第二个,直接生成则选择第一个

如果选择第二个,可以根据需要设置生成的方式,一般默认即可,点击 OK 生成

上图 Generate Options 里有一个插件作者的错误,大家可以找找看,本文作者已经提了 issue 了,应该很快会被修复

  • 生成规则:遵循前缀匹配规则
  • insert:前缀可以使用 add、insert、new、create 等
  • delete:前缀可以使用 del、delete、cancel 等
  • update:前缀可以使用 set、update、modify 等
  • select:前缀可以使用 find、query、select、get、list、look、count、search 等
  • 查询一个:selectOne
  • 查询所有:selectAll

因为官方没有给出匹配的文档,但是按照规范的命名规则基本都可以匹配,感兴趣的可以扒一下源码。

4. 写在最后

MybatisX 可以独立于 MyBatis-Plus,但是于 MyBatis-Plus 的适配性更好,有条件的开发者建议结合两者使用,可以更加提高开发效率,还可以添加官方群,与作者面对面互动交流学习。

5. 官方文档

MybatisX 使用说明

6. 团队介绍

三翼鸟数字化技术平台 -交易交付平台」负责搭建门店数字化转型工具,包括:海尔智家体验店小程序、三翼鸟工作台APP、商家中心等产品形态,通过数字化工具,实现门店的用户上平台、交互上平台、交易上平台、交付上平台,从而助力海尔专卖店的零售转型,并实现三翼鸟店的场景创新。