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 调用的是 insert
和 updateById
方法。 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(){
}
}