mybatis中返回主键一直为1的问题怎么解决
更新时间:2023-11-06问题描述
在使用Mybatis进行插入操作时,返回主键值一直为1,导致无法插入成功,该如何解决?
原因分析
返回主键值一直为1的原因在于Mybatis的默认主键生成策略是使用JDBC的自动生成主键,而在一些数据库中,auto_increment的初始值默认为1,因此每次都会返回1,导致插入不成功。
SELECT LAST_INSERT_ID() INSERT INTO user(name, age) VALUES(#{name}, #{age})
解决方案
解决这个问题的方法就是改变默认的主键生成策略,使用数据库的自增主键。
在MySQL数据库中,可以通过将auto_increment的初始值设置为其他值来解决这个问题。例如将auto_increment的初始值设置为1001,则第一次插入时返回的主键值就为1001。
ALTER TABLE user AUTO_INCREMENT=1001;
如果不想改变数据库配置,也可以在Mybatis配置文件中设置主键生成策略为useGeneratedKeys。
INSERT INTO user(name, age) VALUES(#{name}, #{age})
总结
在使用Mybatis进行数据库操作时,需要注意主键生成策略的选择,特别是当使用JDBC的自动生成主键策略时,需要注意数据库中auto_increment的初始值,以免返回主键值一直为1的问题。
当然,还可以选择使用其他方式生成主键,如UUID或雪花算法等。