Mybatis与jdbc批量插入的比较 ---- 2016-11-14

阅读更多

主要测试批量插入是,jdbc与mybatis的速度差异。
mybatis测试代码

 

Xml代码  
  1.   
  2. "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  3.   
  4.   
  5.   
  6.   
  7.         
  8.             alias="User" />  
  9.     package com.mybatis.config;  
  10.       
  11.           
  12.               
  13.               
  14.                   
  15.                   
  16.                   
  17.                   
  18.               
  19.           
  20.       
  21.       
  22.           
  23.       
  24.   
  25.     
  26.    
  27.   
  28.   
  29.   
  30.      
  31.        
  32.        
  33.        
  34.         insert into user(username,password,comment) values(#{username},#{password},#{comment})  
  35.       
  36.       
  37.     
  38.       
  39.   

 

 java测试代码:

 

Java代码  
  1. package com.mybatis.config;  
  2.   
  3. import java.io.File;  
  4. import java.io.FileInputStream;  
  5. import java.util.Iterator;  
  6. import java.util.List;  
  7.   
  8. import org.apache.ibatis.io.Resources;  
  9. import org.apache.ibatis.session.ExecutorType;  
  10. import org.apache.ibatis.session.SqlSession;  
  11. import org.apache.ibatis.session.SqlSessionFactory;  
  12. import org.apache.ibatis.session.SqlSessionFactoryBuilder;  
  13. import org.apache.log4j.xml.DOMConfigurator;  
  14.   
  15.   
  16. /** 
  17.  * mybatis测试 
  18.  * @author CHENLEI 
  19.  * 
  20.  */  
  21. public class UserDaoTest {  
  22.       
  23.     public static void main(String[]args){  
  24.           
  25.         try {  
  26.             userDaoTest();  
  27.         } catch (Exception e) {  
  28.             // TODO Auto-generated catch block  
  29.             e.printStackTrace();  
  30.         }  
  31.           
  32.     }  
  33.   
  34.     public static void userDaoTest() throws Exception  
  35.     {  
  36.         DOMConfigurator.configure("res/log4j.xml");  
  37.         File file=Resources.getResourceAsFile("mybatisBase.xml");  
  38.         SqlSessionFactoryBuilder Factorybuilder = new SqlSessionFactoryBuilder();  
  39.         SqlSessionFactory factory=Factorybuilder.build(new FileInputStream(file));  
  40.          
  41.         SqlSession session1 = factory.openSession();//普通的操作  
  42.         SqlSession session2 = factory.openSession(ExecutorType.BATCH, false);//是否自动提交事务  
  43.           
  44.         UserDao userDao1 = session1.getMapper(UserDao.class);//  
  45.         UserDao userDao2 = session2.getMapper(UserDao.class);//  
  46.           
  47.         User user = new User();  
  48.         user.setUsername("test");  
  49.         user.setPassword("123456");  
  50.         user.setComment("comment");  
  51.         try{  
  52.               
  53.             long t1=System.currentTimeMillis();  
  54.             for(int i=0;i<1000;i++){  
  55.                  userDao2.insert(user);  
  56.             }  
  57.             System.out.println(System.currentTimeMillis()-t1+"ms");  
  58.               
  59.   
  60.                
  61.         }finally{  
  62. //           session1.commit();  
  63. //             session1.close();  
  64.         }  
  65.          
  66.     }  
  67.   
  68. }  

 运行结果:(结果来自三次测试的结果,取的一个范围,因为外界因素,下同)

 1000次:632---650ms

 

下面是传统的jdbc:

 

 

 

Java代码  
  1. package com.mybatis.config;  
  2.   
  3. import java.sql.Connection;  
  4. import java.sql.DriverManager;  
  5. import java.sql.PreparedStatement;  
  6. import java.sql.SQLException;  
  7.   
  8. public class commonjdbcBatch {  
  9.   
  10.     /** 
  11.      * @param args 
  12.      * @throws SQLException  
  13.      */  
  14.     public static void main(String[] args) throws SQLException {  
  15.         Connection con=null;  
  16.         PreparedStatement s=null;  
  17.         // TODO Auto-generated method stub  
  18.             try {  
  19.                 Class.forName("com.mysql.jdbc.Driver");  
  20.                  con=DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatistest?useUnicode=true&characterEncoding=UTF-8", "root","123456");  
  21.                  con.setAutoCommit(false);//不自动提交  
  22.                  s=con.prepareStatement(" insert into user(username,password,comment) values(?,?,?)");  
  23.                 long t1=System.currentTimeMillis();  
  24.                  for(int i=0;i<1000;i++){  
  25.                     s.setString(1,"clinux"+i);  
  26.                     s.setString(2,"123456");  
  27.                     s.setString(3,"comment");  
  28.                     s.addBatch();  
  29.                 }  
  30.                  s.executeBatch();  
Java代码   收藏代码
  1.                          con.commit();  
  2.             System.out.println(System.currentTimeMillis()-t1+"ms");  
  3.                 s.clearBatch();  
  4.         } catch (ClassNotFoundException e) {  
  5.             // TODO Auto-generated catch block  
  6.             e.printStackTrace();  
  7.         }finally{  
  8.             con.close();  
  9.             s.close();  
  10.         }  
  11.           
  12. }  

 

 

测试1000次结果:

1000次:308---330ms

 

 

所以从上面的测试我们可以看出mybatis的插入速度不及传统的jdbc,用此类框架我们主要是搞j2ee,虽然在性能上面不及,但是稳定,所以这也是一个要权衡的问题;传统的是快,但是用mybatis我们在一些方面上可以不用在造轮子,节约开发时间,当然对于mybatis的用的地方,需要我们在实际的项目中权衡了(或许我们只用mybatis的Mapper,连接池的话我们可以用其他的,譬如bonecp,c3p0),以上仅供研究学习。

原文链接:http://13638363871-163-com.iteye.com/blog/1549465

你可能感兴趣的:(mybatis批量插入,jdbc批量插入,对比)