mybatis+MySQL批量插入更新数据

声明:所有数据来源于网络

service层方法

public int saveOrUpdate(List<Map<String,Object>> insertItems, String tableName){
        int eachSize = 1000;//每次提交数量
        if(!insertItems.isEmpty()){
            Map<String,Object> params = new HashMap<>();
            int count = insertItems.size()/eachSize;
            int yu = insertItems.size()%eachSize;
            for(int i = 0; i <= count; ++i){
                List<Map<String,Object>> subList = new ArrayList<>();
                if( i == count){
                    if(yu != 0){
                        subList = insertItems.subList(i * eachSize, eachSize * i + yu);
                    }else {
                        continue;
                    }
                } else {
                    subList = insertItems.subList(i * eachSize, eachSize * (i + 1));
                }
                params.put("table_name",tableName);
                params.put("fields",subList.get(0));
                params.put("list",subList);
                //调用mapper插入数据库
                mapper.saveOrUpdate(params);
                return 1;
            }
        }
        return 0;
    }

mapper层sql注解

@Insert({
            "<script>",
            "INSERT INTO ${table_name}",
            "<foreach collection=\"fields\" index=\"field\"  item=\"fieldVal\" separator=\",\" open=\"(\" close=\")\">",
            "${field}",
            "</foreach>",
            "VALUES  ",
            "<foreach collection=\"list\" index=\"index\" item=\"record\" separator=\",\" >",
            "<foreach collection=\"record\" index=\"key\"  item=\"item\" separator=\",\" open=\"(\" close=\")\">",
            "#{item}",
            "</foreach>",
            "</foreach> ",
            "ON DUPLICATE KEY UPDATE ",
            "<foreach collection=\"fields\" index=\"field\"  item=\"fieldVal\" separator=\",\">",
            "${field}=VALUES(${field})",
            "</foreach>",
            "</script>"
    })
    int saveOrUpdate(Map<String,Object> map);

SQL示例

INSERT INTO `test` (`a`,`b`,`c`) VALUES
('3','1','1'),
('3','2','1'),
('3','3','1'),
ON DUPLICATE KEY UPDATE
a = VALUES(a),
b = VALUES(b),
c = VALUES(c)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值