异常记录——使用Mybatis报BindingException

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异常记录——使用Mybatis报BindingException相关的知识,希望对你有一定的参考价值。

参考技术A 业务场景:车辆表,需要更新指定编号车辆的设备Id(编号和设备ID均非主键),因而在对应的mapper.xml中自定义了SQL语句,结果调用对应接口时爆出异常

apache的ibatis将原因说的很清楚:Parameter 'deviceNO' not found. Available parameters are [deviceNo, deviceId, param1, param2] ,没找到xml里使用占位符表示的参数(#deviceNO),能用的参数有deviceNo、deviceId等,很明显是发生了拼写错误

xml:

Mapper接口:

更改参数名使xml和Mapper接口里一致即可

一个字母的大小写错误,不仅仅是引发了BindingException异常,而且它还暴露了我极大的缺点:

一定要注意class与yml、xml之间的拼写错误!

Mybatis映射文件错误Tomcat无法启动,也不报异常

 查了一下网上的资料,需要自己重写一下SqlSessionFactoryBean中的buildSqlSessionFactory方法,并替换原有的SqlSessionFactoryBean

import java.io.IOException;

import org.apache.ibatis.session.SqlSessionFactory;
import org.mybatis.spring.SqlSessionFactoryBean;
import org.springframework.core.NestedIOException;

public class BeanFactory extends SqlSessionFactoryBean {

    @Override
    protected SqlSessionFactory buildSqlSessionFactory() throws IOException {
        try{
            return super.buildSqlSessionFactory();
        }catch(NestedIOException e){
            e.printStackTrace();
            throw new NestedIOException("Failed to parse mapping resource:",e.getCause());
        }
    }
}

 

<bean id="sqlSessionFactory" class="com.izhenglan.merchant.test.bean.BeanFactory"> 
    <property name="dataSource" ref="dataSource"/> 
    <property name="configLocation" value="classpath:config/mybatis-config.xml"/> 
     <property name="mapperLocations" value="classpath*:mapper/*.xml"/>
</bean>

 


以上是关于异常记录——使用Mybatis报BindingException的主要内容,如果未能解决你的问题,请参考以下文章