在 Java 中使用 MyBatis 调试,通常可以从 日志、断点、源码、插件 几个层面来做。下面按“从简单到深入”的方式说明。
在 mybatis-config.xml 中:
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
控制台会打印:
logback.xml
<logger name="org.mybatis" level="DEBUG"/>
<logger name="com.xxx.mapper" level="DEBUG"/>
这样能看到:
<logger name="org.apache.ibatis.jdbc" level="DEBUG"/>
✅ Mapper 接口方法上
User selectById(Long id);
⚠️ 注意:
MapperProxy调试时:
F7)MapperProxy.invoke()
→ MapperMethod.execute()
→ SqlSession.select()
如果你想看:
| 类 | 作用 |
|---|---|
DefaultSqlSession |
SQL 执行入口 |
BaseExecutor |
执行器 |
PreparedStatementHandler |
SQL 预处理 |
ParameterHandler |
参数绑定 |
BoundSql |
最终 SQL |
断点建议:
PreparedStatementHandler.parameterize()
BoundSql.getSql()
在 XML 中临时写死参数:
SELECT * FROM user WHERE id = 1
<setting name="logImpl" value="STDOUT_LOGGING"/>
或在日志中观察换行。
? 为真实参数示例:
SELECT * FROM user WHERE id = 1
比原生日志直观 10 倍。
调试时你会看到:
MapperProxy@1234
这是正常的。
@Transactional(propagation = Propagation.NOT_SUPPORTED)
✅ 看 BoundSql.getSql()
✅ 看 ParameterHandler.setParameters()
✅ 看:
<setting name="mapUnderscoreToCamelCase" value="true"/>
调试 MyBatis = 日志看 SQL + 断点看代理 + 源码看执行
如果你愿意,可以告诉我:
我可以直接给你针对性调试方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。