bug记录
达梦与mbplus
问题1:分页失效
问题描述:在新模块中正常引入达梦与mbplus,mbplus自带的page方法分页无效。无其他报错信息,返回对象正常,但是对象属性异常,total与size以及current等分页必备的属性异常,导致的分页无效。控制台无报错提示,无警告。
问题原因:使用达梦,没有指定数据库方言的类型。mbplus支持的数据库中包含达梦,因此简单的配置就可以解决。
解决方法:
在 Spring Boot 项目中,通过 Java 配置来添加分页插件:
@Configuration
@MapperScan("scan.your.mapper.package")
public class MybatisPlusConfig {
/**
* 添加分页插件
*/
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); // 如果配置多个插件, 切记分页最后添加
// 如果有多数据源可以不配具体类型, 否则都建议配上具体的 DbType
return interceptor;
}
}
属性名 | 类型 | 默认值 | 描述 |
---|---|---|---|
overflow | boolean | false | 溢出总页数后是否进行处理 |
maxLimit | Long | 单页分页条数限制 | |
dbType | DbType | 数据库类型 | |
dialect | IDialect | 方言实现类 |
备注:
官方介绍中,建议单一数据库类型的均设置dbType。
分页插件置后的原因:分页插件需要count sql,因此在执行链最后面才能保证准确性。
问题2:插入失败,无效的列
问题描述:使用达梦数据库时,编写crud代码,但是使用save时插入失效,控制台报错提示无效的列,针对双引号进行反复测试,均无法解决,数据库采用大小写不敏感,自定义sql方法可行。
问题原因:目前暂定为字段转义,数据库采用大小写不敏感,因此在实体类中去掉所有字段的转义,可实现正常插入。(搜索引擎提到的原因包含:版本不适配与mbplus生成的sql包含换行符,达梦无法正确识别等原因)
解决方法:临时解决方法,覆盖或者重写一个save方法。可能的方案,根据数据库的大小写敏感,处理好转义的关系。
备注:转义问题,除却插入之外的查询更新与删除均能正常运行,插入失效,因此一开始将问题放在mb与达梦本身上,在测试插入时,因此实体字段较多,因此只测试插入一个字段的情况,对于双引号转义也只是处理了一个字段,结果均为无效的列。