基本信息
文件名称:mybatisplus开发过程中遇到的问题记录及解决.docx
文件大小:22.36 KB
总页数:16 页
更新时间:2025-05-21
总字数:约1.35万字
文档摘要

mybatisplus开发过程中遇到的问题记录及解决

目录一、使用mp生成代码时1、使用saveOrUpdateBatch或者saveBatch等新增修改方法时2、生成实体类时3、引用第2钟错误,当我们使用mp生成代码的时候,只想生成实体类二、使用mp封装的方法时1、使用修改方法,修改对象某一字段为null三、自定义sql查询1、mapper接口中注解查询四、使用mybatisplus性能分析插件总结本文主要记录本人使用mybatisplus开发过程中碰到的问题,以及解决方案

一、使用mp生成代码时

1、使用saveOrUpdateBatch或者saveBatch等新增修改方法时

问题情况:

MybatisPlusException:error:cannotexecute.becausecannotfindcolumnforidfromentity

原因:

不能执行。因为无法从实体中找到id列使用mp自动生成代码时,可能有这一行代码,会导致不生成主键ID,变成自定义基础的Entity类,公共字段

strategy.setSuperEntityColumns(id)

解决方法:

将上面这行代码注释即可

可能生成ID之后任旧无法执行,检查下面的原因

可能会存在实体类属性与数据库字段不一致的情况,所以我们在使用mp生成实体类时,最好在生成策略中加上这个行

strategy.setEntityTableFieldAnnotationEnable(true);

目的:生成之后的实体类中的每个属性会多出一个注解,来用于属性和数据库字段的对应

@TableField(id)

2、生成实体类时

数据库中的int类型ID变成了String

问题情况:

原因及解决方法:

我这里是Mysql数据库,生成代码时,做数据库类型转换时,原本选择的是Oracle数据库,改成Mysql数据的类型就可以

3、引用第2钟错误,当我们使用mp生成代码的时候,只想生成实体类

问题情况:

引用第2钟错误,当我们使用mp生成代码的时候,可能实体类或者某一个文件中的代码生成的有问题,需要重新生成,但是又不想覆盖其他Controller、Mapper等文件,我们如何选择只生成实体类?

解决方法:

我百度搜过,大佬们生成代码时,基本上都是生成所有的文件,所以我就自己开始研究。

请看下面这段代码,大家应该都明白这是什么意思,就是让我们生成的mapper.xml生成到我们指定的resource的文件夹下面,那么它原本的xml为什么不会生成了呢?

//自定义输出配置

ListFileOutConfigfocList=newArrayList();

//自定义配置会被优先输出

focList.add(newFileOutConfig(templatePath){

@Override

publicStringoutputFile(TableInfotableInfo){

//自定义输出文件名,如果你Entity设置了前后缀、此处注意xml的名称会跟着发生变化!!

returnprojectPath+/src/main/resources/mapperWorkDiscovery/+tableInfo.getEntityName()+Mapper+StringPool.DOT_XML;

cfg.setFileOutConfigList(focList);

mpg.setCfg(cfg);

//配置模板

TemplateConfigtemplateConfig=newTemplateConfig();

//让默认生成mapper的目录不再生成

templateConfig.setXml(null);

mpg.setTemplate(templateConfig);

关键点在这一行代码

templateConfig.setXml(null);

在配置模板的时候,我们设置了模板的xml为null,那么在我们改变xml的生成路径之后,原本的xml就不会自己生成了,所以我想会不会有.setMapper(null)、.setController(null)的方法呢,于是我