mybatis通过mybatis-plus查询的类型转化错误
注意:这是一个很特殊的使用错误,与lombok的@Bulider注解有关,可能不符合其他的使用场景
# 实体
为了使用方便,我在项目中使用了lombok的注解来帮助实体类的生成
@Builder
@Getter
@Setter
@ToString
public class TestModel{
@TableId
private Long id;
/**
* 姓名
*/
private String memberName;
/**
* 拓展id,这个值从数据库查出来将是null
*/
private String extendId;
/**
* 手机号
*/
private String phone;
/**
* 生日
*/
private LocalDateTime birthday;
}
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
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
# 使用
@Resource
private TestService testService; //注入
//调用
TestModel testModel=testService.getById(id)
1
2
3
4
5
6
7
2
3
4
5
6
7
# 报错
这时候你突然会发现你的代码报了一个错误
Cannot convert string '17611111111' to java.time.LocalDateTime value
经过测试,在bean拷贝的时候也会出现这种方式的报错
# 原因
单@Builder注解生成出来的是全参数构造函数,在mybatis查询中返回值的时候,因为extendId是null,会突然发现构造实体类的过程中你的参数错位,phone的值传到了birthday的位置,导致类型转换异常。
# 解决
因为默认是生成全参数构造,那么我们可以再通过Lombok的注解来生成其他的参数构造。
@Builder
@NoArgsConstructor //添加注解
@AllArgsConstructor //添加注解
@Getter
@Setter
@ToString
public class TestModel{
@TableId
private Long id;
/**
* 姓名
*/
private String memberName;
/**
* 拓展id,这个值从数据库查出来将是null
*/
private String extendId;
/**
* 手机号
*/
private String phone;
/**
* 生日
*/
private LocalDateTime birthday;
}
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
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
编辑 (opens new window)
上次更新: 2024-11-06, 19:27:10