为什么在Idea的mybatis测试类里无法调用接口里的方法?
为什么我在测试类里调用UserMapper的list方法时会报错?
这个代码是我按着b站上黑马程序员2023新版JavaWeb开发教程写的。
我寻思我按照视频来的没有出现什么配置错误,代码也没写错,
然后我换了一个项目,在这个项目里没有引入mybatis的依赖,写了UserMapper接口,在测试类里调用UserMapper的list方法出现了一样的错误。Non-static method 'list()' cannot be referenced from a static context
这是什么原因,要怎么解决?
回答:
上面定义了一个变量userMapper,下面写的是UserMapper,编译器说我心里苦啊,哪来的UserMapper这个变量...注意看IDEA灰色的变量说明你定义了但是没有用到
回答:
你的代码写错了,注意java里是大小写区分的,UserMapper类和userMapper对象不是同一种东西。在你的测试类代码中,应该调用的是由myBatis实例化的一个UserMapper的对象,但你直接用UserMapper.list(),这样是在通过类名调用类的静态方法,而你的UserMapper接口里list()方法是非静态的,也就是non-static,因此才会提示你在静态上下文中无法调用non-static方法。正确的写法是,应该在测试类中先注入UserMapper对象声明为userMapper,然后用userMapper.list()从对象上调用.
关于如何注入UserMapper对象,你可以注意一下黑马的老师是怎么写的。注入UserMapper的前提是你的MyBatis相关配置和依赖都正确,spring启动的时候才会加载配置然后生成一个UserMapper的对象放在容器中,然后才能注入。因此你第二个项目尝试不引入myBatis就硬写,这样是忽视了使用mybatis的前提条件。
以上是 为什么在Idea的mybatis测试类里无法调用接口里的方法? 的全部内容, 来源链接: utcz.com/p/945421.html