1、在某个字段后面追加固定的一段数据
mysql:公式:update table_name set field=CONCAT('str',field) where .....
示例:update app_contract_ info set apply_type=CONCAT('123456',apply_type) where cont_code ='HFFQ'
oracle:公式: update table_name set field=field||'str' where .....
示例:update app_contract_ info set apply_type=apply_type||'123456' where cont_code ='HFFQ'
linq使用代码示例:
IEnumerable<Tuple3<Map<String, Object>, Map<String, Object>, Map<String, Object>>> join = Linq.asEnumerable(loanList).leftJoin(
Linq.asEnumerable(payCardList),
x -> Convert.toString(x.get("loanNo")),
y -> Convert.toString(y.get("loanNo")),
Tuple::create)
.leftJoin(Linq.asEnumerable(resultList),
x -> Convert.toString(x.getItem1().get("loanNo")),
y -> Convert.toString(y.get("loanNo")),
(x, y) -> Tuple.create(x.getItem1(), x.getItem2(), y));
for(Tuple3<Map<String, Object>, Map<String, Object>, Map<String, Object>> tuple : join) {
Map<String, Object> map1=tuple .getItem1();
Map<String, Object> map2=tuple .getItem2();
Map<String, Object> map3=tuple .getItem3();
}
类型相互转换工具类:https://github.com/Pinshuducha/utils/tree/master/Convert.java
连接处理
Map<String, Object> adConfigByModelIdAndSizeType = this.getAdConfigByModelIdAndSizeType(params);
if (!HttpUtil.isSuccess(adConfigByModelIdAndSizeType)) {
return adConfigByModelIdAndSizeType;
}
Map<String, Object> body = FormatUtil.getChildMap(adConfigByModelIdAndSizeType, "body");
List<Map<String, Object>> modelList = HCMapUtils.getChildList(body, "modelList");
if (HCCollectionUtils.isEmpty(modelList)) {
return fail("99", "没有返回参数列表");
}
Map<String, Object> result = new HashMap<>(2);
// 将父级元素获取到
IEnumerable<Map<String, Object>> father = Linq.asEnumerable(modelList).where(item -> "1".equals(item.get("homeLevel")));
// 获取子级元素获取到
IEnumerable<IGrouping<String, Map<String, Object>>> child = Linq.asEnumerable(modelList)
.where(item -> "2".equals(item.get("homeLevel")))
.groupBy(x -> Convert.toString(x.get("fatherId")));
IEnumerable<Tuple2<Map<String, Object>, IGrouping<String, Map<String, Object>>>> joinResult = father.leftJoin(child,
x -> Convert.toString(x.get("id")),
y -> Convert.toString(y.getKey()),
Tuple::create);
List<Map<String, Object>> childItem = joinResult.select(entry -> {
Map<String, Object> left = entry.getItem1();
left.put("child", entry.getItem2().toList());
return left;
}).toList();
result.put("modelList", childItem);
logger.info("最终结果:" + FormatUtil.toJson(result));
return success(result);
关于数据库表结构主键的操作
可以新增单主键或联合主键;
alter table tablename add constraint pk_tablename primary key (column1,column2,...);
新增主键前要检查预建主键列是否有重复数据:
select column1 from tablenamed group by column1 having count(column1)>1;
linq 源码
https://github.com/timandy/linq
java压缩文件(一般压缩图片)
注:此方法的入参File oldFile, File newFile 都是可以new File(path)
public static void compressFile(File oldFile, File newFile, Double scale, Long maxSize, Integer widthMax, Integer heightMax) {
Assert.notNull(oldFile, "oldFile can not be null");
Assert.notNull(newFile, "oldFile can not be null");
logger.info(String.format("压缩照片==> srcPath:%s, descPath:%s", oldFile.getAbsolutePath(), newFile.getAbsolutePath()));
long startTime = System.currentTimeMillis();
Long compressDefaultSize = Convert.defaultLong(CommonProperties.get("file.compressDefaultSize"), 2 * 1024 * 1024);//2M
Double compressDefaultScale = Convert.defaultDouble(CommonProperties.get("file.compressDefaultScale"), 0.5);
maxSize = Convert.defaultLong(maxSize, compressDefaultSize);
scale = Convert.defaultDouble(scale, compressDefaultScale);
logger.info(String.format("原照片大小:%s, 压缩标准:%s 单位:byte(B)", oldFile.length(), maxSize));
widthMax = Convert.defaultInteger(widthMax, 4096);
heightMax = Convert.defaultInteger(heightMax, 4096);
Image srcFile = null;
int width;
int height;
try {
srcFile = ImageIO.read(oldFile);
width = srcFile.getWidth(null);
height = srcFile.getHeight(null);
logger.info(String.format("原照片%s, height:%s", width, height));
} catch (IOException e) {
logger.error(ThrowableUtils.getString(e));
throw new BusinessException(RestUtil.ERROR_INTERNAL_CODE, "压缩文件失败");
}
try {
int count = 0;
while (oldFile.length() > maxSize || width> widthMax || height> heightMax) {
logger.info("ompressCount = " + (++count));
int widthNew = (int) (width * scale); // 源图宽度
int heightNew = (int) (height * scale); // 源图高度
String subfix = StringUtils.getFilenameExtension(oldFile.getPath());
BufferedImage buffImg;
if (subfix.equals("png")) {
buffImg = new BufferedImage(widthNew, heightNew, BufferedImage.TYPE_INT_ARGB);
} else {
buffImg = new BufferedImage(widthNew, heightNew, BufferedImage.TYPE_INT_RGB);
}
Graphics2D graphics = buffImg.createGraphics();
graphics.setBackground(new Color(255, 255, 255));
graphics.setColor(new Color(255, 255, 255));
graphics.fillRect(0, 0, widthNew, heightNew);
graphics.drawImage(srcFile.getScaledInstance(widthNew, heightNew, Image.SCALE_SMOOTH), 0, 0, null);
graphics.dispose();
ImageIO.write(buffImg, subfix, newFile);
oldFile = newFile;
srcFile = ImageIO.read(oldFile);
width = srcFile.getWidth(null);
height = srcFile.getHeight(null);
}
} catch (Exception e) {
logger.error(ThrowableUtils.getString(e));
throw new BusinessException(RestUtil.ERROR_INTERNAL_CODE, "压缩文件失败");
}
Long timeSpan = System.currentTimeMillis() - startTime;
logger.debug(String.format("ompressTook:%sms", timeSpan));
logger.info(String.format("照片压缩后大小:%s 单位:byte(B)", newFile.length()));
logger.info(String.format("照片压缩后%s, height:%s", width, height));
return;
}
参数拼接

按照某种规则(自定义优先级)排序
public void sortLoanList(List<Map<String, Object>> list) {
Map<String, Integer> hm = new HashMap<>();
hm.put("1", 1);
hm.put("2", 2);
hm.put("3", 3);
hm.put("01", 4);
hm.put("02", 5);
hm.put("03", 6);
hm.put("04", 7);
hm.put("05", 8);
hm.put("06", 9);
hm.put("20", 10);
hm.put("22", 11);
hm.put("23", 12);
hm.put("24", 13);
hm.put("AA", 14);
hm.put("OD", 15);
hm.put("WS", 16);
hm.put("30", 17);
hm.put("31", 18);
hm.put("92", 19);
hm.put("93", 20);
if (list != null) {
list.sort((Map<String, Object> s1, Map<String, Object> s2) -> {
String outSts1 = Convert.defaultString(s1.get(ServiceConstant.OUTSTS));
String outSts2 = Convert.defaultString(s2.get(ServiceConstant.OUTSTS));
if (hm.containsKey(outSts1) && hm.containsKey(outSts2)) {
return hm.get(outSts2) - hm.get(outSts1);
} else {
return 1;
}
});
}
}
修改表下字段的长度
alter table 表名 modify (字段名 varchar2(长度 char));
遍历时删其中的元素

分段更新数据库表的字段示例
begin
declare
cursor c_update is
select rowid row_id
from 表名 where 字段名 is null;
v_counter number := 0;
begin
for one_row in c_update loop
v_counter := v_counter + 1;
update 表名 SET 字段名='01' where rowid = one_row.row_id;
if (v_counter = 50000) then
v_counter := 0;
commit;
end if;
end loop;
commit;
end;
end;
/