MyBatis的前身就是著名的Ibatis,不知何故脫離了Apache改名為MyBatis。
MyBatis所說是輕量級的ORM框架,在網上看過一個測試報告,感覺相比於Hibernate來說,優勢並不明顯。
下面說一下比較有趣的現象,根據MyBatis的官方文檔,在獲得sqlSession時,它有為批量更新而專門准備的:
- session = sessionFactory.openSession();//用於普通update
- session = sessionFactory.openSession(ExecutorType.BATCH, true);//用於批量update
一般來說,對MYSQL數據庫批量操作時速度取決於,是為每一個處理分別建立一個連接,還是為這一批處理一共建立一個連接。按MyBatis的手冊說明,選擇ExecutorType.BATCH意味著,獲得的sqlSession會批量執行所有更新語句。不過我測試了一下,批量插入1000條數據,發覺ExecutorType.BATCH方式的效率居然比普通的方式
差很多。我測試用的Mapper中的insert配置如下,再用for循環插入1000條記錄:
- <insert id="insert" parameterType="sdc.mybatis.test.Student">
- <!-- WARNING - @mbggenerated This element is automatically generated by
- MyBatis Generator, do not modify. This element was generated on Mon May 09
- 11:09:37 CST 2011. -->
- insert into student (id, name, sex,
- address, telephone, t_id
- )
- values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR},
- #{sex,jdbcType=VARCHAR},
- #{address,jdbcType=VARCHAR}, #{telephone,jdbcType=VARCHAR}, #{tId,jdbcType=INTEGER}
- )
- </insert>
1、 我不清楚原因在哪裡, 就配置了MyBatis的log4j,想查看下日志。下載了log4j.jar和commons-logging.jar並配置到項目的類路徑,然後在代碼路徑下新建文件log4j.properties,內容如下:
- log4j.rootLogger=DEBUG, stdout
- # SqlMap logging configuration...
- log4j.logger.com.ibatis=DEBUG
- log4j.logger.com.ibatis.common.jdbc.SimpleDataSource=DEBUG
- log4j.logger.com.ibatis.sqlmap.engine.cache.CacheModel=DEBUG
- log4j.logger.com.ibatis.sqlmap.engine.impl.SqlMapClientImpl=DEBUG
- log4j.logger.com.ibatis.sqlmap.engine.builder.xml.SqlMapParser=DEBUG
- log4j.logger.com.ibatis.common.util.StopWatch=DEBUG
- log4j.logger.java.sql.Connection=DEBUG
- log4j.logger.java.sql.Statement=DEBUG
- log4j.logger.java.sql.PreparedStatement=DEBUG
- log4j.logger.java.sql.ResultSet=DEBUG
-
- # Console output...
- log4j.appender.stdout=org.apache.log4j.ConsoleAppender
- log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
- log4j.appender.stdout.layout.ConversionPattern=%5p [%t] - %m%n