Invalid bound statement (not found) 意思是无效绑定
这个异常表示 MyBatis 无法找到名为 `com.chat.mappers.UserInfoMapper.getByUserName` 的绑定语句(bound statement)。这通常是由于以下原因之一导致的:
1. 映射文件配置错误:可能是你的 MyBatis 映射文件中没有定义名为 `getByUserName` 的语句,或者语句的命名不正确。请检查对应的映射文件(通常是 XML 文件)中是否存在 `getByUserName` 的语句,并确保它的命名和配置正确。
示例映射文件(UserInfoMapper.xml)中的语句定义:
<select id="getByUserName" parameterType="String" resultType="com.chat.entity.UserInfo">
SELECT * FROM users WHERE username = #{username}
</select>
2. 注解方式配置错误:如果你使用注解方式进行映射,可能是你的接口方法上的注解与映射文件中定义的语句不匹配。请确保接口方法上的注解与映射文件中的语句对应。
示例接口方法的注解配置:
@Select("SELECT * FROM users WHERE username = #{username}")
UserInfo getByUserName(String username);
3. MyBatis配置错误:可能是你的 MyBatis 配置文件中未正确加载映射文件或扫描了错误的包。请检查 MyBatis 配置文件(通常是 XML 文件)中的 `<mappers>` 配置,确保映射文件被正确加载并指定了正确的包路径。
示例MyBatis配置文件中的映射文件配置:
<mappers>
<mapper resource="com/chat/mappers/UserInfoMapper.xml"/>
</mappers>
解决但是仅从项目目录上看,没有任何错误,路径完全正确,仔细检查对应的映射名称也一模一样
于是找了半天的bug,最后终于发现了问题。
解决办法
从目录上看,下面两个xml文件的路径一模一样
但是,分别打开他们两个就能发现问题
现在你已经能知道问题出现在哪了,我在第一次创建mappers文件夹时直接输入了com.chat.mappers,于是IDEA把它识别成了一个名为com.chat.mappers的文件夹导致了错误。
正确的方法是先创建com文件夹,然后是chat文件夹,再是mappers文件夹。
至此问题解决!