目录

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

# 使用


@Resource
private TestService testService; //注入

//调用
TestModel testModel=testService.getById(id)

1
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
上次更新: 2024-11-06, 19:27:10
最近更新
01
java playwright爬虫
11-06
02
连接chrome调试
07-23
03
连接chrome调试
07-23
更多文章>