mybatis批处理数据

对于一些批量数据的处理,例如批量导入数据到数据库或者批量删除的需求,可能首先会想到会在业务层那里使用for循环处理数据,这种查询方式虽然可行,但每执行一次循环语句,都需要向数据库中发送一条查询SOL,频繁的操作数据库,会大大消耗资源,效率非常的慢。对于这些问题处理,应该考虑如何一次性的把所有数据全操作完,而不是用for循环的频繁操作数据库,那么该如何解决呢?
那就是用JDBC所提供的批处理的方式来处理这些问题,其实,MyBatis 中已经提供了一种用于数组和集合循环遍历的方式,那就是使用元素,我们完全可以通过元素来解决上述类似的问题。
假设,在我要批量删除权限列表的数据,首先会在sql映射文件中编写删除的sql语句,然后传入要删除数据的id数组,然后通过标签来循环该id数组,而不是在业务层for循环一条一条的删除,这就是批处理,相关代码如下:

  1. 首先,编写删除权限列表的接口方法:
/**
	 * 通过PermissonId删除权限列表
	 * @param ids
	 * @return
	 */
	int deletePermissonListById(int[] ids) throws Exception;
  1. 在对应的映射文件添加删除的sql语句
<!-- 通过Permisson主键删除权限列表 -->
	<delete id="deletePermissonListById">
		DELETE u_permission.*,u_role_permission.* FROM
		u_permission LEFT JOIN
		u_role_permission ON u_permission.id = u_role_permission.rid
		WHERE
		u_permission.id IN
		<foreach collection="array" open="(" separator="," close=")"
			index="index" item="id">
			#{id}
		</foreach>
	</delete>

在上述代码中,使用了元素对传入的集合进行遍历并进行了动态SOL组装。 关于元素中使用的几种属性的描述具体如下。
• item: 配置的是循环中当前的元素。
• index: 配置的是当前元素在集合的位置下标。
• collection: 配罩的list 是传递过来的参数类型(首字母小写),它可以是一个array、 list(或collection)、 Map集合的键、POJO包装类中数组或集合类型的属性名等。
• open和close: 配置的是以什么符号将这些集合元素包装起来。
• separator: 配置的是各个元素的间隔符
通过测试代码可以看出,值执行一次sql语句:
在这里插入图片描述

注意 : 在使用时最关键也是最容易出错的就是collection属性,该属性是必须指定的,而且在不同情况下, 该属性的值是不一样的。 主要有以下3种情况。
( 1 )如果传入的是单参数且参数类型是一个数组或者List 的时候, collection 属性值分别为array和Iist (或collection)。
( 2 )如果传入的参数是多个的时候,就需要把它们封装成一个Map 了,当然单参数也可以封装成Map集合, 这时候collection属性值就为Map的键。
( 3 )如果传入的参数是POJO包装类的时候,collection属性值就为该包装类中需要进行选历的数组或集合的属性名。
所以在设值collection属性值的时候,必须按照实际情况配直,否则程序就会出现异常。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值