Search code examples
sqlmybatisspring-mybatis

Configuring mybatis to print out sql failed in a web project


I am using:spring 4.2.3+MyBatis 3.4,and want configure mybatis to print out sql. Configurations are below:

**web.xml**

<?xml version="1.0" encoding="UTF-8"?>
...
<!-- spring config -->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

<!-- Spring GWT integration -->
<servlet>
    <servlet-name>springGwtRemoteServiceServlet</servlet-name>
    <servlet-class>org.spring4gwt.server.SpringGwtRemoteServiceServlet</servlet-class>
</servlet>
<servlet-mapping>
    <servlet-name>springGwtRemoteServiceServlet</servlet-name>
    <url-pattern>/idp_web/service/*</url-pattern>
</servlet-mapping>

<!-- log4j -->
<context-param>  
    <param-name>log4jConfigLocation</param-name>  
    <param-value>WEB-INF/log4j.properties</param-value>  
</context-param>  
<context-param>  
    <param-name>log4jRefreshInterval</param-name>  
    <param-value>3000</param-value>  
</context-param>
<listener>  
    <listener-class>org.springframework.web.util.Log4jConfigListener</listener-class>  
</listener>  

<!-- Spring Security related configuration -->
<filter>
    <filter-name>springSecurityFilterChain</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
    <filter-name>springSecurityFilterChain</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

**log4j.properties**
# Global logging configuration
log4j.rootLogger=DEBUG,stdout

# Console output...
log4j.appender.stdout                            =             org.apache.log4j.ConsoleAppender
log4j.appender.stdout.Target                     = System.out
log4j.appender.stdout.Threshold                  = ALL
log4j.appender.stdout.layout                     =    org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern   = %5p [%t] - %m%n

#spring
log4j.logger.org.springframework                 = DEBUG
log4j.logger.org.spring4gwt.server               = DEBUG

# SqlMap logging configuration...
log4j.logger.com.vsi.idp.mapper                 = TRACE,stdout

#log4j.logger.org.apache=TRACE,stdout
#log4j.logger.org.mybatis=TRACE,stdout
#log4j.logger.com.ibatis=TRACE,stdout

log4j.logger.java.sql=TRACE,stdout
log4j.logger.java.sql.Connection=TRACE,stdout
log4j.logger.java.sql.Statement=TRACE,stdout
log4j.logger.java.sql.PreparedStatement=TRACE,stdout
log4j.logger.java.sql.ResultSet=TRACE,stdout

When crud,nothing got printed out

What mistakes do I make?How to fix it to ensure sql got printed out?

and I have read this:

http://www.mybatis.org/mybatis-3/logging.html.

Just wondering,in a web project,will mybatis share same log4j configuration with spring automatically?Or should I add some configuration entries in applicationContext.xml to ensure sharing?


Solution

  • After add this to ApplicationContext.xml,sql got printed out

    <!-- SqlSessionFactory -->
    <bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
        <property name="dataSource" ref="dataSource" />
        <property name="typeAliasesPackage" value="com.domain.model" />
         <!--**this line is key point**-->
        <property name="configLocation" value="WEB-INF/mybatis-config.xml"/>
    </bean>
    

    //mybatis-config.xml

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
     PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
     "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <settings>
            <setting name="logImpl" value="LOG4J"/>
        </settings>
    </configuration>