解决mybatis报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

解决mybatis报错org.apache.ibatis.binding.BindingException: Invalid bound statement (not found):

  1. 检查mapper.xml文件是否在工程中生效
  2. 检查dao层接口定义是否正确
  3. 检查xml中mapper标签的namespace配置是否正确
  4. 检查xml中语句配置是否正确
1. 检查mapper.xml文件是否在工程中生效

Mybatis的mapper.xml文件生效是由mapperLocations加载的

SqlSessionFactoryBean.setMapperLocations(Resource... mapperLocations)

mapperLocations是Spring的资源文件加载方式,可以选择正则匹配的方式查找配置路径的xml文件

Resource mapperLocations= new PathMatchingResourcePatternResolver().getResources("classpath*:sqlmap/*-mapper.xml");

如上规规,你的mybatis的xml文件必须要放在sqlmap文件夹下且以-mapper.xml后缀结尾。

2. 检查dao层接口定义是否正确

标准的Dao层接口定义如下:

@Mapper
public interface BookDao {
	String getBookId(@Param("name") String bookName);
	List<Book> getBooks(@Param("bookIds") List<String> bookIds);
	int insertBook(@Param("books") List<Book> books);
}
3. 检查xml中mapper标签的namespace配置是否正确

xml文件中的mapper标签的namespace与类名是否关联?这里要考虑有没有配置别名,默认都是用全类名唯一性来关联

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.numb.dao.BookDao">
</mapper>
4. 检查xml中语句配置是否正确
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.numb.dao.BookDao">
	<resultMap id="AllColumnMap" type="org.numb.model.Book">
		<result column="id" jdbcType="VARCHAR" property="id"/>
		<result column="name" jdbcType="VARCHAR" property="bookName"/>
		<result column="price" jdbcType="DECIMAL" property="price"/>
	</resultMap>
	<sql id="all_column">
		`id`,
		`name`
		`price`
	</sql>
	<select id="getBookId" resultType="string">
		SELECT id FROM book WHERE name = #{name}
	</select>
	<select id="getBooks" resultMap="AllColumnMap">
		SELECT * FROM book
		<where>
			<foreach collection="bookIds" item="id" index="index" separator=","
				open="id in (" close=")" nullable="true">
				#{id}
			</foreach>
		</where>
	</select>
	<insert id="insertBook">
		INSERT INTO book(
			<include refid="all_column"/>
		) VALUES
		<foreach collections="books" item="book" index="index" separator="," open="(" close=")">
			#{book}
		</foreach>
	</insert>
</mapper>
这个错误通常是因为MyBatis无法找到指定的SQL语句,可能是因为SQL语句的ID或命名空间不正确。以下是可能的解决方案: 1.检查mapper文件的命名空间是否正确,例如com.wode.mapper.PetMapper是否正确。 2.检查mapper文件是否存在ID为selectAll的SQL语句,如果没有,请添加。 3.检查mapper文件SQL语句的ID是否正确,例如是否为selectAll。 4.检查mapper文件SQL语句的参数是否正确,例如是否与Java方法的参数匹配。 5.检查是否正确配置了mapper文件,例如是否在mybatis-config.xml正确配置了mapper文件。 以下是一个可能的解决方案: 引用: 错误信息为:nested exception is org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.cloud.lowcode.mapper.UserMapper.queryByParam。 引用: 程序报错:“org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.xxx.xxx ”。 可能的解决方案: 1.检查mapper文件的命名空间是否正确,例如com.cloud.lowcode.mapper.UserMapper或com.xxx.xxx是否正确。 2.检查mapper文件是否存在ID为queryByParam或其他指定的SQL语句,如果没有,请添加。 3.检查mapper文件SQL语句的ID是否正确,例如是否为queryByParam或其他指定的ID。 4.检查mapper文件SQL语句的参数是否正确,例如是否与Java方法的参数匹配。 5.检查是否正确配置了mapper文件,例如是否在mybatis-config.xml正确配置了mapper文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值