mybatis学习之路mysql批量新增数据的方法

这篇文章主要介绍了mybatis学习之路MysqL批量新增数据的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

接下来两节要探讨的是批量插入和批量更新,因为这两种操作在企业中也经常用到。

MysqL新增语句  

insert into 表名(字段,字段。。。) values ( 值,值 。。。);此种适合单条插入。

批量插入,一种可以在代码中循环着执行上面的语句,但是这种效率太差,下面会有对比,看看它有多差。

另一种,可以用MysqL支持的批量插入语句,

insert into 表名(字段,字段。。。) values ( 值,值 。。。),( 值,值 。。。),( 值,值 。。。)....

这种方式相比起来,更高效。

下面开始来实现。

select uuid() insert into t_customer (id,c_name,c_sex,c_ceroNo,c_ceroType,c_age) values (#{id},#{name},#{sex},#{ceroNo},#{ceroType},#{age}) insert into t_customer (id,c_name,c_sex,c_ceroNo,c_ceroType,c_age) values ((select uuid()),#{cus.name},#{cus.sex},#{cus.ceroNo},#{cus.ceroType},#{cus.age})

实体model对象

package com.soft.mybatis.model; /** * Created by xuweiwei on 2017/9/10. */ public class Customer { private String id; private String name; private Integer age; private Integer sex; private String ceroNo; private Integer ceroType; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getAge() { return age; } public void setAge(Integer age) { this.age = age; } public Integer getSex() { return sex; } public void setSex(Integer sex) { this.sex = sex; } public String getCeroNo() { return ceroNo; } public void setCeroNo(String ceroNo) { this.ceroNo = ceroNo; } public Integer getCeroType() { return ceroType; } public void setCeroType(Integer ceroType) { this.ceroType = ceroType; } @Override public String toString() { return "Customer{" + "id='" + id + ''' + ", name='" + name + ''' + ", age=" + age + ", sex=" + sex + ", ceroNo='" + ceroNo + ''' + ", ceroType='" + ceroType + ''' + '}'; } }

接口

int add(Customer customer); int batchInsert(Map param);

实现

/** * 新增数据 * @param customer * @return */ public int add(Customer customer) { return insert("customer.insert", customer); } /** * 批量插入数据 * @param param * @return */ public int batchInsert(Map param) { return insert("customer.batchInsert", param); } /** * 公共部分 * @param statementId * @param obj * @return */ private int insert(String statementId, Object obj){ sqlSession sqlSession = null; try { sqlSession = sqlsessionUtil.getsqlSession(); int key = sqlSession.insert(statementId, obj); // commit sqlSession.commit(); return key; } catch (Exception e) { sqlSession.rollback(); e.printstacktrace(); } finally { sqlsessionUtil.closeSession(sqlSession); } return 0; }

测试类

@Test public void add() throws Exception { Long start = System.currentTimeMillis(); for(int i=0;i param = new HashMap(); List list = new ArrayList(); for(int i=0;i

两种都进行插入1000条测试

由于我没有用连接池等等原因,在插入了700多条的时候 junit直接挂了,

Cause: org.apache.ibatis.executor.ExecutorException: Error selecting key or setting result to parameter object.

Cause: com.MysqL.jdbc.exceptions.jdbc4.MysqLNonTransientConnectionException:

Data source rejected establishment of connection,  message from server: "Too many connections"

数据库插入结果:

但是第二种仅仅用了2秒多就ok了。可见这种效率很高。

数据库结果

这里写了两个,其实第一种仅仅是做对比效率用。

批量新增数据记录完毕。

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...