Unsupported conversion from LONG to java.sql.Timestamp

使用mybatisplus查询实体时报错Unsupported conversion from LONG to java.sql.Timestamp
先说结论:
mybatis建议实体类上带上无参构造,当然java类虽然默认提供无参构造,但是现在都会用@Data注解简化开发,里面会有 有参构造
所以默认的无参构造就没了,这个时候mybatis映射时 你实体类必须和表中你定义的字段顺序保持一致 才能映射成功,否则就报上面错误
原因:mybatis底层进行实体映射时会通过无参构造进行创建对象然后使用set方法注入属性,从而创建出完整的对象。
报错解决方式
1、使用

@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor

实体类有了无参构造,mybatis框架会调用这个默认构造方法来构造实例对象
2、不用@NoArgsConstructor @AllArgsConstructor时你必须保持 实体类顺序和表中字段一直才能映射成功(这种就不建议了,业务中存在潜在的风险)。
实体:

@TableName(value = "upload_conf")
@Data
@Builder
public class UploadConf {
    Long id;
    String name;
    @JSONField(name = "desc")
    String desc;
    String link;
    Integer type;
    @JSONField(name = "app_code")
    String appCode;
    Integer ver;
    @JSONField(name = "created_at")
    Date createdAt;
    @JSONField(name = "updated_at")
    Date updatedAt;
    String md5;
}

另外谈一下为什么我们只需要无参构造使用@NoArgsConstructor还要带上@AllArgsConstructor
详见传送门
好了,后面有时间探讨原理,写业务时尽可能的不局限在解决问题上,要学会跟踪源码处理一类问题
源码可以看下b站鲁班大叔的mybatis感觉
创建时构造对象主要四种
1、原始类型创建如String、Integer等 这种直接创建
2、基于构造参数映射 创建
3、返回结果为List,或存在无参构造方法,基于ObjectFactory创建
4、基于自动映射,自动依次查找型是否与指定构造方法匹配,如果有就自动创建
后面源码再补吧

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值