- List item## MyBatis-Plus 关于 Long 型主键填充不生效的问题
在使用 MyBatis-Plus 进行开发时,如果我们使用 Long 类型作为主键,并希望通过策略自动生成主键值的话,可能会遇到主键填充不生效的问题。本文将详细介绍这个问题的原因和解决方案,并提供相关实例进行演示。
问题原因
在 MyBatis 中,自动生成主键值的方式有多种,比如通过数据库的自增字段、通过 UUID、通过雪花算法等。而 MyBatis-Plus 默认的主键生成策略是雪花算法(Snowflake)。
在使用 MyBatis-Plus 生成主键时,如果主键字段类型是 Long,那么生成的主键值将会被填充到实体对象中。但是,在某些情况下,主键填充可能不生效,导致生成的主键值无法保存到数据库中。
这个问题的根本原因是,当执行插入操作时,MyBatis 在执行 SQL 之前会先执行 prepareStatement()
方法,该方法会预编译 SQL 语句,并根据参数类型设置占位符的值。而 Long 类型的值在 JDBC 预编译中并没有一个对应的类型,所以 MyBatis 会将其作为一般的 Object 类型进行处理,导致主键填充失效。
解决方案
为了解决主键填充不生效的问题,需要通过自定义 SQL 语句的方式来手动实现主键填充。
步骤一:定义实体类
首先,我们需要定义一个实体类,并设置 Long 类型的主键字段。