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);}