`

myibatis批量插入数据和通过循环批量插入数据对比

 
阅读更多

1. 配置文件:



        <!-- 批量保存系统设置 -->
    <insert id="saveBatch" param<?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" >
<mapper namespace="com.leimingtech.service.module.setting.dao.mapper.SettingMapper">eterType="java.util.List" >

        insert into shop_setting(name,value)values
        <foreach collection="list" item="item" index="index" separator=",">
        (#{item.name},#{item.value})
        </foreach>
    </insert>

<!-- 保存系统设置 -->
    <insert id="save" parameterType="com.leimingtech.core.entity.base.Setting">
        insert into shop_setting(name,value)values(#{name},#{value})
    </insert>

</mapper>


@SqlMapper
public interface SettingMapper{

        /**
     * 批量保存系统设置
     * @param setting
     */
    void saveBatch(List<Setting> setting);

    /**
     * 保存系统设置
     * @param setting
     */
    void save(Setting setting);
}





package com.leimingtech.service.module.setting.dao;


import java.util.List;
import java.util.Map;

import org.apache.ibatis.annotations.Param;

import com.leimingtech.core.entity.base.Setting;

public interface SettingDao {

/**
* 保存系统设置
* @param setting
*/
void save(Setting setting);

/**
     * 保存系统设置
     * @param setting
     */
    void saveBatch(List<Setting> setting);

}


package com.leimingtech.service.module.setting.dao.impl;

import com.leimingtech.core.entity.base.Setting;
import com.leimingtech.service.module.setting.dao.SettingDao;
import com.leimingtech.service.module.setting.dao.mapper.SettingMapper;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;
import java.util.List;
import java.util.Map;

@Service("settingDao")
public class SettingDaoImpl  implements SettingDao {
    @Resource
    private SettingMapper settingMapper;

   /**
     * 保存系统设置
     * @param setting
     */
    @Override
    public void save(Setting setting){
        settingMapper.save(setting);
    }


   /**
     * 保存系统设置
     * @param setting
     */
    @Override
    public void saveBatch(List<Setting> setting){
        settingMapper.saveBatch(setting);
    }
}






测试类:
package sgnctest;

import com.leimingtech.core.entity.base.Setting;
import com.leimingtech.core.filter.XSSSecurityManager;
import com.leimingtech.service.module.frontorganization.service.FrontOrganizationService;
import com.leimingtech.service.module.ncorg.service.CreNcOrgService;
import com.leimingtech.service.module.projectinfo.service.CreProjectInfoService;
import com.leimingtech.service.module.setting.service.SettingService;
import net.sf.json.JSONArray;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.poifs.filesystem.POIFSFileSystem;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.springframework.beans.BeansException;
import org.springframework.context.support.ClassPathXmlApplicationContext;

import java.io.*;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.UUID;

public class nctest {

private ClassPathXmlApplicationContext context = null;

@Before
public void before(){
context = new ClassPathXmlApplicationContext("context/applicationContext.xml");
// context.start();
}

/**
* 测试批量插入
*/
@Test
public void insertListBatch(){
System.out.println(context);
SettingService settingService = (SettingService)context.getBean("settingService");
// settingService.save("12345","45556");
List<Setting> list = new ArrayList<Setting>();
for (int i = 0; i <2000 ; i++) {
Setting setting = new Setting();
setting.setName("name"+i);
setting.setValue("value"+i);
list.add(setting);
}

long start = Calendar.getInstance().getTimeInMillis();
settingService.saveBatch(list);
long end = Calendar.getInstance().getTimeInMillis();

System.out.println("runtime:"+(end - start));

}

@Test
public void insertList(){
SettingService settingService = (SettingService)context.getBean("settingService");
List<Setting> list = new ArrayList<Setting>();
for (int i = 0; i <2000 ; i++) {
Setting setting = new Setting();
setting.setName("name"+i);
setting.setValue("value"+i);
list.add(setting);
}

long start = Calendar.getInstance().getTimeInMillis();
for(Setting setting:list){
settingService.save(setting.getName(),setting.getValue());
}
long end = Calendar.getInstance().getTimeInMillis();

System.out.println("runtime:"+(end - start));

}

}



结果比较:
测试结果:
批量插入2000条数据方法执行时间:455

循环调用插入2000条数据执行时间:102240

通过时间比较性能相差200多倍





分享到:
评论

相关推荐

    Mybatis 插入一条或批量插入 返回带有自增长主键记录的实例

    通过上面的示例,我们可以看到 Mybatis 插入一条或批量插入 返回带有自增长主键记录的实例的实现方式。在 MySQL 中,我们使用 `useGeneratedKeys` 和 `keyProperty` 属性,而在 Oracle 中,我们使用 `selectKey` ...

    Myibatis+mysql(适用于新手入门)

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL、存储过程以及高级映射。MyBatis 避免了几乎所有的 JDBC 代码和手动设置...通过实践和进一步学习,你将能够充分利用 MyBatis 的强大功能,构建高效的数据访问层。

    spring,myibatis,配置文件,数据源,web工程

    在`spring-servlet.xml`中,我们可以导入Spring的业务层、服务层和数据访问层的配置,以及MyBatis的相关配置。这样,我们就完成了Spring与MyBatis的集成,可以在Web工程中方便地进行数据库操作。 总结一下,Spring...

    springMVC+Myibatis框架整合实例

    SpringMVC和MyBatis是两个非常流行的Java Web开发框架,它们在企业级应用中广泛使用。...通过学习和实践,你将能够更好地理解和掌握这两种框架的协同工作原理,为后续的Java Web开发打下坚实的基础。

    myIbatis入门示例、myIbatis helloword示例、myIbatis第一个示例

    本教程将带你一步步走进MyBatis的世界,通过"myIbatis入门示例、myIbatis helloworld示例、myIbatis第一个示例",让你快速掌握MyBatis的核心概念和基本用法。 1. MyBatis简介 MyBatis由Mike Keith和Clinton Begin...

    myibatis+spring+springmvc框架整合

    总之,MyBatis、Spring和SpringMVC的整合为Java Web开发提供了一个强大而灵活的解决方案,通过合理的配置和编码,开发者可以构建出高效、可扩展的应用系统。这个整合过程涉及到的细节繁多,但只要掌握了基本原理和...

    myibatis3和springMVC整合

    这种整合能够充分利用MyBatis的SQL映射功能和SpringMVC的MVC设计模式,实现数据访问层与业务逻辑层的解耦。 在SpringMVC框架中,MyBatis作为数据访问层的组件,负责处理数据库交互。首先,我们需要在`...

    SpringMVC3.0+MyIbatis3.0(分页示例

    本示例聚焦于如何在SpringMVC 3.0和MyBatis 3.0环境中实现分页功能,这在处理大量数据时尤其重要,能够提高用户体验并减轻服务器压力。 **SpringMVC 3.0** SpringMVC是Spring框架的一部分,它是一个基于模型-视图-...

    SpringMvc3+MyIbatis3

    SpringMvc3和MyIbatis3是当前流行的Java企业级开发框架和持久层框架,它们各自拥有强大的功能和灵活性,适合用于复杂、高性能的应用系统。SpringMvc是一种基于Java的实现了MVC设计模式的请求驱动类型的轻量级Web框架...

    MyiBatis_用户手册

    MyiBatis_用户手册包含以下资源: 1.iBatis2.0 开发指南中文版 2.MyiBatis3 用户指南中文版 3.MyiBatis Spring 1.0.0-snapshot 参考文档 以上都是pdf格式文档

    springMVC+myibatis的maven项目架构

    综上所述,"springMVC+myibatis的maven项目架构"是一个完整的Java Web解决方案,它利用SpringMVC处理Web请求,MyBatis负责数据访问,而Maven确保了项目的构建和依赖管理。此外,项目还提供了实用的Word和Excel工具类...

    MyIbatis3.0入门实例

    MyIbatis3.0入门+进阶实例,直接把资源工程导入到MyEclise里就可以运行,导入到Eclipse里也可以, 包含: ---ibatis_3_学习笔记.pdf ---ibatis3__发布_入门示例.pdf 可以带你熟练使用MyIbatis3.0,实例代码对MyIbatis3.0...

    SpringMVC3.0+MyIbatis3.0(分页示例)

    标题 "SpringMVC3.0+MyIbatis3.0(分页示例)" 提到的是一个集成SpringMVC和MyBatis的项目,并且包含了分页功能的实现。这通常意味着我们要探讨的是如何在Java Web开发环境中整合这两个流行的框架,并实现数据的分页...

    spring mvc3.2.3+ myibatis3.2.2

    有敢于网上下载多不适用,故作一层次分明功能较全面(列表,登录验证,增加)的功能验证性web程序以为分享,因程序为功能验证性程序,故页面之间没有全套连接,可自行通过程序反推,本程序为实用性程序,已实际项目...

    Myibatis3.4.2 SpringMVC4.2.0-合并(SSM框架)源码

    1. **模型-视图-控制器**:通过Model-View-Controller架构模式分离业务逻辑、用户界面和数据。 2. **注解驱动**:使用注解简化配置,如@Controller、@RequestMapping等。 3. **拦截器**:自定义拦截器处理请求,实现...

    MyIbatIS中文版电子书

    1. **MyBatis概述**:了解MyBatis的基本概念,包括它的起源、发展和主要功能,以及与Hibernate、JDBC等其他框架的对比。 2. **安装与配置**:学习如何在项目中引入MyBatis,包括添加依赖、配置mybatis-config.xml...

    myibatis开发官方帮助文档

    【标题】"myibatis开发官方帮助文档"涵盖了MyBatis这一流行持久层框架的核心概念、使用方法和最佳实践。MyBatis是一个优秀的Java库,它允许开发者将SQL语句直接集成到Java代码中,提供了比传统的JDBC更为便捷且灵活...

    springmvc-myibatis-heibernate

    通过XML配置文件或注解,MyBatis 可以动态地执行SQL查询、更新、删除和插入操作。它提供了一种灵活的方式来进行数据库操作,避免了传统的JDBC代码的繁琐。 **Hibernate** Hibernate 是一个强大的ORM框架,它可以将...

    springmvc+spirng+myibatis jar包

    标题 "springmvc+spirng+myibatis jar包" 描述的是一个包含了一系列Java库的压缩文件,这些库主要用于构建基于Spring MVC、Spring框架和MyBatis的Web应用程序。这个组合是Java后端开发中常见的一种技术栈,用于处理...

Global site tag (gtag.js) - Google Analytics