父类坑

2021-01-21

java

我要让全世界都记住我的温柔。——曼德拉

今天在项目中遇到一个小坑可把我吓坏了,记录一下,以免再犯

首先还原下场景吧,我们写个类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
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;
}

}

很简单一个类,我们再写一个类继承一下它,这个类我们用作和数据库映射

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
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

1
UserPO userPO = new UserPO(888);

最后我们发现userPO.getId()出来的结果为null

是因为我们调用的父类的构造函数,是给父类的id赋值了

而我们getId()又被子类重写,导致获取不到我们想要的结果888

当时在项目中我使用了mybatis-plus,然后是这么写的

1
mpUserMapper.delete(Wrappers.lambdaQuery(new UserPO(888)));

最后执行出来的sql就很恐怖了。。。直接把整张表删了!!!

还好测试时发现了,不然就要跑路了-_-!之后的开发中应该多多避免类似的粗心。。。

image-20210121215054545