问题
数据库我预期是用自增ID,但是用MybatisPlus动态SQL框架写入,ID是非常大的一个值。
分析
调用insert是动态生成SQL,id为空。
由于动态SQL主要sqlSession执行过程如下图,其中关键到了预编译参数的process方法,此时的id还是null。
此时会根据entity去获取表的信息,其中就包含了ID生成规则的定义。
其中默认在框架启动的时候定义为idType为ASSIGN_ID的策略。
接着就去处理主键。
这里用内部的方法填充ID
可以看到才去类似时间戳算法的生成逻辑。
问题解决
在id上添加 @TableId(value = “id”, type = IdType.AUTO) 即可
总结
框架自动化高了之后就会采取约定大于配置的方式提高开发效率,但是对于约定的认识框架开发人员与使用人员可能认知是不同的,例如此场景我认为默认就是自增,但是框架开发人员默认是分布式ID生成方案,造成了一定的困惑。