当我们使用MyBatis-Plus时,在进行CRUD操作时,若出现"Invalid bound statement (not found)"的报错信息,这个错误是由于未找到指定的mapper导致的。下面我将为大家提供解决这个问题的完整攻略。
问题表现
当使用MyBatis-Plus进行CRUD操作时,会出现如下错误提示:
org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.example.mapper.UserMapper.selectById
原因分析
这个错误发生的原因是,MyBatis-Plus默认使用Mapper接口的内部类(默认为default),而我们在Mapper接口中定义的方法没有对应内部类的namespace,所以无法找到对应的Mapper方法,从而导致该错误。
解决方法
解决方法很简单,可以通过两种方式来实现:
方式一
在Mapper接口的@MapperScan注解中添加basePackages属性,指明mapper的包名
@MapperScan(basePackages = {"com.example.mapper"})
方式二
可以在每个Mapper接口上添加@Mapper注解,来明确指定对应的namespace
@Mapper
public interface UserMapper extends BaseMapper<User> {
// ...
}
通过以上两种方式中的任意一种,即可解决该错误。
示例说明
- 示例一:
若项目中存在以下Mapper接口定义
public interface UserMapper extends BaseMapper<User> {
// ...
}
public interface OrderMapper extends BaseMapper<Order> {
// ...
}
那么可以通过在启动类上添加@MapperScan注解,指明mapper的包名
@SpringBootApplication
@MapperScan(basePackages = {"com.example.mapper"})
public class DemoApplication {
// ...
}
来解决该问题。
- 示例二:
若在项目中,存在如下Mapper接口定义
@Mapper
public interface UserMapper extends BaseMapper<User> {
// ...
}
public interface OrderMapper extends BaseMapper<Order> {
// ...
}
那么也可以通过在每个Mapper接口上添加@Mapper注解,来明确指定对应的namespace
@Mapper
public interface UserMapper extends BaseMapper<User> {
// ...
}
@Mapper
public interface OrderMapper extends BaseMapper<Order> {
// ...
}
来解决该问题。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:mybatisplus报Invalid bound statement (not found)错误的解决方法 - Python技术站