MyBatis 异常:Invalid bound statement (not found) - 常见原因及解决方案
MyBatis 抛出 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 错误,意味着 MyBatis 在执行 SQL 语句时,找不到对应的映射语句。
常见原因
-
映射文件(Mapper XML)中没有定义这个映射语句。 这是最常见的原因之一。如果你是使用 XML 方式配置 MyBatis,请确认你的映射文件中是否定义了
com.example.demo1.mapper.StudentMapper.selectList这个映射语句。 -
映射文件没有被正确加载或配置,导致 MyBatis 找不到映射语句。 确保 MyBatis 的配置文件正确加载了你的映射文件。
-
映射语句的名称或命名空间不正确。 检查代码中调用
selectList方法时,参数com.example.demo1.mapper.StudentMapper.selectList是否正确,包括命名空间和方法名。
注解方式
如果你是使用注解方式配置 MyBatis,则需要检查以下几点:
-
确认
com.example.demo1.mapper.StudentMapper接口上是否使用了@Mapper注解,以标识这是一个 MyBatis 的映射接口。 -
确认
com.example.demo1.mapper.StudentMapper接口中是否定义了名为selectList的方法,并且使用了@Select注解来绑定 SQL 语句。 -
确认在其他地方没有重复定义名为
selectList的方法或语句。 -
确认在 Service 中调用 Mapper 方法时,使用的是正确的方法名和参数。
使用 MyBatis-Plus 的通用方法
如果你的 Mapper 接口是继承了 MyBatis-Plus 的 BaseMapper 接口,你可以尝试使用 MyBatis-Plus 提供的通用方法来查询数据,而无需再使用注解来绑定 SQL 语句,例如:
List<Student> studentList = studentMapper.selectList(null);
这里的 selectList 方法是 MyBatis-Plus 提供的通用查询方法,可以根据传入的查询条件(这里是 null)自动生成 SQL 语句,无需手动编写。
使用查询构造器
如果你需要自定义查询条件,可以使用 MyBatis-Plus 提供的查询构造器(QueryWrapper、UpdateWrapper 等)来构建查询条件,例如:
QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
queryWrapper.eq('name', '张三');
List<Student> studentList = studentMapper.selectList(queryWrapper);
这里的 eq 方法会生成一个等于条件,查询名字为“张三”的学生数据。你可以根据需要使用其他的查询条件来构建查询语句。
在 Service 层使用 QueryWrapper
QueryWrapper 是一个查询构造器,用于构建查询条件。你可以在 Service 层的具体方法中使用它来构建查询条件,例如:
@Service
public class StudentServiceImpl implements StudentService {
@Autowired
private StudentMapper studentMapper;
@Override
public List<Student> getStudentListByName(String name) {
QueryWrapper<Student> queryWrapper = new QueryWrapper<>();
queryWrapper.eq('name', name);
return studentMapper.selectList(queryWrapper);
}
}
这里的 getStudentListByName 方法是一个示例,用于查询名字为 name 的学生列表。在方法中,我们创建了一个 QueryWrapper 对象,并使用 eq 方法添加了一个等于条件,然后将这个条件传入了 selectList 方法中,最终返回查询结果。你可以根据具体的业务需求,使用不同的查询条件来构建查询语句。
原文地址: https://www.cveoy.top/t/topic/lB7K 著作权归作者所有。请勿转载和采集!