使用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就是如果含有无参构造函数的话,他不会返回主键的值,我这边调用无参构造不会返回主键,这就不知道为什么了。有懂得大佬希望能够解答一下。