您的位置:首页 > 数据库 > MySQL

mysql批量插入数据的基类

2016-09-01 16:19 309 查看
自己设计的一个mysql数据库批量添加数据的基类。用于批量向mysql数据库添加数据,子类实现起来很简单,自测性能也还不错。

1、基类实现-BatchAddBase

using System.Collections.Generic;
using System.Text;

namespace MysqlBatchAdd
{
public abstract class BatchAddBase<T> where T : class, new()
{
/// <summary>
/// 插入语句的头部
/// </summary>
protected abstract string InsertHead { get; }

/// <summary>
/// 出入语句的执行体
/// </summary>
protected List<string> InsertBodyList { get; set; } = new List<string>();
/// <summary>
/// 缓存的sql语句长度
/// </summary>
public int SqlCacheLengh { get; set; } = 1000 * 10;

/// <summary>
/// 批量添加的方法
/// </summary>
/// <param name="m"></param>
public abstract void BatchAdd(T m);

/// <summary>
/// 执行添加
/// </summary>
public virtual void ExecuteBatchAdd()
{
StringBuilder sqlCache = new StringBuilder();

foreach (string insertBody in InsertBodyList)
{
sqlCache.Append(insertBody + ",");

if (sqlCache.Length >= SqlCacheLengh)
{
sqlCache.Remove(sqlCache.Length - 1, 1);
MySqlHelper.ExecuteNonQuery(this.InsertHead + sqlCache.ToString());
sqlCache.Clear();
}
}

if (sqlCache.Length > 0)
{
sqlCache.Remove(sqlCache.Length - 1, 1);
MySqlHelper.ExecuteNonQuery(this.InsertHead + sqlCache.ToString());
sqlCache.Clear();
}
}
/// <summary>
/// 清楚缓存
/// </summary>
public void ClearInsertBody()
{
this.InsertBodyList.Clear();
}
}
}


2、一个简单的子类实现-PersonAddHelper

namespace MysqlBatchAdd
{
public class PersonAddHelper : BatchAddBase<Person>
{
protected override string InsertHead
{
get
{
return @"insert into person(
name) values ";
}
}

public override void BatchAdd(Person m)
{
this.InsertBodyList.Add($@" (
'{m.name}')");
}
}
}


3、控制台项目,使用示例

static void Main(string[] args)
{
PersonAddHelper personAddHelper = new PersonAddHelper();

Stopwatch watch = new Stopwatch();

watch.Start();

int amount = 100000;

for (int i = 1; i <= amount; i++)
{
personAddHelper.BatchAdd(new Person() { name = i + "号" });
}

personAddHelper.ExecuteBatchAdd();

watch.Stop();

Console.WriteLine($"成功插入 {amount} 条数据,用时:{watch.ElapsedMilliseconds} ms");

Console.ReadKey();
}


4、源码示例地址:http://files.cnblogs.com/files/renjing/MysqlBatchAdd.rar
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: