MyBatis的批量操作

一、MyBatis中通过xml文件配置数据库批量操作
<!--  批量 ,传入一个长度为1000的list  -->
<insert id="insertBatch" >    
insert into student ( <include refid="Base_Column_List" /> values     
  <foreach collection="list" item="item" index="index"   
   separator=",">        
     (null,#{item.name},#{item.sex},#{item.address},
      #{item.telephone},#{item.tId})    
  </foreach>
</insert>



二、通过注解配置实现
public class UserDAOProvider {
    public String insertAll(Map map) {
        List<User> users = (List<User>) map.get("list");
        StringBuilder sb = new StringBuilder();
        sb.append("INSERT INTO User ");
        sb.append("(id, name) ");
        sb.append("VALUES ");
        MessageFormat mf = new MessageFormat("(null, #'{'list       
                                               [{0}].name})");
        for (int i = 0; i < users.size(); i++) {
            sb.append(mf.format(new Object[]{i}));
            if (i < users.size() - 1) {
                sb.append(",");
            }
        }
        return sb.toString();
    }
}

MyBatis会把List类型的参数存入一个Map中, 默认的key是"list", 可以用@Param注解自定义名称, MyBatis在调用@InsertProvide指定的方法时将此map作为参数传入;也可
自己传人参数处理。

生成的SQL语句大致为:
INSERT INTO User (id, name) VALUES (null, #{list[0].name}), (null, #{list[1].name})[,(null, #{list[i].name})]

你可能感兴趣的:(mybatis)