MyBatisPlus中自定义sql查询使用自定义实体类当参数出现XXXnot found的问题

最近脱离了上古的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>

这样就不会报错了,至于原因是什么,我还在研究

妈的,我讨厌写文档

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值