`

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

阅读更多

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

 

Xml代码  
  1. <?xml version="1.0" encoding="UTF-8" ?>  
  2. <!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"  
  3. "http://mybatis.org/dtd/mybatis-3-config.dtd">  
  4.   
  5.   
  6. <configuration>  
  7. <typeAliases>  
  8.         <typeAlias type="com.mybatis.config.User"  
  9.             alias="User" />  
  10.     </typeAliases>package com.mybatis.config;  
  11.     <environments default="development">  
  12.         <environment id="development">  
  13.             <transactionManager type="JDBC" /><!--事务管理驱动  -->  
  14.             <dataSource type="POOLED"><!-- 数据源配置 -->  
  15.                 <property name="driver" value="com.mysql.jdbc.Driver" />  
  16.                 <property name="url" value="jdbc:mysql://localhost:3306/mybatistest?useUnicode=true&amp;characterEncoding=UTF-8" />  
  17.                 <property name="username" value="root" />  
  18.                 <property name="password" value="123456" />  
  19.             </dataSource>  
  20.         </environment>  
  21.     </environments>  
  22.     <mappers>  
  23.         <mapper resource="UserDaoMapper.xml"/>  
  24.     </mappers>  
  25. </configuration>  
  26. <?xml version="1.0" encoding="UTF-8" ?>    
  27. <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">   
  28.   
  29. <!-- mybatis 映射文件 -->  
  30. <mapper namespace="com.mybatis.config.UserDao">  
  31.      
  32.      <cache readOnly="true" />  
  33.        
  34.      <insert id="insert" parameterType="User" >  
  35.         insert into user(username,password,comment) values(#{username},#{password},#{comment})  
  36.     </insert>  
  37.       
  38.     
  39.       
  40. </mapper>  

 

 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&amp;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批量插入MySQL数据库性能测试

    本文将探讨Mybatis和JDBC在批量插入MySQL数据库时的性能差异,并提供相关的测试资源。 首先,JDBC(Java Database Connectivity)是Java平台中用于与数据库交互的一种规范,它允许程序员使用SQL语句直接操作数据库...

    SpringBoot整合Mybatis连接SQL Server 跨库批量插入

    本篇将深入探讨如何在Spring Boot项目中整合Mybatis,实现对SQL Server数据库的跨库批量插入操作。 首先,我们需要在Spring Boot项目中引入相关的依赖。对于Mybatis的支持,我们需要添加Mybatis和其Spring Boot ...

    Java实现mybatis批量插入数据到Oracle

    本篇文章将详细介绍如何利用Java和MyBatis实现批量插入数据到Oracle数据库中。 首先,我们需要理解Oracle数据库的一些基本概念。Oracle是世界上最流行的商业关系型数据库管理系统之一,以其强大的功能和高可靠性而...

    Mybatis 3+Mysql 实现批量插入

    在IT领域,尤其是在数据库操作与框架应用中,批量插入数据是一项常见且重要的需求。相比于单条插入,批量插入能够显著提升数据处理效率,减少数据库I/O操作,从而提高整体性能。本文将深入探讨如何利用MyBatis框架...

    mybatis中批量插入的两种方式(高效插入)

    本文将深入探讨MyBatis中实现批量插入的两种高效方式。 ### 1. MyBatis `foreach` 标签 `foreach` 是MyBatis中用于在SQL语句中迭代集合的标签,特别适合构建`IN`条件。`foreach` 元素的属性包括: - `item`: 集合...

    mybatis的oracle的批量插入优化和mybatis的generator自动生成三层文件

    本文将详细探讨如何在Oracle数据库中进行批量插入优化,并介绍MyBatis Generator这一自动化代码生成工具,以提高开发效率。 首先,让我们深入理解Oracle数据库中的批量插入。批量插入可以显著提升性能,尤其是在...

    基于SpringBoot、JDBC、Mybatis和EasyExcel的Java Excel批量导入导出设计源码

    该项目是一款基于SpringBoot、JDBC、Mybatis和EasyExcel的Java Excel批量导入导出解决方案源码,包含22个文件,其中包括10个Java源文件、2个Markdown文件、2个XML文件、1个Git忽略文件、1个JAR包文件、1个属性文件、...

    jdbc-helper-0.3.1

    然而,原生的JDBC API使用起来较为繁琐,为了解决这一问题,开发者们通常会选择使用一些封装后的JDBC工具库,如MyBatis、Hibernate等。本文将详细介绍Google封装的轻量级JDBC工具——jdbc-helper-0.3.1,它以简洁的...

    springboot+mybatis-plus集成

    MyBatis Plus是在MyBatis的基础上进行扩展的,它提供了更为简便的CRUD操作,如自动填充主键、批量插入、条件构造器等。MyBatis Plus的集成使得我们可以专注于业务逻辑,而不必花费过多时间在SQL编写上。 集成Spring...

    MyBatis主配置文件

    与传统的 JDBC 相比,MyBatis 简化了手动设置参数和获取结果集的过程,通过 XML 或注解进行映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通Java对象)映射成数据库中的记录。MyBatis 不是完全的 ORM ...

    Mybatis批量插入的四种方式.docx

    Mybatis批量插入的四种方式 Mybatis 是一个流行的 Java 持久层框架,提供了多种方式来实现批量插入操作。下面将详细介绍 Mybatis 批量插入的四种方式。 1. 循环插入 循环插入是最简单的批量插入方式,即通过循环...

    mybatis-plus-3.0.zip

    这个工具包在 MyBatis 的基础上进行了许多增强,提供了诸如自动 CRUD(创建、读取、更新、删除)操作、条件构造器、批量插入、主键自动生成等功能。 1. **CRUD 操作**:MyBatis-Plus 提供了简单易用的 CRUD 方法,...

    mybatis开发使用的jar包

    在SSM(Spring、SpringMVC、MyBatis)框架组合中,MyBatis主要负责数据库操作,使得开发者能够避免编写大量的JDBC代码,提高了开发效率。下面将详细介绍MyBatis的关键知识点以及在SSM框架中的作用。 1. MyBatis核心...

    mybatis-plus-demo.zip

    MyBatis-Plus 是 MyBatis 的一个扩展,它提供了许多方便实用的功能,如自动 CRUD 操作、条件构造器、批量插入、主键自增、填充公共字段等,极大地简化了开发工作。在 SpringBoot 框架下集成 MyBatis-Plus,可以让...

    mybatis_insertbatch_db.rar

    总之,这个压缩包提供的学习资源涵盖了SpringBoot与MyBatis集成、MyBatis批量插入的最佳实践、以及如何通过性能测试评估和优化数据库操作。通过研究这个例子,开发者可以更好地理解如何在大数据量的情况下提高应用的...

    mybatis直接执行sql语句后续之一

    6. **TypeHandler**:负责Java类型与JDBC类型的转换,确保数据在Java对象和数据库之间正确地进行类型转换。 7. **工具类SqlSessionManager和SqlSessionFactoryBuilder**:SqlSessionManager提供了更高级的事务管理...

    SpringBoot使用mybatis批量新增500万数据到mysql数据库Demo

    在本项目中,我们主要探讨的是如何利用SpringBoot集成Mybatis框架进行大数据量(例如500万条)的批量插入操作,并将其高效地存入MySQL数据库。这个Demo旨在提供一个学习实例,帮助开发者理解并优化大数据处理的性能...

    mybatis plus系列教程博客参考源码-东离与糖宝

    【标题】"mybatis plus系列教程博客参考源码-东离与糖宝"涉及的知识点主要集中在MyBatis Plus(简称MBP)这一强大的MyBatis扩展框架上。MyBatis Plus是一个为MyBatis框架提供了简单 CRUD 操作的工具,它简化了对...

    phoenix-mybatis-demo:凤凰-mybatis集成的一些基本知识

    【标题】:“凤凰-mybatis-demo”是一个项目实例,它展示了如何将凤凰(Phoenix)数据库连接框架与MyBatis持久层框架进行集成。这个项目旨在帮助开发者理解和实践在Java环境中使用这两种技术的组合。 【描述】:...

Global site tag (gtag.js) - Google Analytics