iBatis配置log4j输出SQL详解

在log4j.properties文件配置如下内容即可输入SQL语句了

  1. # Preparing Statement: SQL
  2. log4j.logger.java.sql.Connection = DEBUG  
  3. # Executing Statement: SQL / Parameters / Types
  4. log4j.logger.java.sql.Statement = DEBUG  
  5. log4j.logger.java.sql.PreparedStatement = DEBUG  
  6. # ResultSet: Header / Result
  7. #log4j.logger.java.sql.ResultSet = DEBUG  

下面是配置详解,够详细吧!

配置这一句就会输出SQL
log4j.logger.java.sql.Connection = DEBUG
    [DEBUG] com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl
    {conn-100006} Connection
    [DEBUG] com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl
    {conn-100006} Preparing Statement: SELECT id, name FROM t_sys_role WHERE role_id = ?
配置这两句就会输出调用SQL的参数值和类型
log4j.logger.java.sql.Statement = DEBUG
log4j.logger.java.sql.PreparedStatement = DEBUG
    [DEBUG] com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl
    {pstm-100007} Executing Statement: SELECT id, name FROM t_sys_role WHERE role_id = ?
    [DEBUG] com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl
    {pstm-100007} Parameters: [500002]
    [DEBUG] com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl
    {pstm-100007} Types: [java.lang.Integer]
配置这一句就会输出调用SQL的执行结果
log4j.logger.java.sql.ResultSet = DEBUG
    [DEBUG] com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl
    {rset-100008} ResultSet
    [DEBUG] com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl
    {rset-100008} Header: [id, name]
    [DEBUG] com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl
    {rset-100008} Result: [810001, 首页]
    [DEBUG] com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl
    {rset-100008} Result: [810002, 注册]
    [DEBUG] com.ibatis.common.logging.jakarta.JakartaCommonsLoggingImpl
    {rset-100008} Result: [810003, 下载]

执行结果一般数据比较多,最好不要输出,所以配这三条就好了
log4j.logger.java.sql.Connection = DEBUG
log4j.logger.java.sql.Statement = DEBUG
log4j.logger.java.sql.PreparedStatement = DEBUG

曾经有一个项目,希望将SQL输出到日志中,特意写了一个方法,每次执行前调用一次,那叫一个复杂啊!

public String getSqlString(String sqlId, Object params) {
    SqlMapClientImpl sqlmap = (SqlMapClientImpl) getSqlMapClient();
    SqlMapSession session = sqlmap.openSession();
    
    SessionScope sessionScope = new SessionScope();
    sessionScope.setSqlMapClient(sqlmap);
    sessionScope.setSqlMapExecutor(sqlmap);
    sessionScope.setSqlMapTxMgr(session);
    
    StatementScope statementScope = new StatementScope(sessionScope);
    sessionScope.incrementRequestStackDepth();
    SqlMapExecutorDelegate delegate = sqlmap.getDelegate();
    MappedStatement ms = delegate.getMappedStatement(sqlId);
    ms.initRequest(statementScope);

    MappedStatement stmt = sqlmap.getMappedStatement(sqlId);
    Sql sql = stmt.getSql();
    String string = sql.getSql(statementScope, params);
    session.close();
    return string;
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以通过在log4j2.xml文件中配置org.apache.ibatis.logging.LogFactory,来打印mybatis的sql语句。具体配置如下: ```xml <?xml version="1.0" encoding="UTF-8"?> <Configuration status="WARN"> <Appenders> <Console name="Console" target="SYSTEM_OUT"> <PatternLayout pattern="%d{HH:mm:ss.SSS} [%t] %-5level %logger{36} - %msg%n"/> </Console> </Appenders> <Loggers> <Root level="info"> <AppenderRef ref="Console"/> </Root> <Logger name="org.apache.ibatis" level="TRACE"/> </Loggers> </Configuration> ``` 在这个配置文件中,我们首先定义了一个名为Console的Appender,用于输出日志。然后,在Loggers中,我们定义了两个Logger,一个是Root,它的日志级别是info,表示只输出info级别及以上的日志;另一个是名为org.apache.ibatis的Logger,它的日志级别是TRACE,表示输出mybatis的sql语句。 在这个配置文件中,我们使用了PatternLayout来指定日志输出的格式。具体来说,%d{HH:mm:ss.SSS}表示输出日志时间,[%t]表示输出线程名,%-5level表示输出日志级别,并保留5个字符的宽度,%logger{36}表示输出logger名,并保留36个字符的宽度,%msg表示输出日志消息,%n表示输出换行符。 需要注意的是,这个配置文件需要放在classpath下,并且在应用启动时,需要正确加载这个配置文件。如果使用Spring Boot,可以将这个配置文件放在src/main/resources目录下,并在application.properties中添加如下配置: ```properties logging.config=classpath:log4j2.xml ``` 这样,Spring Boot就会自动加载这个配置文件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值