Spring namedparameterjdbctemplate 实现批量更新

5 篇文章 0 订阅

最近开发中使用了spring的NamedParameterJdbcTemplate的批量更行操作

方法如下

 

public void insert(Collection<Person> entities) {
    SqlParameterSource[] params =       SqlParameterSourceUtils.createBatch(entities.toArray());
    namedJdbcTemplate.batchUpdate(insertSql, params);
}

 我们业务的实际需要使用的是

public int batchUpdateBeans(String insertSql, List<? extends Object> beans) {
		int[] results = null;
		try {
			SqlParameterSource[] params = SqlParameterSourceUtils
					.createBatch(beans.toArray());
			results = this.namedParameterJdbcTemplate.batchUpdate(insertSql,
					params);
		} catch (Exception e) {
			e.printStackTrace();
			log.error(e.getMessage(), e);
		}
		return results.length;
	}

 我们只需要传对应的sql 和封装的集合对象就可以实现批量更新了

如:

public int batchAddSupplyInfo(DUserInfo userInfo, List<DSupplyInfo> supplyList) {
		logger.info(System.currentTimeMillis() + "@" + userInfo.getAccount() + "#SupplyInfo.batchAddSupplyInfo");
		StringBuffer sqlKey = new StringBuffer();
		StringBuffer sqlValue = new StringBuffer();
		sqlKey.append("insert into supply_info ( ");
		sqlValue.append(" values ( ");
		sqlKey.append("id, name, lang, industry, "
				+ "logo, style, brands, products,"
				+ " telphone, contactMan, address, status,"
				+ "createBy, createTime, updateBy, updateTime )");
		sqlValue.append("seq_supply_info.nextval, :name, :lang, :industry, "
				+ ":logo, :style, :brands, :products,"
				+ " :telphone, :contactMan, :address, :status,"
				+ ":createBy, :createTime, :updateBy, :updateTime )");
		sqlKey.append(sqlValue);
		
		return baseDao.batchUpdateBeans(sqlKey.toString(), supplyList);
		
	}

 上述代码经过测试没问题。

 

另外我们可以用namedparameterJdbcTemplate的更新方法,传入sql和map集合即可

	public int addBuyerRank(User user, DBuyer buyer) {
				StringBuffer sqlKey = new StringBuffer("INSERT INTO BUYER (");
		StringBuffer sqlValue = new StringBuffer(" Values( ");
		Map<String, Object> paramMap = new HashMap<String, Object>();
		sqlKey.append(" id, ");
		sqlKey.append(" buyerid, ");
		sqlKey.append(" rank, ");
		sqlKey.append(" createby, ");
		sqlKey.append(" updateby, ");
		sqlKey.append(" updatetime) ");
		
		sqlValue.append("seq_buyer_rank");
		sqlValue.append(" :buyerid, ");
		sqlValue.append(" :rank, ");
		sqlValue.append(" :createby, ");
		sqlKey.append(" createtime, ");
		sqlValue.append(" :createtime, ");
		sqlValue.append(" :updateby, ");
		sqlValue.append(" :updatetime)");
		
		paramMap.put("buyerid", buyerRank.getBuyerId()) ;
		paramMap.put("rank", buyerRank.getRank());
		paramMap.put("createby", buyerRank.getCreateBy());
		paramMap.put("createtime", buyerRank.getCreateTime());
		paramMap.put("updateby", buyerRank.getUpdateBy());
		paramMap.put("updatetime", buyerRank.getUpdateTime());
	
		sqlKey.append(sqlValue);
		int update = 0;
		try {
			update = baseDao.getNamedParameterJdbcTemplate().update(sqlKey.toString(), paramMap);
		} catch (DataAccessException e) {
			
		}
		
		return update;
	}

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
Spring框架中,可以使用Apache POI库实现Excel批量导入数据。以下是一些实现步骤: 1. 添加依赖:在Maven或Gradle中添加Apache POI库的依赖,例如: ``` <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> ``` 2. 创建Excel文件读取对象:使用WorkbookFactory类创建Excel文件读取对象,例如: ``` File file = new File("data.xlsx"); Workbook workbook = WorkbookFactory.create(file); Sheet sheet = workbook.getSheetAt(0); ``` 3. 遍历Excel表格数据:使用Sheet和Row类遍历Excel表格中的数据,例如: ``` for (Row row : sheet) { String name = row.getCell(0).getStringCellValue(); int age = (int) row.getCell(1).getNumericCellValue(); // ... } ``` 4. 将数据导入数据库:使用SpringJdbcTemplate类将数据导入数据库,例如: ``` jdbcTemplate.update("INSERT INTO person (name, age) VALUES (?, ?)", name, age); ``` 完整代码示例: ``` import java.io.File; import java.io.IOException; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jdbc.core.JdbcTemplate; import org.springframework.stereotype.Component; @Component public class ExcelImporter { @Autowired private JdbcTemplate jdbcTemplate; public void importData() throws IOException { File file = new File("data.xlsx"); Workbook workbook = WorkbookFactory.create(file); Sheet sheet = workbook.getSheetAt(0); for (Row row : sheet) { String name = row.getCell(0).getStringCellValue(); int age = (int) row.getCell(1).getNumericCellValue(); jdbcTemplate.update("INSERT INTO person (name, age) VALUES (?, ?)", name, age); } } } ``` 在Spring中,可以将ExcelImporter类注入到其他类中使用,例如: ``` @Autowired private ExcelImporter excelImporter; public void doImport() throws IOException { excelImporter.importData(); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值