Closed
Description
如下接口:
selectBatchIds
deleteById
deleteBatchIds
selectById
所有的Model都继承一个抽象模型类
public abstract class BaseModel {
private Long id;
@TableLogic
private Byte isDeleted;
private LocalDateTime createdTime;
private LocalDateTime updatedTime;
private LocalDateTime deletedTime;
private Long creatorId;
private Long updatedById;
private Long deletedById;
}
这是spring整合的配置文件片段
<bean id="logicSqlInjector" class="com.baomidou.mybatisplus.mapper.LogicSqlInjector" />
<!-- 定义 MP 全局策略 -->
<bean id="globalConfig" class="com.baomidou.mybatisplus.entity.GlobalConfiguration">
<property name="idType" value="0"/>
<property name="dbType" value="mysql"/>
<!-- 全局表为下划线命名设置 true -->
<property name="dbColumnUnderline" value="true"/>
<property name="sqlInjector" ref="logicSqlInjector" />
<property name="logicDeleteValue" value="1" />
<property name="logicNotDeleteValue" value="0" />
</bean>
<!-- spring和MyBatis -->
<bean id="sqlSessionFactory" class="com.baomidou.mybatisplus.spring.MybatisSqlSessionFactoryBean">
<property name="dataSource" ref="dataSource" />
<!-- 自动扫描mapping.xml文件 -->
<property name="mapperLocations" value="classpath:mybatis/mapper/*.xml" />
<property name="configLocation" value="classpath:mybatis/mybatis-context.xml" />
<property name="plugins">
<array>
<bean class="com.baomidou.mybatisplus.plugins.PaginationInterceptor" >
<property name="dialectClazz" value="mysql" />
</bean>
</array>
</property>
<!-- MP 全局配置注入 -->
<property name="globalConfig" ref="globalConfig"/>
</bean>
<!-- DAO接口所在包名,Spring会自动查找其下的类 -->
<bean class="org.mybatis.spring.mapper.MapperScannerConfigurer">
<property name="basePackage" value="com.mo9.mule.dao.mapper" />
<property name="sqlSessionFactoryBeanName" value="sqlSessionFactory" />
</bean>
Activity
huayanYu commentedon Aug 3, 2017
检查ID相关配置,详细阅读文档.
不行请贴实体代码和配置.
guqiyao commentedon Aug 3, 2017
已经尝试出来了,如果id字段继承自父类,则会出现此异常
若直接在实体类中定义id,不是继承而来的,则不会出现Invalid bound statement异常
@huayanYu
qmdx commentedon Aug 3, 2017
@guqiyao 不可能不能继承,我自己使用的时候就是继承 id 你肯定有别的错误
guqiyao commentedon Aug 3, 2017
@qmdx 麻烦你看下我的配置,是哪里配错了吗?我是按照文档来配置的
qmdx commentedon Aug 3, 2017
@guqiyao 目测你这个mp版本比较老,新版已经不在需要指定数据库类型,升级最新版本 2.1.0 试试。 原因仔细排查
guqiyao commentedon Aug 3, 2017
@qmdx bug解决了,mp在初始化TableInfo 对象时,会判断model是否带有 主键, 在初始化的逻辑中,会将model的所有字段都取出并存储在集合中,而问题在于2.0.9版本中的逻辑是判断集合中第1个元素(即model的字段)是不是id,如果是则判断有主键,如果没,则判断这个实体没有主键,但是id这个字段并不一定排在集合的第1位,所以导致这个bug产生,2.1.0中的源码经过观察,应该是已经解决这个bug了,谢谢你的回答,其次希望你以后不要轻易的关闭问题,这个问题确实是2.0.9中的bug引起的
yuxiaobin commentedon Aug 10, 2017
2.0.9又不能改了,不关闭留着干嘛?
新版本早已修复,当然要关闭
guqiyao commentedon Aug 10, 2017
@yuxiaobin 你怕是连原委都没搞清楚就来评论了吧.
qmdx commentedon Aug 10, 2017
@guqiyao 文档说的很清楚没有主键设置情况下不能使用 id 相关操作,有异议加入我们群
guqiyao commentedon Aug 10, 2017
@qmdx 文档写的很清楚,没有 @TableId 注解也可以使用,但主键必须要叫 id,而且bug我已经发现了,并且这个bug在2.0.9之后已经修复
qmdx commentedon Aug 10, 2017
@guqiyao 确实2.0.9 版本 id 如果在父类或者不是第一个的情况下使用存在问题,对没有主键加上主键也可以使用,但是会把注解字段当做 byId 的操作内容
yuxiaobin commentedon Aug 10, 2017
你在用2.0.9版本报bug,都告诉你这就是09的bug(判断ID用了第一个元素),你换2.1.0就没这个问题了,那不关闭这个bug?
您佬继续用09?继续报bug?可笑
我针对的是你说的
“其次希望你以后不要轻易的关闭问题,这个问题确实是2.0.9中的bug引起的”
guqiyao commentedon Aug 10, 2017
@yuxiaobin 你是来搞笑的?
yuxiaobin commentedon Aug 10, 2017
我不跟你搞笑,只是厌恶你这种说话方式。都告诉你答案了,还想怎样?为了09这个bug挥刀自宫吗?you can you up
4 remaining items