最近脱离了上古的mybatis,开始使用mybatisPlus,虽然其自带的查询很好使,wrapper也很强大, 但是很多时候也需要自己书写sql,然后在执行后却报错了,解决完成后,特此记录一下
首先先上一下我定义的方法
/**
* 自定义分页条件查询
* @param page 分页对象
* @param query 查询条件
* @return
*/
IPage<CourseListVo> pageList(IPage<CourseListVo> page,CourseQuery query);
page参数不用管他,这是使用了mybatis-plus自定义分页的一个参数,和这次的报错没关系。
接下来给大家上我的sql
<sql id="courseDetail">
select course.id,course.title courseName,course.price,course.cover,
course.lesson_num lessonNum,teacher.name teacherName,detail.description,
sub.title subjectName,sub_p.title subjectParentName,course.status
from edu_course course
left join edu_teacher teacher on course.teacher_id = teacher.id
left join edu_course_description detail on course.id = detail.id
left join edu_subject sub on course.subject_id = sub.id
left join edu_subject sub_p on course.subject_parent_id = sub_p.id
</sql>
<select id="pageList" parameterType="com.atguigu.eduservice.entity.query.CourseQuery" resultType="com.atguigu.eduservice.entity.vo.CourseListVo">
<include refid="courseDetail"/>
<where>
<if test="titleLike != null">and course.title like concat('%',concat(#{titleLike},'%'))</if>
<if test="teacherId != null">and course.teacherId = #{teacherId}</if>
<if test="subjectParentId != null">and course.subject_parent_id = #{subjectParentId}</if>
<if test="subjectId != null">and course.subject_id = #{subjectId}</if>
<if test="status != null">and course.status = #{status}</if>
</where>
</select>
可以看到,我确实指定了paramterType,但是,当我运行以后,却
org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter 'titleLike' not found. Available parameters are [q, arg0, param1, param2]
这个错误大家肯定不陌生,初学mybatis的时候,如果你的参数类型写的不对,或者实体类里面没有那个属性,就会出这样的问题,但是通过我们上面的代码,我们发现我写的其实没有任何问题,但是为什么还是报错了呢?
原因我还没找到,但是我找到了解决方式,那就是@param注解,上代码
/**
* 自定义分页条件查询
* @param page 分页对象
* @param query 查询条件
* @return
*/
IPage<CourseListVo> pageList(IPage<CourseListVo> page,@Param("q") CourseQuery query);
sql改为
<sql id="courseDetail">
select course.id,course.title courseName,course.price,course.cover,
course.lesson_num lessonNum,teacher.name teacherName,detail.description,
sub.title subjectName,sub_p.title subjectParentName,course.status
from edu_course course
left join edu_teacher teacher on course.teacher_id = teacher.id
left join edu_course_description detail on course.id = detail.id
left join edu_subject sub on course.subject_id = sub.id
left join edu_subject sub_p on course.subject_parent_id = sub_p.id
</sql>
<select id="pageList" parameterType="com.atguigu.eduservice.entity.query.CourseQuery" resultType="com.atguigu.eduservice.entity.vo.CourseListVo">
<include refid="courseDetail"/>
<where>
<if test="q.titleLike != null">and course.title like concat('%',concat(#{q.titleLike},'%'))</if>
<if test="q.teacherId != null">and course.teacherId = #{q.teacherId}</if>
<if test="q.subjectParentId != null">and course.subject_parent_id = #{q.subjectParentId}</if>
<if test="q.subjectId != null">and course.subject_id = #{q.subjectId}</if>
<if test="q.status != null">and course.status = #{q.status}</if>
</where>
</select>
这样就不会报错了,至于原因是什么,我还在研究
妈的,我讨厌写文档