Mybatis批量操作工具类(自用)

Mybatis批量操作工具类

由于最近公司平台业务的实际需要,为了弥补原本系统中没有批量操作的工具类,以及防止未来可能不引入MyBatis-plus, 于是结合网上的资料,编写了当前的工具类。对这个工具类做一个记录。

package cac.safe.utils;
import lombok.extern.slf4j.Slf4j;
import org.apache.ibatis.session.ExecutorType;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.util.List;
import java.util.function.ToIntBiFunction;

/**
 * @Description: Mybatis批量操作工具类
 * @param:
 * @return
 * @version: 1.0
 * @Author: AKA皮卡Q
 * @Date: 2024/5/15
 */
@Component
@Slf4j
public class MyBatisUtils {
    @Autowired
    private SqlSessionFactory sqlSessionFactory;

    /**
     * @param list 需要插入或修改数据库的实体对象集合或列表
     * @param mapperClass 用到的mapper的class文件
     * @param mapperRToIntBiFunction 写法(ObjectMapper::insert) ObjectMapper是对应的mapper文件,insert是对应的方法名称,指定单条插入或修改或删除方法,必须是单条
     */
    public <T, Mapper> void batchOperate(List<T> list, Class<Mapper> mapperClass, ToIntBiFunction<Mapper, T> mapperRToIntBiFunction) {
        //切换batch模式
        SqlSession sqlSession = sqlSessionFactory.openSession(ExecutorType.BATCH);
        try {
            Mapper mapper = sqlSession.getMapper(mapperClass);
            for (T item : list) {
                //调用方法
                mapperRToIntBiFunction.applyAsInt(mapper, item);
            }
            sqlSession.commit();//提交事务
        } catch (Exception e) {
            log.error("批量操作报错", e);
        } finally {
            sqlSession.close();
        }
    }

}

对应的mapper接口中需要编写单条数据操作的方法以及对应xml文件中的处理,返回值好像不能用void,因此这里我统一使用了int作为方法的返回值。

Mapper接口

public int update(@Param("employee") Employee employee);

Mapper.xml文件

<insert id="update">
	UPDATE EMPLOYEE_BASIC
	SET
		EMPLOYEE_ID = #{employee.employeeId},
		EMPLOYEE_NAME = #{employee.employeeName}
	where
		ID = #{employee.id}
</insert>

工具类的使用

@Autowired
private MyBatisUtils myBatisUtils;

// 第一个参数为需要批量新增或修改的实体列表
// 第二个参数为对应需要批量操作的单条方法的mapper接口
// 第三个参数为mapper文件对应的接口方法,例如需要做批量更新的操作,就传入mapper文件的uopdate方法,名字与mapper接口定义的名字相同
myBatisUtils.batchOperate(employeeList, EmployeeMapper.class, EmployeeMapper::update);
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值