主要测试批量插入是,jdbc与mybatis的速度差异。
mybatis测试代码
- <?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&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>
java测试代码:
- 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),以上仅供研究学习。
相关推荐
本文将探讨Mybatis和JDBC在批量插入MySQL数据库时的性能差异,并提供相关的测试资源。 首先,JDBC(Java Database Connectivity)是Java平台中用于与数据库交互的一种规范,它允许程序员使用SQL语句直接操作数据库...
本篇将深入探讨如何在Spring Boot项目中整合Mybatis,实现对SQL Server数据库的跨库批量插入操作。 首先,我们需要在Spring Boot项目中引入相关的依赖。对于Mybatis的支持,我们需要添加Mybatis和其Spring Boot ...
本篇文章将详细介绍如何利用Java和MyBatis实现批量插入数据到Oracle数据库中。 首先,我们需要理解Oracle数据库的一些基本概念。Oracle是世界上最流行的商业关系型数据库管理系统之一,以其强大的功能和高可靠性而...
在IT领域,尤其是在数据库操作与框架应用中,批量插入数据是一项常见且重要的需求。相比于单条插入,批量插入能够显著提升数据处理效率,减少数据库I/O操作,从而提高整体性能。本文将深入探讨如何利用MyBatis框架...
本文将深入探讨MyBatis中实现批量插入的两种高效方式。 ### 1. MyBatis `foreach` 标签 `foreach` 是MyBatis中用于在SQL语句中迭代集合的标签,特别适合构建`IN`条件。`foreach` 元素的属性包括: - `item`: 集合...
本文将详细探讨如何在Oracle数据库中进行批量插入优化,并介绍MyBatis Generator这一自动化代码生成工具,以提高开发效率。 首先,让我们深入理解Oracle数据库中的批量插入。批量插入可以显著提升性能,尤其是在...
该项目是一款基于SpringBoot、JDBC、Mybatis和EasyExcel的Java Excel批量导入导出解决方案源码,包含22个文件,其中包括10个Java源文件、2个Markdown文件、2个XML文件、1个Git忽略文件、1个JAR包文件、1个属性文件、...
然而,原生的JDBC API使用起来较为繁琐,为了解决这一问题,开发者们通常会选择使用一些封装后的JDBC工具库,如MyBatis、Hibernate等。本文将详细介绍Google封装的轻量级JDBC工具——jdbc-helper-0.3.1,它以简洁的...
MyBatis Plus是在MyBatis的基础上进行扩展的,它提供了更为简便的CRUD操作,如自动填充主键、批量插入、条件构造器等。MyBatis Plus的集成使得我们可以专注于业务逻辑,而不必花费过多时间在SQL编写上。 集成Spring...
与传统的 JDBC 相比,MyBatis 简化了手动设置参数和获取结果集的过程,通过 XML 或注解进行映射,将接口和 Java 的 POJOs(Plain Old Java Objects,普通Java对象)映射成数据库中的记录。MyBatis 不是完全的 ORM ...
Mybatis批量插入的四种方式 Mybatis 是一个流行的 Java 持久层框架,提供了多种方式来实现批量插入操作。下面将详细介绍 Mybatis 批量插入的四种方式。 1. 循环插入 循环插入是最简单的批量插入方式,即通过循环...
这个工具包在 MyBatis 的基础上进行了许多增强,提供了诸如自动 CRUD(创建、读取、更新、删除)操作、条件构造器、批量插入、主键自动生成等功能。 1. **CRUD 操作**:MyBatis-Plus 提供了简单易用的 CRUD 方法,...
在SSM(Spring、SpringMVC、MyBatis)框架组合中,MyBatis主要负责数据库操作,使得开发者能够避免编写大量的JDBC代码,提高了开发效率。下面将详细介绍MyBatis的关键知识点以及在SSM框架中的作用。 1. MyBatis核心...
MyBatis-Plus 是 MyBatis 的一个扩展,它提供了许多方便实用的功能,如自动 CRUD 操作、条件构造器、批量插入、主键自增、填充公共字段等,极大地简化了开发工作。在 SpringBoot 框架下集成 MyBatis-Plus,可以让...
总之,这个压缩包提供的学习资源涵盖了SpringBoot与MyBatis集成、MyBatis批量插入的最佳实践、以及如何通过性能测试评估和优化数据库操作。通过研究这个例子,开发者可以更好地理解如何在大数据量的情况下提高应用的...
6. **TypeHandler**:负责Java类型与JDBC类型的转换,确保数据在Java对象和数据库之间正确地进行类型转换。 7. **工具类SqlSessionManager和SqlSessionFactoryBuilder**:SqlSessionManager提供了更高级的事务管理...
在本项目中,我们主要探讨的是如何利用SpringBoot集成Mybatis框架进行大数据量(例如500万条)的批量插入操作,并将其高效地存入MySQL数据库。这个Demo旨在提供一个学习实例,帮助开发者理解并优化大数据处理的性能...
【标题】"mybatis plus系列教程博客参考源码-东离与糖宝"涉及的知识点主要集中在MyBatis Plus(简称MBP)这一强大的MyBatis扩展框架上。MyBatis Plus是一个为MyBatis框架提供了简单 CRUD 操作的工具,它简化了对...
【标题】:“凤凰-mybatis-demo”是一个项目实例,它展示了如何将凤凰(Phoenix)数据库连接框架与MyBatis持久层框架进行集成。这个项目旨在帮助开发者理解和实践在Java环境中使用这两种技术的组合。 【描述】:...