Mybatis Plus提升CRUD效率(一)

一、MybatisX 插件

MyBatisX插件是IDEA插件,如果想要使用它,那么首先需要在IDEA中进行安装(Markplace搜索安装即可)。

1679233048370

1、插件用途:接口与 mapper.xml 跳转

安装插件后,在mapper的接口文件中,会出现红色小鸟标识(如下图),点击即可跳转至对应 mapper.xml 文件的映射方法。

1679233319537

同样,在 mapper.xml 文件中也会出现蓝色小鸟标识(如下图),点击即可跳转至对应mapper 接口。

1679233427492

2、插件进阶用途I:代码快速生成

首先,需要在IDEA中配置对应的数据库链接:

1679233625098

找到需要生成代码的表名,右键选择 Mybatis-X 菜单,

1679233802961

接着按以下提示依次填写相应内容,即可在对应目录生成表所对应的 mapper 接口、xml 文件(service 部分建议去掉,实际开发用处不大)。

1679233899047

1679233992315

3、插件进阶用途II:CRUD快速生成

在代码生成的 mapper 接口中,不需要写返回值,只需要依据以下语法写方法名:

select、query、get —— 查找
update —— 更新
delete —— 删除
by 条件
and 连接条件

1679234674131

接着按下 Alt + Enter ,选择 Generate Mybatis Sql

1679234851285

即可生成对应方法,以及 xml 文件的语句。

1679234926792

1679234953410

4、插件进阶用途III:mybatis-plus 的使用

我们可以结合 mybatis-plus 进一步提高效率,在第二步代码生成的选项中,我们选择了 Mybatis Plus 3 以后,生成的 mapper 接口会继承 BaseMapper 接口,后续在 service 中就能直接调用 mybatis-plus 封装的方法,这其中包括了单表常见的增删改查,针对单表的操作基本可以告别编写 xml 配置。为此,我们还需要引入 mybatis-plus 的依赖,以使 BaseMapper 接口生效:

1
2
3
4
5
6
<!-- Mybatis-plus 依赖  -->
<dependency>
<groupId>com.baomidou</groupId>
<artifactId>mybatis-plus-boot-starter</artifactId>
<version>3.5.1</version>
</dependency>

接下来,就可以在 service 中直接调用 mapper 封装的 CRUD 接口了。当然,在实际应用中仍然要结合具体情况,复杂单表操作仍建议使用 xml 配置,便于维护。

1679236285692

二、Mybatis Plus

1. MP 实体类

使用注解将实体类 T entity与Mybatis Plus(下称MP)封装好的接口配合使用,这里以一个基础实体类 BaseDO 举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
@Data
@TableName("sys_user")
public class BaseDO implements Serializable {

/**
* 主键ID
*/
@ApiModelProperty("主键ID")
@TableId(value = "id", type = IdType.AUTO)
private Long id;

/**
* 业务主键
*/
@ApiModelProperty("业务主键")
@TableField(value = "bid", fill = FieldFill.INSERT)
private Long bid;

/**
* 创建时间
*/
@ApiModelProperty("创建时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(value = "create_at", fill = FieldFill.INSERT)
private Date createAt;

/**
* 创建人
*/
@ApiModelProperty("创建人")
@TableField(value = "create_by", fill = FieldFill.INSERT)
private String createBy;

/**
* 更新时间
*/
@ApiModelProperty("更新时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@TableField(value = "update_at", fill = FieldFill.INSERT_UPDATE)
private Date updateAt;

/**
* 更新人
*/
@ApiModelProperty("更新人")
@TableField(value = "update_by", fill = FieldFill.INSERT_UPDATE)
private String updateBy;

/**
* 逻辑删除 0-未删除 1-已删除
*/
@ApiModelProperty("逻辑删除")
@TableField(value = "deleted", fill = FieldFill.INSERT)
@TableLogic(value = "0", delval = "1")
private Integer deleted;

@ApiModelProperty(hidden = true)
@TableField(exist = false)
private static final long serialVersionUID = 1L;
}

@TableName

  • 描述:表名注解,标识实体类对应的表
  • 使用位置:实体类
  • 多数据库需指定库名

@TableId

  • 描述:主键注解
  • 使用位置:实体类主键字段
属性 类型 必须指定 默认值 描述
value String “” 主键字段名
type Enum IdType.NONE 指定主键类型

IdType

描述
AUTO 数据库 ID 自增
NONE 无状态,该类型为未设置主键类型(注解里等于跟随全局,全局里约等于 INPUT)
INPUT insert 前自行 set 主键值

@TableField

  • 描述:字段注解(非主键)
属性 类型 必须指定 默认值 描述
value String “” 数据库字段名
exist boolean true 是否为数据库表字段
condition String “” 字段where 实体查询比较条件,有值设置则按设置的值为准,没有则为默认全局的 `%s=#

Mybatis Plus提升CRUD效率(一)
http://dunkingcurry30.github.io/2023/07/06/Mybatis Plus提升CRUD效率(一)/
作者
Dunking Curry
发布于
2023年7月6日
许可协议