Mybatis 利用log4j打印输出log,方便排查sql问题

来源:互联网 发布:男生挂件知乎 编辑:程序博客网 时间:2024/05/21 01:27
默认的使用mybaties是不打印mybaties相关的log的,因为内部的sql执行都是内部调用,在server的控制台是不 会 打印log的。

在log4j的配置文件log4j.properties里加上以下几句话就可以了:

log4j.rootLogger=info, ServerDailyRollingFile, stdout 
log4j.appender.ServerDailyRollingFile=org.apache.log4j.DailyRollingFileAppender 
log4j.appender.ServerDailyRollingFile.DatePattern='.'yyyy-MM-dd 
log4j.appender.ServerDailyRollingFile.File=C://logs/notify-subscription.log 
log4j.appender.ServerDailyRollingFile.layout=org.apache.log4j.PatternLayout 
log4j.appender.ServerDailyRollingFile.layout.ConversionPattern=%d - %m%n 
log4j.appender.ServerDailyRollingFile.Append=true

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n
log4j.logger.com.ibatis=debug
log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=debug
log4j.logger.com.ibatis.common.jdbc.ScriptRunner=debug
log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientDelegate=debug
log4j.logger.java.sql.Connection=debug
log4j.logger.java.sql.Statement=debug
log4j.logger.java.sql.PreparedStatement=debug,stdout


另外关于  ,mybaties参数定义和声明的问题,总结了以下几点:
1.findProvinceByName方法名 需要和java interface文件定义的完全一样,这样映射时才能找到方法。
2.parameterType 建议就使用HashMap类型,即使只有一个形参,比如一个string参数,也建议用hashmap,然后直接用#{你在interface中定义的变量名就行}
3.多看控制台 输出,log可能类似这样的:
SchoolBean=id= 1 name=北京 pid=null
2014-10-25 20:00:35,325 DEBUG [java.sql.Connection] - ooo Using Connection [com.mysql.jdbc.JDBC4Connection@7b34c5ff]
2014-10-25 20:00:35,325 DEBUG [java.sql.Connection] - ==>  Preparing: select * from graduatedb.provinces where name=? 
2014-10-25 20:00:35,326 DEBUG [java.sql.PreparedStatement] - ==> Parameters: 北京(String)
2014-10-25 20:00:35,326 DEBUG [java.sql.PreparedStatement] - ==> Parameters: 北京(String)
2014-10-25 20:00:35,328 WARN [root] - login servlet failed
login servlet failed

看到那个?并不用着急,那个问号对应的参数的value值会在下面那个Parameters后面打印出来。
4.resultType 就写你那个封装的javaBean就行,如果可能返回多个,resultType还是写这个,然后在interface文件里把返回值定义成List
0 0