`

Spring jdbcTemplate批量插入

阅读更多

项目中遇到批量导入的功能,需要用批量添加。项目使用 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 批量操作

分享到:
评论

相关推荐

    Spring JdbcDaoSupport 批量插入数据

    NULL 博文链接:https://huibin.iteye.com/blog/618316

    Spring的JdbcTemplate插入操作返回主键ID的方法 - - ITeye技术网站.htm

    Spring的JdbcTemplate插入操作返回主键ID的方法 - - ITeye技术网站

    SpringJDBC批量处理数据代码示例

    参数: List&lt;Map&gt; paramMaps = new ArrayList(); for(int i = 0; i &lt; 100; i++ ){ Map paramMap = new HashMap(); paramMap.put(param1, param1);... paramMap.put(param2, param2);... paramMap.put(param5, param5

    Spring中文帮助文档

    11.4.1. 使用JdbcTemplate进行批量操作 11.4.2. 使用SimpleJdbcTemplate进行批量操作 11.5. 通过使用SimpleJdbc类简化JDBC操作 11.5.1. 使用SimpleJdbcInsert插入数据 11.5.2. 使用SimpleJdbcInsert来获取自动...

    springboot集成phoenix+hbase

    springboot集成phoenix+hbase 完整demo!!!!!!!

    Spring.3.x企业应用开发实战(完整版).part2

    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 ...

    Spring API

    11.4.1. 使用JdbcTemplate进行批量操作 11.4.2. 使用SimpleJdbcTemplate进行批量操作 11.5. 通过使用SimpleJdbc类简化JDBC操作 11.5.1. 使用SimpleJdbcInsert插入数据 11.5.2. 使用SimpleJdbcInsert来获取自动...

    Spring3.x企业应用开发实战(完整版) part1

    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 ...

    java的轻量级orm工具包jdao.zip

    在jdao底层,目前有spring的jdbcTemplate实现与我自己封装的jdaoHandlerImpl实现。jdao有支持事务,支持批量插入数据等特性。同时jdao底层数据库操作提供接口,编程人员可以自己实现。 如果你觉得hibernate,ibatis...

    JdbcTemplateTool.zip

    Spring 出品的 JdbcTemplate 对于不想使用hibernate或者ibatis那样需要大量学习成本而且还想获得对象化的人来说是很好用的。但是 JdbcTemplate还是有很多不足之处或者说是缺点。比如你没法像hibernate那样直接传一个...

Global site tag (gtag.js) - Google Analytics