这个错误表明你尝试以静态方式调用了一个非静态方法 list()
。在 MyBatis 中,Mapper 接口的方法都是实例方法,不能直接通过类名静态调用。
常见错误场景:
1. 在测试类中直接使用 MapperInterface.list()
方式调用
2. 没有正确注入或获取 Mapper 接口的实例
3. 在静态方法中尝试调用 Mapper 方法
// 正确方式:先获取Mapper实例
@Autowired
private UserMapper userMapper; // 假设UserMapper是你的Mapper接口
@Test
public void testList() {
List<User> users = userMapper.list(); // 通过实例调用
// 断言或其他测试逻辑
}
@RunWith(SpringRunner.class)
@SpringBootTest
public class MyBatisTest {
@Autowired
private UserMapper userMapper;
@Test
public void testList() {
List<User> users = userMapper.list();
// 测试逻辑
}
}
@Test
public void testList() {
try (SqlSession session = sqlSessionFactory.openSession()) {
UserMapper mapper = session.getMapper(UserMapper.class);
List<User> users = mapper.list();
// 测试逻辑
}
}
@Autowired
或其他方式正确注入 Mapper@SpringBootTest
SqlSessionFactory
正确初始化@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {
@Autowired
private UserMapper userMapper;
@Test
public void testListUsers() {
List<User> users = userMapper.list();
assertNotNull(users);
assertFalse(users.isEmpty());
}
}
通过以上方法,你应该能够解决 "Non-static method cannot be referenced from a static context" 的问题。