idea使用MybatisX插件根据表自动生成代码

1.情景展示

在实际开发过程中,根据数据库的表生成对应的增删改查代码,最为常见。

除了使用公司封装的代码自动生成外,有没有通用的呢?

2.具体分析

在idea当中,我们可以使用MybatisX插件生成:

表对应的实体类、dao层所使用的的mapper.java文件、mybatis对应的xml文件、service层所需的接口和实现类。

3.解决方案

安装MybatisX

在idea当中找到plugins选项。

切换到Marketplace,搜索:mybatis

找到MybatisX插件,点击“Install”进行安装。

连接数据库

既然是在idea当中根据表生成代码,自然需要在idea中连接数据库。

具体操作步骤,见文末推荐。

生成代码

第一步:拷贝要生成的实体类所在包名。

从要生成的实体类所在的模块的src/main/java目录后面开始拷贝。

选择最后一项。

第二步:打开database窗口,找到要生成代码的表。

我们可以在此窗口按键输入,将自动进行表名检索。

通过点击选中要生成的表名,右键。

你将发现菜单栏多了一个:MybatisX-Generator。

说明:如果没有这个选项的话,你需要重启idea,令刚才安装的MybatisX插件生效。

第3步:(确定实体类的生成规则及生成路径)

选择模块

鼠标点进“module path”,双击,在弹出的窗口选择文件要生成在哪个模块中。

将复制的包名全路径拷贝到:base package里面。

说明:

base package:生成文件所在的包名全路径,一般从com.开始。

base path:填src/main/java就可以了。

relative package:填即将生成文件放到哪个包里面(如果就是要将文件放在base package的最后一级目录下,此处就空着不填)。

一次生成,只能选中一张表,不能选中多张的。

选择有生成文件所在的包名,右键,copy path。 

第4步:

custom-model-swagger:生成实体文件,并且在属性上会自动增加swagger的相关注解

default-all和default-empty:生成实体文件、mapper.java和mapper.xml。

mybatis-plus2和mybatis-plus3:生成实体文件、mapper.java、mapper.xml、serviceInterface.java和serviceImpl.java。

要生成文件所在模块可以修改。

只生成实体类

选择:custom-model-swagger

生成的java实体类如下:

如果有报错的话,把报错的地方进行解决。

我们可以看到:

字段注释(即使没有选中comment,也会生成注释)

knife4j注解和数据格式校验注解。

没有生成lombok注解(即使勾选了lombok,也不会生成)。

而是生成了对应的get、set方法。

我们可以把这些方法删掉,然后用@Getter和@Setter来代替。

另外

关于字段串长度的校验,插件为我们生成了两个注解,我们可以把@Size删掉。

这个本来是要生成@TableField的(表的字段名称),但是没有生成,看看你那里是否能够生成成功。

即使在annotation选中:mybatis plus 3也无法生成@TableField注解。

此实体类一般用户前后端数据交互时使用。

生成mapper和业务类

说明:

不需要的文件,可以通过点击选中,然后,点图中的“减号”进行删除。

支持多选(选中之后,按住Ctrl键不松手,继续点击其它文件即可)。

如果只需生成实体类文件,我们可以把上面这4个文件全部删除。

生成如下文件:

实体类示例

通过mybatis plus模板,可以生成对应的注解,但是就无法生成swagger和数据格式校验的注解。

另外,要想生成@TableName等注解,不仅要选中“Actual Column Annotation”,还要选中“Lombok”。

此时,实体类会生成lombok的@Data注解。

我们可以将两者结合使用。

Mapper.java示例

Mapper.xml示例

serviceInterface.java示例

serviceImpl.java示例

按照实际所需,调整生成文件所在目录即可。

4.补充说明

所需要的mybatisplus依赖

一般情况下,按照idea的提示进行添加即可。

<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-annotation</artifactId>
    <version>3.3.2</version>
    <scope>compile</scope>
</dependency>
<dependency>
    <groupId>com.baomidou</groupId>
    <artifactId>mybatis-plus-extension</artifactId>
    <version>3.4.3</version>
    <scope>compile</scope>
</dependency>

用于数据交换的实体类,通常还需要如下操作:

时间、日期类型序列化

/**
 * 当前行最后更新时间
 */
@ApiModelProperty("提交时间")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone="GMT+8")
private LocalDateTime rowLastUpdateTime;

指定日期类型的格式化方式。

在实体类上增加注解@ApiModel 

以下几个Lombok注解

@Getter
@Setter
@Builder
@Accessors(chain = true)

增加分页属性

@ApiModelProperty("第几页")
private Integer pageIndex;
@ApiModelProperty("每页展示几条")
private Integer pageSize;

分页传参,一般用的属性是pageIndex和pageSize。 

CRUD接口

PageList<HealthRecordSet> getHealthRecordSetByPage(HealthRecordSetVO hrsVo);

List<HealthRecordSet> getHealthRecordSet(HealthRecordSetVO hrsVo);

Boolean addHealthRecordSet(HealthRecordSet hrs);

Boolean updateHealthRecordSet(HealthRecordSet hrs);

Boolean deleteHealthRecordSet(Long id);

控制层

Controller一般会添加以下几个注解

@RestController
@RequestMapping("/datagather/sharedocument/hrs")
@Api(tags = "健康档案集", value = "健康档案集")
@Validated
public class HealthRecordSetController {
    
}

2024-08-16 17:17:39

@MapKey is required(取消mapper.java报红检查)

当我们安装好MybatisX插件后,如果你在Mapper.xml文件当中使用Map对象类接收jdbc返回的数据的话,就会报错:

网上的第一种解决办法是:

指定每条记录的主键,如@MapKey("id")。

但是,我加上后不管用。

之所以报错mapkey is required,是因为使用了mybatisX插件。

第二种解决办法:关闭mybatis的检查。

ctrl+alt+s打开setting,Editor→inspections→mybatis。

取消勾选后,就不再报错啦。

新项目设置最好也改一下

写在最后

  哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!

 相关推荐:

posted @ 2024-02-27 21:51  Marydon  阅读(5662)  评论(0编辑  收藏  举报