java.sq1.SQLSyntaxEProrException異常產生原因及解決方案
01 異常的發生場景
- 在我mybatis-plus寫了一個查詢接口后出現的問題
java.sq1.SQLSyntaxEProrException
-
日志報錯的意思是sql語法問題
02 異常的產生及其原因
-
我最開始又認為是MySQL數據庫表設計的問題,但是將SQL語句在Navicat中,查詢正常,所以我懷疑是mybatis-plus部分出了問題
-
<resultMap id="sysUserpageMap" type="com.mashang.dao.vo.sysusermscourse.SysUserMsCoursePageVo"><id property="msCourseId" column="course_id" ></id><result property="remark" column="remark" ></result><result property="courseName" column="course_name" ></result><result property="teacherName" column="user_name" ></result><result property="courseCover" column="course_cover" ></result> </resultMap> <select id="sysUserPage" resultMap="sysUserpageMap">SELECTt2.remark,t2.course_name,t1.ms_course_id,t2.course_cover,t3.user_nameFROMsys_user_ms_course AS t1INNER JOIN ms_course AS t2 ON t1.ms_course_id = t2.course_idINNER JOIN sys_user AS t3 ON t2.teacher_id = t3.user_id${ew.customSqlSegment} </select>
-
測試后確定前端傳輸的數據沒問題
-
最后發現l簡單的問題,數據庫字段名和mybatis-plus的查詢語句不匹配
03 解決方式
- 修改mybatis-plus的查詢語句
@Overridepublic Page<SysUserMsCoursePageVo> page(Page page, SysUserMsCoursePage sysUserMsCoursePage) {QueryWrapper wrapper= Wrappers.query();wrapper.eq("t1.sys_user_id",sysUserMsCoursePage.getSysUserId());//這里的字段名問題,造成的SQL語法錯誤wrapper.eq(sysUserMsCoursePage.getTeacherId()!=null,"t2.teacher_id",sysUserMsCoursePage.getTeacherId());wrapper.like(!StringUtils.isEmpty(sysUserMsCoursePage.getCourseName()),"t2.course_name",sysUserMsCoursePage.getCourseName());return msCourseMapper.sysUserPage(page,wrapper);}