第
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)的方法呢,于是我