可爱静

记录生活、学习和工作

0%

数据库存储技巧

应用场景

  • 数据库某一字段需要存储多个同类型的值
  • 多个图片地址存入一个字段

工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Validator;
import cn.hutool.core.util.RandomUtil;
import com.baomidou.mybatisplus.core.toolkit.ArrayUtils;

import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
* 封装工具类
* @Author HiF
* @Date 2021/12/20 21:59
*/
public class ValCommonUtils {

public static final String LEFT_CURLYBRACES = "{";

public static final String RIGHT_CURLYBRACES = "}";
/**
* 被{}包围
*/
public static final String CURLYBRACES_AROUND = "\\{.+?}";

/**
* 流水号
*
* @return 支付流水号
*/
public static String tradeSn(int ran) {
return DateUtil.format(new Date(), "yyyyMMddHHmmss") + randomNumeric(ran);
}

/**
* 随机指定位数字符串(纯数字)
*
* @param length 长度
* @return String
*/
public static String randomNumeric(int length) {
if (length <= 0) {
return "";
}
return RandomUtil.randomNumbers(length);
}

public static boolean isChineseByRange(String str) {
if (null == str) {
return false;
}
char[] ch = str.toCharArray();
for (char c : ch) {
if (c < 0x4E00 || c > 0x9FBF) {
return false;
}
}
return true;
}

/**
* 集合转字符串(每个元素用{}包括)
*
* @param collection 集合
* @return 字符串
*/
public static <T> String merge(Collection<T> collection) {
if (CollectionUtil.isEmpty(collection)) {
return "";
}
StringBuilder builder = new StringBuilder();
for (T element : collection) {
if (element != null && Validator.isNotEmpty(element.toString())) {
builder.append(LEFT_CURLYBRACES).append(element)
.append(RIGHT_CURLYBRACES);
}
}
return builder.toString();
}

/**
* 字符串转List(每个元素用{}包括)
*
* @param str
* 字符串
* @return List
*/
public static List<String> split(String str) {
if (Validator.isEmpty(str)) {
return Collections.emptyList();
}

List<String> list = new ArrayList<>();
Pattern pattern = Pattern.compile(CURLYBRACES_AROUND);
Matcher matcher = pattern.matcher(str);
while (matcher.find()) {
String element = matcher.group().substring(1, matcher.group().length() - 1);
if (Validator.isNotNull(element)) {
list.add(element);
}
}
return list;
}

/**
* 生成店铺订单号
*
* @param prefix 订单号前缀
* @param sn 订单序号
* @return 订单号
*/
public static String no(String prefix, Long sn) {
StringBuilder suffix = new StringBuilder(sn + "");
// suffix补充到四位(至少四位)
while (suffix.length() < 6) {
suffix.insert(0, "0");
}
return prefix + suffix;
}

/**
* 字符串转集合(指定分隔符)
*
* @param str 字符串
* @param separator 分隔符
* @return List
*/
public static List<String> split(String str, String separator) {
if (Validator.isEmpty(str)) {
return Collections.emptyList();
}
List<String> list = new ArrayList<>();
// 没有分隔符,不进行分隔
if (Validator.isEmpty(separator)) {
list.add(str);
return list;
}
String[] array = str.split(separator);
if (ArrayUtils.isEmpty(array)) {
return Collections.emptyList();
}
for (String element : array) {
if (Validator.isNotEmpty(element)) {
list.add(element);
}
}
return list;
}

}

  • 在数据库中存储为VARCHAR类型,例如:{1}{2}{3}{4}{5};转换后为List:[1, 2, 3, 4, 5]

    注意

    存储时用“{”、“}”包裹起来,取值时就能转换为List,肥肠的方便