刚才在利用MyBatis Plus查询时遇到一个标题所述错误。
查询代码:
QueryWrapper wrapper = new QueryWrapper();
wrapper.eq("name", "李四");
System.out.println(mapper.selectList(wrapper));
代码是没问题的,但会报错。
我当时其实是有点慌的,因为在上次还可以使用,代码都没改变。又想着昨天晚上我配置了Python的环境变量,是不是idea会受到影响(就很慌)。
然后我又往下看了一下报错的代码 ,发现了这个:
这个错误太明显了,分明就是SQL语句的错误,但是我没用deleted呀,是不是修饰符在搞事情,于是我仔细看了一下实体类中用于修饰属性的修饰符,看到了这个:
这个就是为了实现一个逻辑删除,意思就是在数据库中并没有真正删除数据,而是将标识符deleted由0变为1就行了,这样的话就可以实现在查询时默认不再显示当前标识的数据,恰巧这次的报错信息就是deleted=0,是不是这个属性在搞错,于是我索性直接把这两行代码全部注释掉,于是就不报错了。
接着我又想着是不是仅仅修饰符@TableLogic一直在捣鬼,接着就把
private Integer deleted;
注释取消了,发现还是可以查询成功的,说明就是@TableLogic在捣鬼。
我感觉@TableLogic在修饰时会强制加上它修饰的属性而结束一个SQL语句,导致再加其他查询条件就会认为是硬生生的拼接上的错误语句就会发生报错。(我没看其他的官方说法,仅个人想法)
冲冲冲,奥利给!!!