项目中遇到批量导入的功能,需要用批量添加。项目使用 spring + Hibernate+Spingmvc+jdbcTemplate框架。
由于使用Hibernate批量导入费时,故采用jdbcTemplate导入。用这个导入的思路有2个,一个是使用原生sql,写插入语句,循环Values里的值。一个是用jdbcTemplate.batchUpdate(sql,BatchPreparedStatementSetter);方法。
这里只写一下第二个方法的代码:
BaseDao
/**
* 批量添加
* @param sql
*/
public abstract Long insertToBatch(String sql,BatchPreparedStatementSetter pss);
BaseDaoImpl
@Override
public Long insertToBatch(String sql, BatchPreparedStatementSetter pss) {
Long l = 0L;
logger.info("insertToBatch start");
logger.info("insertToBatch sql="+sql+"---pass="+pss);
// BatchPreparedStatementSetter pss = null;
int[] count = jdbcTemplate.batchUpdate(sql, pss);
if(count!=null){
l = Long.parseLong(String.valueOf(count.length));
}
return l;
}
serviceImpl
@Override
public Long insertBatch222(List<TContractKeeptype> list) {
final List<TContractKeeptype> temList = list;
logger.info("insertBatch 批量插入 start");
Long l1 = System.currentTimeMillis();
StringBuffer sql = new StringBuffer("INSERT INTO t_contract_keeptype (name,flag,createUserId) VALUES (?,?,?) ");
BatchPreparedStatementSetter pss = new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
TContractKeeptype ck = temList.get(i);
ps.setString(1, ck.getName());
ps.setLong(2, ck.getFlag()); (拼装数据)
ps.setLong(3, ck.getCreateUserId());
}
@Override
public int getBatchSize() {
return temList.size();
}
};
long l= tContractKeeptypeDao.insertToBatch(sql.toString(), pss);
logger.info("insertBatch 批量插入 "+sql.toString());
Long l2 = System.currentTimeMillis();
logger.info("公用时间:"+(l2-l1)/1000);
return l;
}
OK。
最后,使用Mysql数据库的,在链接数据库的时候加上这个参数 rewriteBatchedStatements=true 批量操作
相关推荐
NULL 博文链接:https://huibin.iteye.com/blog/618316
Spring的JdbcTemplate插入操作返回主键ID的方法 - - ITeye技术网站
参数: List<Map> paramMaps = new ArrayList(); for(int i = 0; i < 100; i++ ){ Map paramMap = new HashMap(); paramMap.put(param1, param1);... paramMap.put(param2, param2);... paramMap.put(param5, param5
11.4.1. 使用JdbcTemplate进行批量操作 11.4.2. 使用SimpleJdbcTemplate进行批量操作 11.5. 通过使用SimpleJdbc类简化JDBC操作 11.5.1. 使用SimpleJdbcInsert插入数据 11.5.2. 使用SimpleJdbcInsert来获取自动...
springboot集成phoenix+hbase 完整demo!!!!!!!
11.3.3 插入Lob类型的数据 11.3.4 以块数据方式读取Lob数据 11.3.5 以流数据方式读取Lob数据 11.4 自增键和行集 11.4.1 自增键的使用 11.4.2 如何规划主键方案 11.4.3 以行集返回数据 11.5 其他类型的JDBCTemplate ...
11.4.1. 使用JdbcTemplate进行批量操作 11.4.2. 使用SimpleJdbcTemplate进行批量操作 11.5. 通过使用SimpleJdbc类简化JDBC操作 11.5.1. 使用SimpleJdbcInsert插入数据 11.5.2. 使用SimpleJdbcInsert来获取自动...
11.3.3 插入Lob类型的数据 11.3.4 以块数据方式读取Lob数据 11.3.5 以流数据方式读取Lob数据 11.4 自增键和行集 11.4.1 自增键的使用 11.4.2 如何规划主键方案 11.4.3 以行集返回数据 11.5 其他类型的JDBCTemplate ...
在jdao底层,目前有spring的jdbcTemplate实现与我自己封装的jdaoHandlerImpl实现。jdao有支持事务,支持批量插入数据等特性。同时jdao底层数据库操作提供接口,编程人员可以自己实现。 如果你觉得hibernate,ibatis...
Spring 出品的 JdbcTemplate 对于不想使用hibernate或者ibatis那样需要大量学习成本而且还想获得对象化的人来说是很好用的。但是 JdbcTemplate还是有很多不足之处或者说是缺点。比如你没法像hibernate那样直接传一个...