记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()
    {
        
    }
}

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

你可能感兴趣的:(mybatis,数据库)