我要让全世界都记住我的温柔。——曼德拉
今天在项目中遇到一个小坑可把我吓坏了,记录一下,以免再犯
首先还原下场景吧,我们写个类
package com.ruben.pojo; import lombok.Data; /** * @ClassName: BaseEntity * @Description: 我还没有写描述 * @Date: 2021/1/21 0021 21:01 * * * @author: <achao1441470436@gmail.com> * @version: 1.0 * @since: JDK 1.8 */ @Data public class BaseEntity { protected Integer id; public BaseEntity() { } public BaseEntity(Integer id) { this(); this.id = id; } }
很简单一个类,我们再写一个类继承一下它,这个类我们用作和数据库映射
package com.ruben.pojo.dataObject;/** * @ClassName: UserDataObject * @Date: 2020/11/21 0021 15:55 * @Description: */ import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import com.ruben.pojo.BaseEntity; import com.ruben.pojo.UserInfo; import lombok.*; import java.io.Serializable; /** * @ClassName: UserPO * @Description: 我还没有写描述 * @Date: 2020/11/21 0021 15:55 * * * @author: <achao1441470436@gmail.com> * @version: 1.0 * @since: JDK 1.8 */ @Data @Builder @ToString @NoArgsConstructor @AllArgsConstructor @TableName("user") public class UserPO extends BaseEntity implements Serializable { private static final long serialVersionUID = -1891465370283313432L; private Integer id; private String username; private String password; @TableField(exist = false) private UserInfo userInfo; public UserPO(Integer id) { super(id); } }
然后我们使用父类的构造方法去创建这个对象,并赋值id
UserPO userPO = new UserPO(888);
最后我们发现userPO.getId()
出来的结果为null
是因为我们调用的父类的构造函数,是给父类的id
赋值了
而我们getId()
又被子类重写,导致获取不到我们想要的结果888
当时在项目中我使用了mybatis-plus
,然后是这么写的
mpUserMapper.delete(Wrappers.lambdaQuery(new UserPO(888)));
最后执行出来的sql
就很恐怖了。。。直接把整张表删了!!!
还好测试时发现了,不然就要跑路了-_-!
之后的开发中应该多多避免类似的粗心。。。