hibernate是可以配置 show_sql 显示 自动生成的sql 语句,用 format_sql 可以格式化sql 语句,但如果用 mybatis 怎么实现这个功能呢?如果你搜索看一下,基本都是通过配置日志来实现的,比如配置我们最常用的 log4j.properties 来实现。
首页我们创建一个 java 工程叫作:mybatis12,内容与之前 mybatis+spring 差不多,实现一个通过指定用户id并读取其订单列表,来观察sql的执行情况。其工程目录结构如下:
log4j.properties 内容如下:
# by h3.com log4j.rootlogger=debug,stdout,logfile log4j.appender.stdout=org.apache.log4j.consoleappender #log4j.appender.stdout.target=system.err log4j.appender.stdout.layout=org.apache.log4j.simplelayout log4j.appender.logfile=org.apache.log4j.fileappender log4j.appender.logfile.file=c:/mybatis_show_sql.log log4j.appender.logfile.layout=org.apache.log4j.patternlayout log4j.appender.logfile.layout.conversionpattern=%d{yyyy-mm-dd hh:mm:ss} %f %p %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主类测试代码如下:
import java.io.reader; import java.text.messageformat; import java.util.list; import org.apache.ibatis.io.resources; import org.apache.ibatis.session.sqlsession; import org.apache.ibatis.session.sqlsessionfactory; import org.apache.ibatis.session.sqlsessionfactorybuilder; import com.h3.dao.iuser; import com.h3.pojo.user; public class main { private static sqlsessionfactory sqlsessionfactory; private static reader reader; static { try { reader = resources.getresourceasreader("config/configure.xml"); sqlsessionfactory = new sqlsessionfactorybuilder().build(reader); } catch (exception e) { e.printstacktrace(); } } public static sqlsessionfactory getsession() { return sqlsessionfactory; } /** * @param args */ public static void main(string[] args) { // todo auto-generated method stub sqlsession session = sqlsessionfactory.opensession(); try { //user user = (user) session.selectone( // "com.h3.mybatis.models.usermapper.getuserbyid", 1); iuser iuser = session.getmapper(iuser.class); getuserlist(); //testinsert(); testupdate(); //testdelete(); } finally { session.close(); } } // public static void testinsert() { try { sqlsession session = sqlsessionfactory.opensession(); iuser usermapper = session.getmapper(iuser.class); system.out.println("test insert start..."); user user = new user(); user.setid(0); user.setname("google"); user.setdept("tech"); user.setwebsite("http://www.google.com"); user.setphone("120"); usermapper.insertuser(user); session.commit(); system.out.println("\r\nafter insert"); getuserlist(); system.out.println("test insert finished..."); } catch (exception e) { e.printstacktrace(); } } // 用户列表 public static void getuserlist(){ try { sqlsession session = sqlsessionfactory.opensession(); iuser iuser = session.getmapper(iuser.class); system.out.println("test get start..."); printusers(iuser.getuserlist()); system.out.println("test get finished..."); }catch (exception e) { e.printstacktrace(); } } public static void testupdate() { try { sqlsession session = sqlsessionfactory.opensession(); iuser iuser = session.getmapper(iuser.class); system.out.println("test update start..."); printusers(iuser.getuserlist()); user user = iuser.getuser(1); user.setname("new name"); iuser.updateuser(user); session.commit(); system.out.println("\r\nafter update"); printusers(iuser.getuserlist()); system.out.println("test update finished..."); }catch (exception e) { e.printstacktrace(); } } public static void testdelete() { try { sqlsession session = sqlsessionfactory.opensession(); iuser iuser = session.getmapper(iuser.class); system.out.println("test delete start..."); system.out.println("before delete"); printusers(iuser.getuserlist()); iuser.deleteuser(3); session.commit(); system.out.println("\r\nafter delete"); printusers(iuser.getuserlist()); system.out.println("test delete finished..."); }catch (exception e) { e.printstacktrace(); } } /** * * * @param users */ private static void printusers(final list<user> users) { int count = 0; for (user user : users) { system.out.println(messageformat.format("============= user[{0}]=================", ++count)); system.out.println("user id: " + user.getid()); system.out.println("user name: " + user.getname()); system.out.println("user dept: " + user.getdept()); system.out.println("user website: " + user.getwebsite()); } } }执行后,在myeclise终端输出结果如下:
debug - logging initialized using 'class org.apache.ibatis.logging.commons.jakartacommonsloggingimpl' adapter. debug - pooleddatasource forcefully closed/removed all connections. debug - pooleddatasource forcefully closed/removed all connections. debug - pooleddatasource forcefully closed/removed all connections. debug - pooleddatasource forcefully closed/removed all connections. test get start... debug - opening jdbc connection debug - created connection 22927632. debug - setting autocommit to false on jdbc connection [com.mysql.jdbc.jdbc4connection@15dd910] debug - ooo using connection [com.mysql.jdbc.jdbc4connection@15dd910] debug - ==> preparing: select * from user debug - ==> parameters: debug - <== total: 2 ============= user[1]================= user id: 1 user name: new name user dept: tech user website: http://www.h3.com ============= user[2]================= user id: 2 user name: hevi user dept: tech user website: http://www.baidu.com test get finished... test update start... debug - opening jdbc connection debug - created connection 33189144. debug - setting autocommit to false on jdbc connection [com.mysql.jdbc.jdbc4connection@1fa6d18] debug - ooo using connection [com.mysql.jdbc.jdbc4connection@1fa6d18] debug - ==> preparing: select * from user debug - ==> parameters: debug - <== total: 2 ============= user[1]================= user id: 1 user name: new name user dept: tech user website: http://www.h3.com ============= user[2]================= user id: 2 user name: hevi user dept: tech user website: http://www.baidu.com debug - ooo using connection [com.mysql.jdbc.jdbc4connection@1fa6d18] debug - ==> preparing: select * from user where id=? debug - ==> parameters: 1(integer) debug - <== total: 1 debug - ooo using connection [com.mysql.jdbc.jdbc4connection@1fa6d18] debug - ==> preparing: update user set name = ?, dept = ?, website = ?, phone = ? where id = ? debug - ==> parameters: new name(string), tech(string), http://www.h3.com(string), 13800009988(string), 1(integer) debug - <== updates: 1 debug - committing jdbc connection [com.mysql.jdbc.jdbc4connection@1fa6d18] after update debug - ooo using connection [com.mysql.jdbc.jdbc4connection@1fa6d18] debug - ==> preparing: select * from user debug - ==> parameters: debug - <== total: 2 ============= user[1]================= user id: 1 user name: new name user dept: tech user website: http://www.h3.com ============= user[2]================= user id: 2 user name: hevi user dept: tech user website: http://www.baidu.com test update finished...代码下载:http://pan.baidu.com/s/1jgk165o
jar 包下载:http://pan.baidu.com/s/1bnyrj9h