08. mybatis 高级:动态sql批量插入数据

一 映射文件

<!-- 批量插入数据 -->
	<insert id="addStudents" parameterType="java.util.List">
		insert into student_101(name, age) values
		<foreach collection="list" item="stu" index="index" separator=",">
			(#{stu.name},#{stu.age})
		</foreach>
	</insert>
	<!-- 普通插入  -->
	<insert id="addStudent" parameterType="Student">
		insert into student_101(name, age) values(#{name},#{age})
	</insert>

二  测试用例

/** 
 * TODO 测试批量插入
 */
@Test
public void test_batchAdd(){
	statement = namespace + "addStudents";
	List<Student> studentList = this.createStudentList();
	Long start = System.currentTimeMillis();
	session.insert(statement,studentList);
	Long end = System.currentTimeMillis();
	System.out.println("批量插入" + studentList.size() + "  条数据耗时:" + (end - start));
	//批量插入1000 条数据耗时:655
	//批量插入2000  条数据耗时:879
	//批量插入5000  条数据耗时:1993
	//批量插入20000  条数据耗时:3148
	//批量插入30000  条数据耗时:4535
}

/** 
 * TODO 测试普通插入
 */
@Test
public void test_normalAdd(){
	statement = namespace + "addStudent";
	List<Student> studentList = this.createStudentList();
	Long start = System.currentTimeMillis();
	for (Student student : studentList) {
		session.insert(statement,student);
	}
	session.insert(statement);
	Long end = System.currentTimeMillis();
	System.out.println("普通插入" + studentList.size() + " 条数据耗时:" + (end - start));
	//普通插入1000 条数据耗时:1906
	//普通插入2000 条数据耗时:2738
	//普通插入5000 条数据耗时:4824
	//普通插入20000 条数据耗时:12908
	//普通插入30000 条数据耗时:17610
}

三 总结

1. 相比普通插入方式,批量插入会有数倍的性能提升,同时大大减少了要执行的sql 语句,减轻了数据库压力

2. 但是在使用批量插入时,需要注意批量插入的数量有限,因为是做的字符串拼接,sql语句的长度是有限制的

    原文作者:SQL
    原文地址: https://blog.csdn.net/zgf19930504/article/details/50644532
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞