1、自定义ResultTransformer
public class xxxxCustomResultTransformer implements ResultTransformer {
@Override
public List transformList(List collection) {
return collection;
}
@Override
public Object transformTuple(Object[] tuple, String[] aliases) {
Map<String, Object> result = new HashMap<>();
for (int i = 0; i < aliases.length; i++) {
String alias = aliases[i].toLowerCase();
Object value = tuple[i];
if(value instanceof Date){
result.put(alias, processDate(value));
}else if (value instanceof Clob) {
result.put(alias, processClob((Clob) value));
} else {
result.put(alias, value);
}
}
return result;
}
private String processDate(Object value){
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
return df.format(value);
}
private String processClob(Clob clob) {
try {
StringBuilder sb = new StringBuilder();
String line;
java.io.Reader reader = clob.getCharacterStream();
java.io.BufferedReader br = new java.io.BufferedReader(reader);
while ((line = br.readLine()) != null) {
sb.append(line);
}
br.close();
return sb.toString();
} catch (SQLException | IOException e) {
return null;
}
}
}
2、调用
EntityManager entityManager = SpringUtils.getBean(EntityManager.class);
public List<Map<String, Object>> querySql(String sql, List<Object> list) {
Query query = entityManager.createNativeQuery(sql)
.unwrap(NativeQuery.class)
.setResultTransformer(new xxxxCustomResultTransformer());
for(int i=0;i<list.size();i++){
query.setParameter(i+1, list.get(i));
}
List<Map<String, Object>> resultList = query.getResultList();
if (CollectionUtils.isEmpty(resultList)){
resultList =new ArrayList<>();
}
return resultList;
}