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。
取消勾选后,就不再报错啦。
新项目设置最好也改一下
写在最后
哪位大佬如若发现文章存在纰漏之处或需要补充更多内容,欢迎留言!!!
相关推荐:
本文来自博客园,作者:Marydon,转载请注明原文链接:https://www.cnblogs.com/Marydon20170307/p/18038488