1.现象描述
观察某张表的数据时,发现设置了自增属性的AutoId,在插入数据后并不是自增的,而是数值跳跃着增加的。
2.问题排查
在确认AutoId的自增属性设置没有问题后,开始怀疑是不是insert语句的问题,insert语句是MyBatis Generator自动生成的,示例如下(非线上示例,只是用来说明):
insert into 语句在语法上是没有问题的,那缩小排查范围,就是selectKey的用法可能有问题!
3.selectKey 用法再认识
resultType:表示的是返回主键的类型
keyProperty:对应的domain 对象中需要被赋值的属性,一般是主键
order:如果设置为 BEFORE,那么它会首先选择主键,设置 keyProperty 然后执行插入语句。如果设置为 AFTER,那么先执行插入语句,然后是 selectKey 元素
4.selectKey用法的坑
SelectKey需要注意order属性,像MySQL一类支持自动增长类型的数据库中,order需要设置为after才会取到正确的值,像Oracle这样取序列的情况,需要设置为before。
在上面示例的insert用法中,就是order属性设置成了BEFORE才导致自增属性没有生效。改成AFTER后,主键开始自增了。
领取专属 10元无门槛券
私享最新 技术干货