Mybatis与jdbc批量插入的比较 ---- 2016-11-14
主要测试批量插入是,jdbc与mybatis的速度差异。
mybatis测试代码
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---650ms
下面是传统的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&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---330ms
所以从上面的测试我们可以看出mybatis的插入速度不及传统的jdbc,用此类框架我们主要是搞j2ee,虽然在性能上面不及,但是稳定,所以这也是一个要权衡的问题;传统的是快,但是用mybatis我们在一些方面上可以不用在造轮子,节约开发时间,当然对于mybatis的用的地方,需要我们在实际的项目中权衡了(或许我们只用mybatis的Mapper,连接池的话我们可以用其他的,譬如bonecp,c3p0),以上仅供研究学习。
相关推荐
houmenghu 2020-11-17
我心似明月 2020-11-09
oraclemch 2020-11-06
ltd00 2020-09-12
康慧欣 2020-09-10
waveclouds 2020-09-04
蓝色深海 2020-09-15
jincheng 2020-09-01
思君夜未眠 2020-08-25
取个好名字真难 2020-08-06
歆萌 2020-08-03
阳光之吻 2020-08-03
婷婷小屋 2020-07-28
solarspot 2020-07-28
MLXY 2020-07-26
dxbjfu0 2020-07-26
songbinxu 2020-07-19
83520298 2020-07-06