开发者社区 问答 正文

springboot使用了mybatisplus的baseMapper的方法,却提示报错方法不存在

报错信息如下: Invalid bound statement (not found): com.tech.transport.mapper.EmployeeMapper.selectOne

这是service层的接口实现类
@Service
@Transactional(readOnly = true,propagation = Propagation.SUPPORTS)
public class EmployeeServiceImpl extends ServiceImpl implements IEmployeeService {
@Override
public Employee login(String username, String password) {
    return baseMapper.selectOne(new QueryWrapper<Employee>()
            .eq("username",username)
            .eq("password",password));
}
}


这是mapper
@Mapper
public interface EmployeeMapper extends BaseMapper {
}


这是controller
@RestController
public class LoginController {
@Autowired
private IEmployeeService employeeService;
 
@PostMapping("/login")
@ApiOperation(value = "登录接口" + "")
public AjaxResult login(@RequestBody Map<String,Object> params){
    String username = (String) params.get("username");
    String password = (String) params.get("password");
    Employee employee = employeeService.login(username,password);
    if(null!=employee){
        //登录成功
        return AjaxResult.me();
    }
    //登录失败
    return AjaxResult.me().setSuccess(false).setMessage("用户名或密码错误!");
}

为什么调用的是basemapper的selectOne方法,但是会报错employeeMapper找不到selectOne

展开
收起
佚名4918 2021-10-18 18:08:15 3059 分享 版权
阿里云 AI 助理回答

这个报错信息Invalid bound statement (not found): com.tech.transport.mapper.EmployeeMapper.selectOne通常意味着MyBatis在运行时无法找到与指定方法相对应的SQL映射语句。尽管你的EmployeeMapper接口继承了BaseMapper,而BaseMapper中应该已经包含了selectOne方法,但问题可能出在以下几个方面:

  1. Mapper Interface 未被扫描:确保你的EmployeeMapper接口所在的包路径被MyBatis的扫描路径所覆盖。如果你使用的是Spring Boot或类似的框架,需要检查配置文件(如application.yml或application.properties)中是否正确设置了mybatis-plus.mapper-locations或者mybatis.type-aliases-packagemybatis.mapperLocations等属性,以确保MyBatis能够扫描到你的Mapper接口。

  2. 依赖问题:确认你的项目中已经正确引入了MyBatis-Plus的相关依赖,并且版本兼容无误。有时候,依赖冲突也可能导致这样的问题。

  3. 编译或构建问题:确保你的Mapper接口以及相关XML映射文件(如果有的话)都被正确编译并打包到了最终的输出目录中。有时候IDE的构建设置或Maven/Gradle的配置问题可能导致某些资源没有被包含进来。

  4. @Mapper注解与扫描策略:虽然你已经在EmployeeMapper上使用了@Mapper注解,但也要确保你的项目配置支持这种方式的自动扫描。如果使用了@ComponentScan或其他方式来管理Bean扫描,确保这些配置也包括了Mapper接口所在的包。

  5. 配置类中的bean定义:在一些情况下,如果自定义了MyBatis或MyBatis-Plus的配置类,请检查是否正确设置了SqlSessionFactory或MapperScannerConfigurer等,确保它们能正确识别和配置你的Mapper接口。

解决步骤建议: - 首先,检查项目的配置文件,确保Mapper接口的包路径被正确配置。 - 确认所有必要的依赖都已添加且版本兼容。 - 清理并重新构建项目,检查输出目录中是否有对应的Mapper接口类和可能的XML映射文件。 - 检查项目中是否存在自定义的MyBatis或MyBatis-Plus配置,确保这些配置正确无误。 - 如果以上均无误,尝试重启IDE和服务器,有时候缓存或进程状态也会导致此类问题。

希望这些建议能帮助你解决问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答