c语言编程笔录

首页 >   > 笔记大全

笔记大全

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或雪花算法等。