jdbctemplate的sql日志输出

这是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() {

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/11280.html