发现问题
使用了MP自带的代码生成器生成代码后,我准备自定义一个mapper去实现动态条件分页查询,按照所有步骤完成后,却发现报错:org.apache.ibatis.binding.BindingException: Invalid bound statement (not found)。
解决方法
找了很多网页,首先整理一下遇到这些问题应该排查哪里
我将前面四点都给排查了一遍,也就是说还有最后一个没有排查完,我确实也没有对mp进行这两个配置。配置上之后便不报这个错误了。
意外的错误
当我以为后面肯定没有问题的时候,现实给了我重重的一击多参数传参出错了,我分别用了我知道的三种方法去尝试,首先第一种是我原本最常用的hashmap传参,但是可能今天除了map,还有一个ipage参数,可能便无法识别出来,也就作罢了,第二个是JavaBean,但是也还是失败了,原因估计跟前一个类似。第三种方法,老老实实的写单个类型参数,例如:
IPage selectTeacherByCondition(IPage<?> page,String name,Integer level,Date gmtCreateBegin,Date gmtCreateEnd);
这种最后成功了。
意外的经验累积
我因为用到模糊查询,需要用到%这些符号,所以这时候就要非常小心了,不能乱用双引号,我们这时候应该首选的函数,concat函数去进行字符串的拼接,例如:
<select id="selectTeacherByCondition" resultType="cn.yjs.entity.EduTeacher">
SELECT id,name FROM edu_teacher WHERE is_deleted=0
<if test="name != null">
AND name like concat('%',#{name},'%')
</if>
<if test="level != null">
AND level = #{level}
</if>
<if test="gmtCreateBegin != null">
AND gmt_create > #{gmtCreateBegin}
</if>
<if test="gmtCreateEnd != null">
AND gmt_create < #{gmtCreateEnd}
</if>
</select>
另外还有一个要注意的是,在mybatis中使用小于号需要用到转意字符。
例如上面例子的<就是<的转义字符。