Java 捕获 mybatis异常_Mybatis入库出现异常后,如何捕捉异常

一个同事在调试Mybatis更新操作,没有任何sql语句打印,sql语句也没执行。

跟了下Mybatis的MapperProxy类的invoke方法,跟到拼装sql语句的地方,确实抛出了异常,但是控制台确实没有打印,其他的sql语句都有打印。

springboot的application配置文件中加上了logging.level.xxx.xxx.xxx.xxx.mapper=debug,正常是要打印sql的。

查了下,Mybatis抛出的异常SQLSyntaxErrorException,spring框架会封装成DataAccessException,DataAccessException是RuntimeException的子类,不捕获的话就会一层一层往外抛。

先看看解决的办法:

1.在 Mapper 接口里抛出 DataAccessException 异常

2.在 ServiceImpl 里,调用了该 Mapper 接口的方法上捕获 DataAccessException 异常,再向外抛出DataAccessException

3.在 Controller 里捕获 DataAccessException 异常并返回提示

我试了下,Mapper 接口里不抛出 DataAccessException 异常,ServiceImpl也是可以捕获DataAccessException异常的。

看一下,捕获DataAccessException异常后的堆栈:

java.sql.SQLSyntaxErrorException: Table 'xxx.xxx' doesn't exist

at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)

at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:97)

at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)

at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPrep

你可能感兴趣的:(Java,捕获,mybatis异常)