好用的代码示例
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("原照片width:%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("照片压缩后width:%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;
/
json转map工具类
public static Map<String, Object> json2Map(String json) {
if (json == null) {
return null;
} else {
JSONObject jo = new JSONObject(json);
Map<String, Object> map = new LinkedHashMap();
Object k;
Object v;
for(Iterator var3 = jo.keySet().iterator(); var3.hasNext(); map.put(k.toString(), v)) {
k = var3.next();
v = jo.get(k.toString());
if (v == JSONObject.NULL) {
v = "";
} else if (v instanceof JSONArray) {
v = json2List(v.toString());
}
}
return map;
}
}
public static List<Map<String, Object>> json2List(String json) {
if (json == null) {
return null;
} else {
List<Map<String, Object>> list = new ArrayList();
JSONArray ja = new JSONArray(json);
for(int i = 0; i < ja.length(); ++i) {
String subJson = ja.get(i).toString();
Map<String, Object> map = json2Map(subJson);
list.add(map);
}
return list;
}
}
public static HashMap<String, Object> json2DeepMap(String json) {
if (json == null) {
return null;
} else {
JSONObject jo = new JSONObject(json);
HashMap<String, Object> map = new HashMap();
Object k;
Object v;
for(Iterator var3 = jo.keySet().iterator(); var3.hasNext(); map.put(k.toString(), v)) {
k = var3.next();
v = jo.get(k.toString());
if (v == JSONObject.NULL) {
v = "";
} else if (v instanceof JSONArray) {
v = json2DeepList(v.toString());
} else if (v instanceof JSONObject) {
v = json2DeepMap(JSONObject.valueToString(v));
}
}
return map;
}
}
public static List<Object> json2DeepList(String json) {
if (json == null) {
return null;
} else {
List<Object> list = new ArrayList();
JSONArray ja = new JSONArray(json);
for(int i = 0; i < ja.length(); ++i) {
String subJson = ja.get(i).toString();
if (subJson.startsWith("{") && subJson.endsWith("}")) {
Map<String, Object> map = json2DeepMap(subJson);
list.add(map);
} else {
list.add(subJson);
}
}
return list;
}
}
@NotBlank(message = "商品名称必须填写")
@Slf4j
@RestControllerAdvice
public class GlobalExceptionControllerAdvice {
/**
* 全局数据教研异常处理
* @param e
* @return
*/
@ExceptionHandler(value = MethodArgumentNotValidException.class)
public Map<String, String> handleValidException(MethodArgumentNotValidException e){
BindingResult bindingResult = e.getBindingResult();
Map<String, String> errorMap = Maps.newHashMap();
bindingResult.getFieldErrors().forEach(fieldError -> errorMap.put(fieldError.getField(),fieldError.getDefaultMessage()));
return errorMap;
}
}
A-B 只比较一次即可
/**
* A-B 只比较一次即可
* @param list
* @return
*/
public static Map<String, Object> distinctMethod(List<String> list) {
Map<String, Object> result = new HashMap<>();
List<String> success = new ArrayList<>();
List<String> err = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
boolean isJump = false;
for (int j = i + 1; j < list.size(); j++) {
// 判断成功和失败的判断逻辑
if (list.get(i).equals(list.get(j))) {
isJump = true;
err.add(list.get(j));
break;
}
}
if (!isJump) {
success.add(list.get(i));
}
}
result.put("success", success);
result.put("err", err);
return result;
}
金额大写转换
import java.math.BigDecimal;
/**
* 金额大写
*/
public class CapitalAmount {
/**
* 汉字大写
*/
private static final String[] AMOUNT = {"零", "壹", "贰", "叁", "肆", "伍", "陆", "柒", "捌", "玖"};
/**
* 货币单位
*/
private static final String[] UNIT = {"分", "角", "元", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿", "拾", "佰", "仟", "兆", "拾", "佰", "仟"};
/**
* 特殊字符
*/
private static final String[] SPEC = {"整", "负"};
/**
* 精度
*/
private static final int ACCURACY = 2;
/**
* 输入的金额转换为大写
*
* @param amount 金额
* @return 大写后的金额
*/
public static String capital(BigDecimal amount) {
StringBuilder sbf = new StringBuilder();
// 返回-1,0,或1,此BigDecimal的值分类为负,零或正值。
int whole = amount.signum();
if (whole == 0) {
// 输入0时返回 零元整
return sbf.append(AMOUNT[0]).append(UNIT[2]).append(SPEC[0]).toString();
}
// 对金额进行四舍五入(向上取整)BigDecimal.ROUND_HALF_UP
long number = amount.movePointRight(ACCURACY).setScale(0, 4).abs().longValue();
// 获取金额的最后两位
long scale = number % 100;
// 解决精度损失问题(将一个long类型强转为int类型会存精度损失,导致数据不对)
long result;
// 数字下标
int numUnit;
// 单位下标
int numIndex = 0;
// 获取零
boolean getZero = false;
// 判断最后两位数: 分为四种情况: 00=0, 01=1, 10,11
if (scale <= 0) {
numIndex = 2;
number = number / 100;
getZero = true;
}
if ((scale > 0) && ((scale % 10 <= 0))) {
numIndex = 1;
number = number / 10;
getZero = true;
}
int zeroSize = 0;
while (number > 0) {
// 每次获取最后一个数
result = number % 10;
// 存在精度的损失
numUnit = (int) result;
if (numUnit > 0) {
if ((numIndex == 9) && (zeroSize >= 3)) {
// 万
sbf.insert(0, UNIT[6]);
}
if ((numIndex == 13) && (zeroSize >= 3)) {
// 亿
sbf.insert(0, UNIT[10]);
}
sbf.insert(0, UNIT[numIndex]);
sbf.insert(0, AMOUNT[numUnit]);
getZero = false;
zeroSize = 0;
} else {
++zeroSize;
if (!(getZero)) {
sbf.insert(0, AMOUNT[numUnit]);
}
if (numIndex == 2) {
sbf.insert(0, UNIT[numIndex]);
} else if (((numIndex - 2) % 4 == 0) && (number % 1000 > 0)) {
sbf.insert(0, UNIT[numIndex]);
}
getZero = true;
}
// 让number每次都去掉最后一个数
number = number / 10;
++numIndex;
}
// 如果whole == -1,则说明输入的数字为负数,就在最前面追加特殊字符:负
if (whole == -1) {
sbf.insert(0, SPEC[1]);
}
// 输入的数字小数点后两位为"00"的情况,则要在最后追加特殊字符:整
if (scale <= 0) {
sbf.append(SPEC[0]);
}
return sbf.toString();
}
}
将list集合拆分成指定长度的集合
private List<List<RsnStockReportByPageOutDto>> splitList(List<RsnStockReportByPageOutDto> list, int listSize) {
if (null == list || 0 == listSize) {
return new ArrayList<>();
}
int length = list.size();
int num = (length + listSize - 1) / listSize;
List<List<RsnStockReportByPageOutDto>> newList = new ArrayList<>(num);
for (int i = 0; i < num; i++) {
int fromIndex = i * listSize;
int toIndex = Math.min((i + 1) * listSize, length);
newList.add(list.subList(fromIndex, toIndex));
}
return newList;
}

浙公网安备 33010602011771号