java.sql.SQLSyntaxErrorException: #42000
一般发生在修改 删除中
原因可能是 传入的参数与 sql 语句不匹配
It’s likely that neither a Result Type nor a Result Map was specified
异常分析:
关键在第一段提示: It’s likely that neither a Result Type nor a Result Map was specified.意思是无法确定返回值类型。
如下代码:
<select id="getEmpById" >
select * from tbl_employee where id = #{id}
</select>
在写select查询标签时,没加resultType属性。
异常解决,代码如下:
<select id="getEmpById" resultType="com.bean.Employee" >
select * from tbl_employee where id = #{id}
</select>
小结:
在写select查询标签进行查询时,必须写resultType属性,不然mybatis无法确定返回值类型,就会报错。
补充:
1.进行查询时,resultType(返回值类型)属性不能省略。
2.进行增删改时,parameterType(参数类型)属性可以省略,且它们没有resultType属性,返回值可以直接在Mapper接口上定义。
mybatis允许增删改查直接定义以下类型返回值(Mapper接口中定义)
Integer(返回SQL语句影响的行数)、
Long(同上)
Boolean(返回SQL语句是否执行成功)
<!-- parameterType:参数类型,可以省略 -->
<insert id="addEmp" parameterType="com.bean.Employee">
INSERT INTO tbl_employee
VALUES (#{lastName}, #{gender},#{email});
</insert>
org.apache.ibatis.binding.BindingException: Parameter ‘status’ not found. Available parameters are [0, id, param1, param2]
29-Mar-2022 18:52:18.212 涓ラ噸 [http-nio-8080-exec-8] org.apache.catalina.core.StandardWrapperValve.invoke Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is org.mybatis.spring.MyBatisSystemException: nested exception is org.apache.ibatis.binding.BindingException: Parameter ‘status’ not found. Available parameters are [0, id, param1, param2]] with root cause
org.apache.ibatis.binding.BindingException: Parameter ‘status’ not found. Available parameters are [0, id, param1, param2]
Mapper接口在传多个参数时找不到
解决: 使用 @Param
注解
Article getArticleByStatusAndId(@Param(value = "status") Integer status, @Param(value = "id") Integer id);
传递多个参数, 也可以通过参数的位置来确定,#{0}
表示第一个参数
使用 MyBatisPlus 时好像没有这个问题
org.apache.ibatis.binding.BindingException
Invalid bound statement (not found): com.example.serviceedu.mapper.EduCourseMapper.selectCoursePublishVoById
AbstractHandlerExceptionResolver.java:194 |org.springframework.web.servlet.mvc.method.annotation.ExceptionHandlerExceptionResolver |Resolved exception caused by handler execution: org.apache.ibatis.binding.BindingException: Invalid bound statement (not found): com.guli.edu.mapper.CourseMapper.getCoursePublishVoById
原因:
-
Mapper 接口的方法名 与 Mapper接口的映射文件(xxx.xml) 的 id 不一样
-
dao层编译后只有class文件,没有mapper.xml,因为maven工程在默认情况下src/main/java目录下的所有资源文件是不发布到target目录下的,
解决方案:
1、在项目的pom中配置如下节点
<!-- 项目打包时会将java目录中的*.xml文件也进行打包 --> <build> <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.xml</include> </includes> <filtering>false</filtering> </resource> </resources> </build>
重新打包项目会发现target目录下出现了xml文件夹
2、在Spring Boot配置文件中添加配置
#配置mapper xml文件的路径 mybatis-plus.mapper-locations=classpath:com/guli/edu/mapper/xml/*.xml