在 Java 中,DAO(Data Access Object)层的调试通常围绕SQL 是否正确、参数是否匹配、事务是否生效、框架映射是否准确这几个核心点。下面从通用思路 → 常见框架(JDBC / MyBatis / JPA)→ 实用技巧逐步说明。
无论使用什么框架,调试 DAO 都可以遵循以下步骤:
确认调用链
确认参数
null、类型是否匹配确认 SQL
确认数据库
常见的问题
commit调试方法
System.out.println(sql);
System.out.println("id=" + id + ", name=" + name);
✅ 推荐:
try-with-resourcestry (PreparedStatement ps = conn.prepareStatement(sql)) {
ps.setInt(1, id);
System.out.println("Executing SQL: " + ps.toString());
ps.execute();
}
方式一:logback / log4j
<logger name="com.xxx.mapper" level="DEBUG"/>
方式二:MyBatis 配置
<settings>
<setting name="logImpl" value="STDOUT_LOGGING"/>
</settings>
你会看到:
==> Preparing: SELECT * FROM user WHERE id = ?
==> Parameters: 1(Integer)
<== Total: 1
#{} 和 ${}⚠️ 常见坑:
#{} 防注入,${} 直接拼接User getUser(@Param("id") Integer id);
WHERE id = #{id}
spring:
jpa:
show-sql: true
properties:
hibernate.format_sql: true
<logger name="org.hibernate.SQL" level="DEBUG"/>
<logger name="org.hibernate.type" level="TRACE"/>
@Column)LazyInitializationException@Transactional
public void test() {
System.out.println("tx active: " + TransactionSynchronizationManager.isActualTransactionActive());
}
✅ 确认:
public✅ 必做
✅ 工具推荐
✅ 常见错误速查
| 现象 | 原因 |
|---|---|
| 查不到数据 | 参数错 / 表错 |
| 插入失败 | 字段非空 / 主键冲突 |
| 修改无效 | 事务未提交 |
| SQL 报错 | XML 拼写错误 |
如果你愿意,可以:
我可以帮你精确定位问题并给出修改方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。