mybatis的批量添加的高效方法

1.批量插入保存的方法:

<insert id="addTrainRecordBatch" useGeneratedKeys="true" parameterType="java.util.List">  
        <selectKey resultType="long" keyProperty="id" order="AFTER">  
            SELECT  
            LAST_INSERT_ID()  
        </selectKey>  
        insert into regist_code (phone, code, createTime,status)  
        values  
        <foreach collection="list" item="item" index="index" separator="," >  
            (#{item.phone}, #{item.code},now(), 0)
        </foreach>  
    </insert>

数据库表结构是:

我的mode类是:

package com.hyhl.model;

import java.sql.Timestamp;

/**
 * 注冊时候验证码
 * @author hyhl_wyf
 *
 */
public class RegistCodeModel {
	
	    private int id;
	    
	    private  String phone;
	    
	    private String code;
	    
	    private int status;//状态0有效、1无效
	    
	    private Timestamp createTime;

		public int getId() {
			return id;
		}

		public void setId(int id) {
			this.id = id;
		}

		public String getPhone() {
			return phone;
		}

		public void setPhone(String phone) {
			this.phone = phone;
		}

		public String getCode() {
			return code;
		}

		public void setCode(String code) {
			this.code = code;
		}

		public int getStatus() {
			return status;
		}

		public void setStatus(int status) {
			this.status = status;
		}

		public Timestamp getCreateTime() {
			return createTime;
		}

		public void setCreateTime(Timestamp createTime) {
			this.createTime = createTime;
		}
	    
}

  

测试的controller:

    @RequestMapping(value = "/getRegistPhoneCodeBatch")
    public @ResponseBody String getBatchRegistPhoneCode(int num, HttpServletRequest request) {
        List<RegistCodeModel> list=new ArrayList<RegistCodeModel>();
        String startTi=DateTimeUtil.getFormatDateTime( new java.util.Date());
        System.out.println("开始时间:"+startTi);
        for(int i=0;i<num;i++){
            RegistCodeModel model = new RegistCodeModel();
            model.setCode(RandomUtil.getRandString(6));
            model.setPhone("18037022633");
            list.add(model);
        }
        String startTi1=DateTimeUtil.getFormatDateTime( new java.util.Date());
        System.out.println(num+"条封装完List时间:"+startTi1);
        
        registCodeMapper.addTrainRecordBatch(list);
        String startTi2=DateTimeUtil.getFormatDateTime( new java.util.Date());
        System.out.println(num+"条插入结束时间:"+startTi2);
        return "true";
    }

 测试的结果是:

-------------------10000条插入----------
开始时间:2018-04-27 17:46:08
10000条封装完List时间:2018-04-27 17:46:08
10000条插入结束时间:2018-04-27 17:46:08


------------50000条插入------------------------
开始时间:2018-04-27 17:46:33
50000条封装完List时间:2018-04-27 17:46:33
50000条插入结束时间:2018-04-27 17:46:34

------------------------------------

可以看出,插入5条也只是用了1s的时间。

比一条一条的插入快多了。

原文地址:https://www.cnblogs.com/wyf-love-dch/p/8981148.html