Mybatis教程 | 第六篇:批量新增、批量修改、批量删除

本文介绍了如何使用Mybatis进行批量新增、删除和修改操作,通过对比动态SQL与传统方式,展示了动态SQL在性能上的优势。同时探讨了Mybatis内置的批处理设置,指出在大量数据操作时,批处理能提供更好的性能,但在获取影响行数上有局限,需要额外设计计数器。
摘要由CSDN通过智能技术生成

前言

在上一篇中提到了这么一个问题:

for(Integer id : ids) {
	userDao.deleteUserById(id);
}

但我们需要批量删除的时候,这样会不停的获取数据库连接,资源消耗是很大的。

接下来就利用Mybatis的动态SQL功能,去验证一下这个问题(传送门:动态SQL)。

首先搭建Mybatis环境和日志环境搭建mybatis环境和日志环境(参考第一篇第二篇),并创建如下一张表tb_user(id、姓名)和相应的持久层对象:

2019022719500580.png

批量新增

A.利用想当然的方式测试

mapper文件和dao层接口

<insert id="saveUser" parameterType="com.zepal.mybatis.domain.User" useGeneratedKeys="true">
  	INSERT INTO tb_user (user_name, user_age) VALUEs (#{userName}, #{userAge});
  </insert>
int saveUser(User user);

测试程序和结果

public class Test {

	public static void main(String[] args) {
		InputStream is = Test.class.getResourceAsStream("/mybatis/mybatis-config.xml");
		SqlSessionFactory sqlSessionFactory = new
		SqlSessionFactoryBuilder().build(is); 
		SqlSession sqlSession = sqlSessionFactory.openSession(); 
		UserDao userDao = sqlSession.getMapper(UserDao.class);
		long start_time = System.currentTimeMillis();
		for(int i=0;i<10000;i++) {
			User user = new User();
			user.setUserName("name"+i);
			user.setUserAge(i);
			userDao.saveUser(user);
			System.out.println("===循环执行中===");
		}
		sqlSession.commit();
		sqlSession.close();
		System.out.println("耗时 : " + (System.currentTimeMillis()-start_time));
	}
}
耗时 : 9414

增加1000条数据用了近10S钟。

B.利用动态SQL批量执行

mapper文件和dao层接口

<insert id="saveUserWithBatch" parameterType="list" useGeneratedKeys="true">
  	INSERT INTO tb_user (user_name, user_age) VALUES 
  	<foreach collection="list" item="item" separator="," close=";">
		(#{item.userName},#{item.userA
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值