MyBatis-Spring踩坑日记

使用MyBatis操作数据库时 报错Cause: java.sql.SQLException: Invalid value for getInt();

当我在使用mybatis操作数据库的时候,报错这个,字面意思上就是说参数类型不对,不可以将XXX转换为整形,但我一看自己的参数类型,也确实没问题。下面我用相对应的例子来解释为什么会报这个错误

首先,我们创建一个表test,test有两个属性一个int 类型的test_id还有一个varchar类型的test_name;

请务必记住这个顺序!!!后面要考的!!

我们这里的是name在前面;id在后面;
随后我们创建实体类test

class Test{ 
    private int test_id;
    private String test_name;

    public Test(int test_id, String test_name) {
        this.test_id = test_id;
        this.test_name = test_name;
    }

    public int getTest_id() {
        return test_id;
    }

    public void setTest_id(int test_id) {
        this.test_id = test_id;
    }

    public String getTest_name() {
        return test_name;
    }

    public void setTest_name(String test_name) {
        this.test_name = test_name;
    }
}

这里我们创建了一个实体类,但我们只写了一个构造函数,而这个构造函数的参数顺序和数据库中数据的顺序相反,此时就会报错前面所说的内容
解决办法有两种:1:创建一个无参构造函数 ;2:将带参数的构造函数的顺序修改为数据库中的数据
我一开始还以为这个mybatis中返回类型会自动匹配内容来进行返回类的构建,原因也在我自己需要使用构造函数来进行初始化的时候忘了默认的无参构造函数就不在了,导致了这个错误,当没有无参构造函数时,mybatis会自动匹配参数个数和你查询表的数据的个数从而决定调用哪一个代参构造函数,但值得注意的是参数类型和顺序必须和数据库中的一直,例如int对应int varchar对应string datetime对应DatetTme(这个不太确定,大家可以自己试一下)我说的上诉情况中是对应的select全部(*)它才会根据你建表的属性顺序,如果你是选取部分属性那么构造函数参数应该对应你选区的部分属性;

前面中方法一有一个BUG就是如果含有无参构造函数的话,他不会返回主键的值,我这边调用无参构造不会返回主键,这就不知道为什么了。有懂得大佬希望能够解答一下。

时隔一天,我终于找到了原因,t m 的 ,我数据库建表的时候前面多了一个空格!!!;

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值