my batis 일괄 삽입 과 전통 적 인 jdbc 작업 비교

6710 단어
오늘 사이트 에서 블 로 그 를 보 았 습 니 다. my batis 대량 삽입 에 문제 가 있다 고 해서 자신 이 간단 한 demo 를 만 들 었 습 니 다. my batis 테스트 코드 를 테스트 해 보 았 습 니 다.
 
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">


<configuration>
<typeAliases>
        <typeAlias type="com.mybatis.config.User"
            alias="User" />
    </typeAliases>package com.mybatis.config;
    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" /><!--        -->
            <dataSource type="POOLED"><!--       -->
                <property name="driver" value="com.mysql.jdbc.Driver" />
                <property name="url" value="jdbc:mysql://localhost:3306/mybatistest?useUnicode=true&amp;characterEncoding=UTF-8" />
                <property name="username" value="root" />
                <property name="password" value="123456" />
            </dataSource>
        </environment>
    </environments>
    <mappers>
        <mapper resource="UserDaoMapper.xml"/>
    </mappers>
</configuration>
<?xml version="1.0" encoding="UTF-8" ?>  
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> 

<!-- mybatis      -->
<mapper namespace="com.mybatis.config.UserDao">
   
     <cache readOnly="true" />
     
     <insert id="insert" parameterType="User" >
        insert into user(username,password,comment) values(#{username},#{password},#{comment})
    </insert>
    
  
    
</mapper>


 
 자바 테스트 코드:
 
package com.mybatis.config;

import java.io.File;
import java.io.FileInputStream;
import java.util.Iterator;
import java.util.List;

import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import org.apache.log4j.xml.DOMConfigurator;


/**
 * mybatis  
 * @author CHENLEI
 *
 */
public class UserDaoTest {
	
	public static void main(String[]args){
		
		try {
			userDaoTest();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}

    public static void userDaoTest() throws Exception
    {
    	DOMConfigurator.configure("res/log4j.xml");
    	File file=Resources.getResourceAsFile("mybatisBase.xml");
        SqlSessionFactoryBuilder Factorybuilder = new SqlSessionFactoryBuilder();
        SqlSessionFactory factory=Factorybuilder.build(new FileInputStream(file));
       
        SqlSession session1 = factory.openSession();//     
        SqlSession session2 = factory.openSession(ExecutorType.BATCH, false);//        
        
        UserDao userDao1 = session1.getMapper(UserDao.class);//
        UserDao userDao2 = session2.getMapper(UserDao.class);//
        
        User user = new User();
        user.setUsername("test");
        user.setPassword("123456");
        user.setComment("comment");
        try{
        	
        	long t1=System.currentTimeMillis();
        	for(int i=0;i<1000;i++){
        		 userDao2.insert(user);
        	}
        	System.out.println(System.currentTimeMillis()-t1+"ms");
        	

             
        }finally{
//        	 session1.commit();
//             session1.close();
        }
       
    }

}

 운행 결과: (결 과 는 세 번 의 테스트 결과 에서 나 온 것 으로 외부 요인 으로 인해 다음 과 같다)
 1000 회: 632 - 650 ms
 
다음은 전통 jdbc:
 
 
 
package com.mybatis.config;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class commonjdbcBatch {

	/**
	 * @param args
	 * @throws SQLException 
	 */
	public static void main(String[] args) throws SQLException {
		Connection con=null;
		PreparedStatement s=null;
		// TODO Auto-generated method stub
			try {
				Class.forName("com.mysql.jdbc.Driver");
				 con=DriverManager.getConnection("jdbc:mysql://localhost:3306/mybatistest?useUnicode=true&amp;characterEncoding=UTF-8", "root","123456");
				 con.setAutoCommit(false);//     
				 s=con.prepareStatement(" insert into user(username,password,comment) values(?,?,?)");
				long t1=System.currentTimeMillis();
				 for(int i=0;i<1000;i++){
					s.setString(1,"clinux"+i);
					s.setString(2,"123456");
					s.setString(3,"comment");
					s.addBatch();
				}
				 s.executeBatch();
	                         con.commit();
				System.out.println(System.currentTimeMillis()-t1+"ms");
			        s.clearBatch();
			} catch (ClassNotFoundException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}finally{
				con.close();
				s.close();
			}
			
	}

}
 
 
테스트 1000 회 결과:
1000 회: 308 - 330 ms
 
 
그래서 위의 테스트 를 통 해 알 수 있 듯 이 my batis 의 삽입 속 도 는 전통 적 인 jdbc 보다 못 하 다. 이런 프레임 워 크 로 우 리 는 주로 j2ee 를 하 는 것 이다. 성능 에 있어 서 는 미 치지 못 하지만 안정 적 이기 때문에 이것 도 저울질 해 야 할 문제 이다.전통 적 으로 빠 르 지만 my batis 를 사용 하면 우 리 는 일부 측면 에서 바퀴 를 만 들 지 않 고 개발 시간 을 절약 할 수 있 습 니 다. 물론 my batis 를 사용 하 는 곳 에 대해 우 리 는 실제 프로젝트 에서 저울질 해 야 합 니 다. (어쩌면 우 리 는 my batis 의 Mapper 만 사용 하고 연못 을 연결 하면 우 리 는 다른 것 을 사용 할 수 있 습 니 다. 예 를 들 어 bonecp, c3p 0) 이상 은 연구 학습 만 할 수 있 습 니 다.
 
 
 

좋은 웹페이지 즐겨찾기