Mybatis的Bug定位
我们的CURD开发中,会遇到SQL没有按照我们预想的情况执行的BUG,但是SQL又是Mybatis动态生成的,难以确定问题所在。
有几种常见的调试方式:
- 直接在Mybatis里上断点,特别是在org.apache.ibatis.mapping.BoundSql类的getSql()方法,直接能拿到SQL,如果想要观测特定的SQL,可以使用条件断点,
sql.contains("xxx关键字")
- 如果不好下断点,可以使用Arthas去观测,可以观测org.apache.ibatis.session.Configuration 类的 newParameterHandler()方法;为什么要观测这个方法,因为这个方法的参数
ParameterHandler newParameterHandler(MappedStatement mappedStatement, Object parameterObject, BoundSql boundSql)
集齐了3个必备参数:参数1这个语句的坐标基本信息;参数2基本的SQL入参;参数3:解析后的SQL基本结构体 - 直接打开Mybatis的DEBUG日志,专门让Mybatis打印每一条执行的SQL语句的基本信息;这里取决于您使用的日志系统。
2025年6月3日大约 3 分钟