contextutil.getbean SqlSessiontemplate
时间: 2024-01-26 09:05:19 浏览: 26
`contextutil.getbean` 是 Spring 框架中的一个工具类,用于获取 Spring 容器中的 Bean 实例。它可以根据 Bean 的名称或类型来获取 Bean 实例,返回的是 Object 类型的实例,需要进行类型转换。
`SqlSessiontemplate` 是 MyBatis 框架中的一个类,它是 MyBatis-Spring 整合模块中的一个核心类。它封装了 MyBatis 中的 SqlSession 对象,提供了一系列的方法来简化 MyBatis 的使用。SqlSessiontemplate 实现了 MyBatis 的 SqlSession 接口,可以直接在 Spring 中注入并使用,避免了手动创建和关闭 SqlSession 的繁琐操作,同时也保证了事务的一致性。
相关问题
改造这段代码,使其能下载主数据模型对应的主数据包含在下载的excel中 @Operation(summary = "下载导入主数据的excel模板", description = "") @GetMapping("/download-excel-template") public ResponseEntity<Resource> downloadExcelTemplate(@RequestParam(name = "logicModelId", required = true) Long logicModelId) throws BizBaseException { LoginUserBO loginUser = ContextUtil.getLoginUser(); OperationInfo operationInfo = OperationInfoBuilder.build(loginUser); MasterdataModelBO masterdataModelBO = masterdataModelService.getMasterdataModelById(ShardingKey.ofContext(), logicModelId); // 创建 Excel 文件 Workbook workbook = new XSSFWorkbook(); Sheet sheet = workbook.createSheet("sheet1"); // 添加字段 List<LogicalModelColumnBO> fieldInfos = masterdataModelBO.getFieldInfos(); if (fieldInfos != null && !fieldInfos.isEmpty()) { Row headerRow = sheet.createRow(0); for (int i = 0; i < fieldInfos.size(); i++) { LogicalModelColumnBO field = fieldInfos.get(i); if (ignoreField(field.getName())) continue; Cell headerCell = headerRow.createCell(i); headerCell.setCellValue(field.getCname()); } } // 写入到文件流中 ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); try { workbook.write(outputStream); } catch (IOException e) { e.printStackTrace(); } // 构造下载文件的响应头 HttpHeaders headers = new HttpHeaders(); headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=template.xlsx"); // 将字节流封装成 Resource 对象 ByteArrayResource resource = new ByteArrayResource(outputStream.toByteArray()); // 返回文件下载响应 return ResponseEntity.ok() .headers(headers) .contentType(MediaType.parseMediaType("application/vnd.ms-excel")) .contentLength(resource.contentLength()) .body(resource); }
改进的代码如下所示:
```java
@Operation(summary = "下载导入主数据的excel模板", description = "")
@GetMapping("/download-excel-template")
public ResponseEntity<Resource> downloadExcelTemplate(@RequestParam(name = "logicModelId", required = true) Long logicModelId) throws BizBaseException {
LoginUserBO loginUser = ContextUtil.getLoginUser();
OperationInfo operationInfo = OperationInfoBuilder.build(loginUser);
// 获取主数据模型信息
MasterdataModelBO masterdataModelBO = masterdataModelService.getMasterdataModelById(ShardingKey.ofContext(), logicModelId);
// 创建 Excel 文件
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet("sheet1");
// 添加字段
List<LogicalModelColumnBO> fieldInfos = masterdataModelBO.getFieldInfos();
if (fieldInfos != null && !fieldInfos.isEmpty()) {
Row headerRow = sheet.createRow(0);
for (int i = 0; i < fieldInfos.size(); i++) {
LogicalModelColumnBO field = fieldInfos.get(i);
if (ignoreField(field.getName())) continue;
Cell headerCell = headerRow.createCell(i);
headerCell.setCellValue(field.getCname());
}
}
// 添加主数据
List<MasterdataBO> masterdataList = masterdataService.getMasterdataListByModelId(ShardingKey.ofContext(), logicModelId);
if (masterdataList != null && !masterdataList.isEmpty()) {
int rowIndex = 1;
for (MasterdataBO masterdata : masterdataList) {
Row dataRow = sheet.createRow(rowIndex++);
for (int i = 0; i < fieldInfos.size(); i++) {
LogicalModelColumnBO field = fieldInfos.get(i);
if (ignoreField(field.getName())) continue;
Cell dataCell = dataRow.createCell(i);
Object value = masterdata.getAttrValue(field.getName());
if (value != null) {
if (value instanceof Date) {
dataCell.setCellValue((Date) value);
} else {
dataCell.setCellValue(value.toString());
}
}
}
}
}
// 写入到文件流中
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
try {
workbook.write(outputStream);
} catch (IOException e) {
e.printStackTrace();
}
// 构造下载文件的响应头
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=template.xlsx");
// 将字节流封装成 Resource 对象
ByteArrayResource resource = new ByteArrayResource(outputStream.toByteArray());
// 返回文件下载响应
return ResponseEntity.ok()
.headers(headers)
.contentType(MediaType.parseMediaType("application/vnd.ms-excel"))
.contentLength(resource.contentLength())
.body(resource);
}
```
修改后的代码在原有代码的基础上,增加了添加主数据的部分。首先获取主数据模型信息,然后获取该模型对应的主数据列表,按照字段信息的顺序将主数据添加到 Excel 文件中。最终返回文件下载响应。
Transactions.doTran
Transactions.doTran是一个方法,它用于手动处理事务。这个方法包含了一些操作,并且在操作成功后调用了ContextUtil.SetComplete()来标记事务已完成,如果操作失败则调用了ContextUtil.SetAbort()来标记事务已中止。这个方法返回一个字符串,如果所有操作都成功执行,则返回"方法执行成功",否则返回"两个方法至少有一个执行失败!"。
另外,还有一种自动处理事务的方法,可以在方法上加上[AutoComplete(true)]特性,然后使用Using语句来创建一个TransactionScope对象,这样就可以自动处理事务。在Using语句块中执行具体的操作,如果操作成功,则事务会自动提交;如果操作失败,则事务会自动回滚。
总的来说,Transactions.doTran是一个用于手动处理事务的方法,而使用System.Transactions命名空间中的TransactionScope类可以实现自动处理事务。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [asp.net事务机制](https://blog.csdn.net/weixin_30284355/article/details/96262580)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* [数据库的事务和锁机制(SQL Server)](https://blog.csdn.net/oathevil/article/details/5617113)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]