默认的使用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