跳到主要内容

MyBatis

记录各个组件问题解决方案

1、使用 Insert 语句新增数据是,如果主键是自增的话,如何获取到主键?

useGeneratedKeys="true" keyProperty="deptId"

https://mybatis.org/mybatis-3/zh_CN/sqlmap-xml.html#insert-update-%E5%92%8C-delete

2、MyBatis-Plus 在分页时,求总数的 SQL 会丢失部分字段

生成 countSql 时,如果 left join 的表不参与 where 条件,会将其优化掉。建议在任何带有 left join 的 SQL 中,都给表和字段加上别名。

https://baomidou.com/plugins/pagination/#%E5%85%B6%E4%BB%96%E6%B3%A8%E6%84%8F%E4%BA%8B%E9%A1%B9

3、There is no getter for property named 'xxxx'

List<WorkOrderEfficiencyAnalysis> efficiencyAnalysis(
WorkOrderEfficiencyAnalysisParam param);

问题原因: 方法定义时没有使用 @Param("xxx") 注解

List<WorkOrderEfficiencyAnalysis> efficiencyAnalysis(
@Param("param") WorkOrderEfficiencyAnalysisParam param);

4、saveOrUpdateBatch 并不会逻辑删除一条数据

mybatis-plus:
global-config:
db-config:
# 删除逻辑字段名
logic-delete-field: deleteStatus
# 逻辑未删除值
logic-delete-value: 0
# 逻辑删除值
logic-not-delete-value: 1

MyBatis-Plus 配置了 logic-delete-field,在使用 saveOrUpdateBatch 时,将 deleteStatus 字段设置为 0 时,在更新时会将 deleteStatus 字段更新为 1,而不是逻辑删除。

原因:saveOrUpdateBatch 调用的是 insertupdateById 方法。 updateById 会将 deleteStatus 字段更新为 1。

5、java.lang.Object Not Found TableInfoCache.

在适配不同的版本时,需要覆盖继承了 ServiceImpl<M extends BaseMapper<T>, T> 的类中的方法。

在执行 saveBatch 方法时,会抛出异常 java.lang.Object Not Found TableInfoCache.

具体代码跟踪:com.baomidou.mybatisplus.core.toolkit.ReflectionKit#getSuperClassGenericType.

修改之前的代码:

public class XXXXServiceImpl extends AaaaServiceImpl {

@Override
public void m1(){

}
}

解决方法:给被继承的类加上泛型。

修改之后的代码:

public class XXXXServiceImpl extends AaaaServiceImpl<AaaaMapper, Aaaa> {
@Override
public void m1(){

}
}