目录
问题情况:
使用了MyBatisPlus的selectById()方法,传了一个数据库中有的id;结果返回的对象是一个null。Xmapper接口类继承了BaseMapper,(id)却返回null。DeBug也看到了有Id值。
解决思路分析:
这种情况下,第一是检查实体类属性id和数据库的字段名是不是一致。不一致的情况下,有没有添加数据库映射注解: @Tableld(value = 数据库中的id",type = ID)
解决方法:
当某个字段被设置为null时,通常表示该记录已被逻辑删除。这意味着该记录在逻辑上已经被删除,但在物理上仍然存在于数据库中。这样可以方便地恢复或查看已删除的记录。这样如果你想查询一个被逻辑删除的记录,而且忘记了加上逻辑删除字段的筛选条件,那么查询结果就会返回 null。
就去将数据库中逻辑删除的默认值设置0,代表未删除。(原有的记得也设置为0)
问题情况:
使用了MyBatisPlus的selectById()方法,传了一个数据库中有的id;结果返回的对象是一个null。Xmapper接口类继承了BaseMapper<x>,(id)却返回null。DeBug也看到了有Id值。
解决思路分析:
这种情况下,第一是检查实体类属性id和数据库的字段名是不是一致。不一致的情况下,有没有添加数据库映射注解: @Tableld(value = 数据库中的id",type = ID)
ASSIGN_ID代表开发者在插入数据时需要手动设置id
字段的值
然而检查了发现没有问题,但是错误依旧还在。
解决方法:
实体类中有@TableLogic注解:用于标记实体类中作为逻辑删除字段的属性。它的作用是在进行数据删除操作时,不是真正的物理删除该行数据,而是将其标记为已删除状态,以便在后续需要查询该行数据时能够排除已被删除的数据。
然后我发现我的数据库的逻辑删除字段没用设置默认值,都为空。
当某个字段被设置为null时,通常表示该记录已被逻辑删除。这意味着该记录在逻辑上已经被删除,但在物理上仍然存在于数据库中。这样可以方便地恢复或查看已删除的记录。这样如果你想查询一个被逻辑删除的记录,而且忘记了加上逻辑删除字段的筛选条件,那么查询结果就会返回 null。
明白了这些,就去将数据库中逻辑删除的默认值设置0,代表未删除。(原有的记得也设置为0)
ALTER TABLE your_table_name MODIFY COLUMN is_deletion INT DEFAULT 0;
这个时候再去测试selectById()方法就没有问题了。