小言_互联网的博客

Mybatis 异常总结

274人阅读  评论(0)

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

原因:

  1. Mapper 接口的方法名 与 Mapper接口的映射文件(xxx.xml) 的 id 不一样

  2. 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
    

转载:https://blog.csdn.net/qq_42324086/article/details/123828486
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场