记Mybatis的坑,解决Error attempting to get column ‘name‘ from result set,Cannot determine value type from

org.springframework.dao.DataIntegrityViolationException: Error attempting to get column ‘name’ from result set. Cause: java.sql.SQLDataException: Cannot determine value type from string ‘用户名’

从字面上理解,这个报错是因为Mybatis查完数据之后,没法把查出来的东西放到实体类里面。
这种情况一般分为这几种
1、数据库的字段跟实体类的字段对不上号。比如数据库里面是name,实体类里面是username,就对不上了。
2、数据库的字段类型,跟实体类的字段类型对不上。比如user_id在数据库中是int,到实体类里面是别的东西。

然而,我检查了好久自己的实体类和数据库,发现是对的上的。

上代码
@Data
public class DataTotalVo
{
    String unit;
    String name;
    long value;

    public DataTotalVo(String unit, String name, long value)
    {
        this.unit = unit;
        this.name = name;
        this.value = value;
    }
}

对比一下数据库,数据库内的数据类型也没问题。
很显然,我好像遇到了一个搜不到的问题,搜来搜去,其他答案都指向数据类型不匹配和字段不匹配。
通过跟正常的接口对比。以及找mybatis的相关教程,才发现,mybatis查完数据之后,会调用构造方法,默认会调用无参构造初始化对象,但是此处使用了工具自动生成无参构造,应该会正常调研,但我观看打包完的代码之后,发现打包编译好的代码里面并没有无参构造,原来,是下面这个有参构造的问题。
如果使用了工具帮你自动生成get、set方法和无参构造,那么,就尽可能不要自己写带参数的构造方法,会将工具生成的无参构造方法覆盖掉。如果硬要写,那就自己把无参构造方法也写一遍。

正确的代码
@Data
public class DataTotalVo
{
    String unit;
    String name;
    long value;

    public DataTotalVo(String unit, String name, long value)
    {
        this.unit = unit;
        this.name = name;
        this.value = value;
    }
    public DataTotalVo()
    {
        
    }
}

果然,,有了无参构造方法之后,完美解决报错
 

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

JAVA终结者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值