在写Mybatis时遇到的问题:No constructor found in 包名+类名

刚学习mybatis知识,就遇到很多小问题。当然是特别小,但是足够让我花费很多时间

我在mysql中创建了users表,是人的,有id, name,age;然后运用mybatis知识在eclipse中写了一个可以操作的映射文件,增删改查数据库。

下面是User实体类

package com.gyc.day01.mybatis.test1;

public class User {
    private int id;
    private String name;
    private int age;
    
    
    public User(int id, String name, int age) {
        super();
        this.id = id;
        this.name = name;
        this.age = age;
    }
    


    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public int getAge() {
        return age;
    }
    public void setAge(int age) {
        this.age = age;
    }
    @Override
    public String toString() {
        return "User [id=" + id + ", name=" + name + ", age=" + age + ", toString()=" + super.toString() + "]";
    }
    
}

如上,构造方法已经有了,但是在测试类Test2中testAdd()按F11却老是出一大堆错误包括No constructor found in。。。。。

org.apache.ibatis.exceptions.PersistenceException:

### Error querying database. Cause: org.apache.ibatis.executor.ExecutorException: No constructor found in com.gyc.day01.mybatis.test1.User matching [java.lang.Integer, java.lang.String, java.lang.Integer]
### The error may exist in com/tszhao/mapper/UserMapper.java (best guess)
### The error may involve com.tszhao.mapper.UserMapper.selectUser
### The error occurred while handling results
### SQL: select * from users where id=?
### Cause: org.apache.ibatis.executor.ExecutorException: No constructor found in com.gyc.day01.mybatis.test1.User matching [java.lang.Integer, java.lang.String, java.lang.Integer]
at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
...




package com.gyc.day01.mybatis.test2;

import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.junit.Test;

import com.gyc.day01.mybatis.test1.User;
import com.gyc.day01.mybatis.util.MybatisUtils;

public class Test2 {
  /*  @Test*/这是问题所在,先注释了
    public void testAdd(){
        SqlSessionFactory factory=MybatisUtils.getFactory();
        //默认是手动提交的
        SqlSession session = factory.openSession();

        String statement="com.gyc.day01.mybatis.test2.userMapper.addUser";
        int insert = session.insert(statement, new User(-1,"kk",24));
        session.commit();
        System.out.println(insert);
    }
}


删除了构造方法,在另一个类Test1中却没有问题,由于是新手,很生气。后来终于找到了方法,

原来写测试方法时需要在Junit中去写测试程序,而不是直接写一个类Test2就行了,还要写上@Test,然后会提示你是否在junit中run

最后终于运行了。





你可能感兴趣的:(MyBatis小问题)