这是jdbctemplate的关于日志输出的核心代码:
if (logger.isDebugEnabled()) {
String sql = getSql(psc);
logger.debug("Executing prepared SQL statement" + (sql != null ? " [" + sql + "]" : ""));
通过这段代码发现,只要在log4j.properties文件里,加入:
log4j.logger.org.springframework.jdbc.core=debug 或者 log4j.logger.org.springframework.jdbc.core.JdbcTemplate=debug
就可以实现sql的日志输出。
}
我们发现:private static String getSql(Object sqlProvider) {
if (sqlProvider instanceof SqlProvider) {
return ((SqlProvider) sqlProvider).getSql();
}
else {
return null;
}
}
所以自动生成key的代码要注意一下儿:
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(new KeyGenPreparedStatementCreator("INSERT INTO ci (guid) VALUES('guid50');"), keyHolder);
int num = keyHolder.getKey().intValue();
这里update的PreparedStatementCreator必须要实现SqlProvider,否则不被打印。
protected class KeyGenPreparedStatementCreator implements PreparedStatementCreator, SqlProvider {
private final String sql;
public KeyGenPreparedStatementCreator(String sql) {
Assert.notNull(sql, "SQL must not be null");
this.sql = sql;
}
@Override
public PreparedStatement createPreparedStatement(Connection con) throws SQLException {
return con.prepareStatement(this.sql, Statement.RETURN_GENERATED_KEYS);
}
@Override
public String getSql() {