// 本地查询,jpa原生sql
// 1、创建会话级临时表
@Transactional
@Modifying
@Query(nativeQuery = true,value="Create global temporary table file_temp "
+ "on commit preserve rows as select * from MANAGE_FILE_UPLOAD_WQ")
public void createFileTemp();
// 2、将查询到的文书数据,放入到临时表中
@Transactional
@Modifying
@Query(nativeQuery = true,value="insert into file_temp "
+ "(select * from MANAGE_FILE_UPLOAD_WQ where MANAGE_BASE_INFO_ID =?1)")
public void insertIntoFileTemp(String manageBaseInfoId);
// 3、从临时表中取数据
@Query(nativeQuery = true,value="select * from file_temp where MANAGE_BASE_INFO_ID =?1")
public List<Object[]> findByFileTemp(String manageBaseInfoId);
// 解析List<Object[]>,一个Object[]相当于一个类,每个Object是一个字段
for(Object[] o:list) {
String id = (String) o[0]; // 主键
String baseInfoId = (String) o[1]; // 案件基础信息表主键id
String fileNum = (String) o[2]; // 文书编号
String fileType = (String) o[3]; // 文书类型
String fileName = (String) o[4]; // 文件名称
Blob fileBytes = (Blob) o[5]; // 文件内容
String remark = (String) o[6]; // 描述
LocalDateTime createTime = localDateFromTimestamp( (Timestamp)o[7]); // 创建时间
String fileUrl = (String) o[8]; // 文书路径
ManageFileUploadWq wq = new ManageFileUploadWq();
wq.setId(id);
wq.setManageBaseInformationId(baseInfoId);
wq.setFileNum(fileNum);
wq.setFileType(FileDocumentType.valueOf(fileType));
wq.setFileName(fileName);
/*try {
wq.setFileBytes(new SerialBlob(fileBytes));
} catch (SQLException e) {
}*/
wq.setRemark(remark);
wq.setCreateTime(createTime);
wq.setFileUrl(fileUrl);
fileWqs.add(wq);
}
// 无论是否是本地查询
单个字段单条记录时,返回类型最好用对应字段的类型或者Object。
单个字段多条记录时,返回类型最好用List<Object>或者List<字段对应类型>。
多个字段时,不论是多条记录还是单条记录,返回类型都应该是List<Object[]>
网友评论