MyBatisPlus的selectById()方法传了id返回null 详细解决方法

目录

问题情况:

使用了MyBatisPlus的selectById()方法,传了一个数据库中有的id;结果返回的对象是一个null。Xmapper接口类继承了BaseMapper,Xmapper.selectById(id)却返回null。DeBug也看到了有Id值。

解决思路分析:

这种情况下,第一是检查实体类属性id和数据库的字段名是不是一致。不一致的情况下,有没有添加数据库映射注解: @Tableld(value = 数据库中的id",type =ldType.ASSIGN ID)

解决方法:

当某个字段被设置为null时,通常表示该记录已被逻辑删除。这意味着该记录在逻辑上已经被删除,但在物理上仍然存在于数据库中。这样可以方便地恢复或查看已删除的记录。这样如果你想查询一个被逻辑删除的记录,而且忘记了加上逻辑删除字段的筛选条件,那么查询结果就会返回 null。

                  就去将数据库中逻辑删除的默认值设置0,代表未删除。(原有的记得也设置为0)


问题情况:

使用了MyBatisPlus的selectById()方法,传了一个数据库中有的id;结果返回的对象是一个null。Xmapper接口类继承了BaseMapper,Xmapper.selectById(id)却返回null。DeBug也看到了有Id值。

解决思路分析:

这种情况下,第一是检查实体类属性id和数据库的字段名是不是一致。不一致的情况下,有没有添加数据库映射注解: @Tableld(value = 数据库中的id",type =ldType.ASSIGN ID)

ASSIGN_ID代表开发者在插入数据时需要手动设置id字段的值

然而检查了发现没有问题,但是错误依旧还在。

解决方法:

实体类中有@TableLogic注解:用于标记实体类中作为逻辑删除字段的属性。它的作用是在进行数据删除操作时,不是真正的物理删除该行数据,而是将其标记为已删除状态,以便在后续需要查询该行数据时能够排除已被删除的数据。

然后我发现我的数据库的逻辑删除字段没用设置默认值,都为空。

当某个字段被设置为null时,通常表示该记录已被逻辑删除。这意味着该记录在逻辑上已经被删除,但在物理上仍然存在于数据库中。这样可以方便地恢复或查看已删除的记录。这样如果你想查询一个被逻辑删除的记录,而且忘记了加上逻辑删除字段的筛选条件,那么查询结果就会返回 null。

明白了这些,就去将数据库中逻辑删除的默认值设置0,代表未删除。(原有的记得也设置为0)

ALTER TABLE your_table_name MODIFY COLUMN is_deletion INT DEFAULT 0;

这个时候再去测试selectById()方法就没有问题了。

你可能感兴趣的:(java,数据库,开发语言,sql,mysql,mybatis,后端)