写了两年项目总结的springboot+uniapp项目模板文档

gitee开源地址:hepingan11/springboot+uniapp

解压即用

进入application.yml配置你的信息:

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
spring:
# mysql
datasource:
url: jdbc:mysql://localhost:3306/h?useUnicode=true&serverTimezone=Asia/Shanghai&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&autoReconnect=true&allowMultiQueries=true&useSSL=true
username: root
password: 123456
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
application:
name: java
data:
# redis??
redis:
timeout: 10s
lettuce:
pool:
max-active: 200
max-wait: -1ms
max-idle: 10
min-idle: 1
database: 2
host: 127.0.0.1
port: 6379
password: ''

sa-token:
token-name: sa-token
active-timeout: -1
is-concurrent: true
is-share: false
is-log: false
token-style: uuid

# 阿里OSS
ali-oss:
endpoint: ''
accessKey: ''
secretKey: ''
bucketName: ''
domain: ''


server:
port: 9090

sa-token教程框架介绍

跨域解决类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Configuration
public class CorsConfig {
@Bean
public WebMvcConfigurer corsConfigurer() {
return new WebMvcConfigurer() {
@Override
public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**")
.allowedOrigins("http://localhost:5173") // 允许前端地址
.allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS")
.allowedHeaders("*")
.allowCredentials(true);
}
};
}
}

sa-token拦截类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
@Configuration
public class SaTokenConfigure implements WebMvcConfigurer {

//排序的拦截
String[] writeUrl = new String[]{
"/user/login",
"/user/register",
"/**"
};
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(new SaInterceptor(handler -> StpUtil.checkLogin()))
.addPathPatterns("/**")
.excludePathPatterns(writeUrl);

};


}

在writeUrl配置你的不被拦截的接口

UserUrils工具类

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public class UserUtils {


public static Long getLoginIdByToken(final String token) {
final Object loginIdObject = StpUtil.getLoginIdByToken(token);
return Long.parseLong(String.valueOf(loginIdObject));
}

//获取登录人id
public static Long getCurrentLoginId() {
return Long.parseLong(String.valueOf(StpUtil.getLoginId()));
}

}

可以使用UserUtils.getCurrentLoginId()获取接口调用人的ID,一般用于获取userId

RedisUtils工具类

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
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
@Component
@SuppressWarnings("all")
@RequiredArgsConstructor
public final class RedisUtils {

private final RedisTemplate<String, Object> redisTemplate;

public RedisTemplate getRedisTemplate() {
return this.redisTemplate;
}


public boolean expire(final String key, final long timeout) {
return expire(key, timeout, TimeUnit.SECONDS);
}

public Long getExpire(final String key) {
return redisTemplate.getExpire(key);
}


public boolean expire(final String key, final long timeout, final TimeUnit unit) {
Boolean ret = redisTemplate.expire(key, timeout, unit);
return ret != null && ret;
}

public boolean hasKey(final String key) {
return redisTemplate.hasKey(key);
}

public long increment(final String key, final long delta) {
return redisTemplate.opsForValue().increment(key, delta);
}

public boolean delKey(final String key) {
Boolean ret = redisTemplate.delete(key);
return ret != null && ret;
}


public long delKeys(final Collection<String> keys) {
Long ret = redisTemplate.delete(keys);
return ret == null ? 0 : ret;
}


public void setValue(final String key, final Object value) {
redisTemplate.opsForValue().set(key, value);
}


public void setValueTimeout(final String key, final Object value, final long timeout) {
redisTemplate.opsForValue().set(key, value, timeout, TimeUnit.SECONDS);
}


public Object getValue(final String key) {
return redisTemplate.opsForValue().get(key);
}


public boolean hasHashKey(final String key, String hkey) {
Boolean ret = redisTemplate.opsForHash().hasKey(key, hkey);
return ret != null && ret;
}


public void hashPut(final String key, final String hKey, final Object value) {
redisTemplate.opsForHash().put(key, hKey, value);
}


public void hashPutAll(final String key, final Map<String, Object> values) {
redisTemplate.opsForHash().putAll(key, values);
}


public Object hashGet(final String key, final String hKey) {
return redisTemplate.opsForHash().get(key, hKey);
}


public Map<Object, Object> hashGetAll(final String key) {
return redisTemplate.opsForHash().entries(key);
}


public List<Object> hashMultiGet(final String key, final Collection<Object> hKeys) {
return redisTemplate.opsForHash().multiGet(key, hKeys);
}

public boolean hashExists(String key, String hashKey) {
return redisTemplate.opsForHash().hasKey(key, hashKey);
}


public long hashDeleteKeys(final String key, final Collection<Object> hKeys) {
return redisTemplate.opsForHash().delete(key, hKeys);
}

public Long hashDelete(final String key, final Object... hashKey) {
return redisTemplate.opsForHash().delete(key, hashKey);
}


public long setSet(final String key, final Object... values) {
Long count = redisTemplate.opsForSet().add(key, values);
return count == null ? 0 : count;
}


public long setDel(final String key, final Object... values) {
Long count = redisTemplate.opsForSet().remove(key, values);
return count == null ? 0 : count;
}


public Set<Object> getSetAll(final String key) {
return redisTemplate.opsForSet().members(key);
}


public long zsetSetAll(final String key, final Set<ZSetOperations.TypedTuple<Object>> values) {
Long count = redisTemplate.opsForZSet().add(key, values);
return count == null ? 0 : count;
}

public Double zsetSetGetSource(final String key, final Object value) {


return redisTemplate.opsForZSet().score(key, value);
}

public Double zsetIncrementScore(final String key, final Object value, final Double increment) {
return redisTemplate.opsForZSet().incrementScore(key, value, increment);
}

public Boolean zsetSet(final String key, final Object values, final Double source) {
final Boolean add = redisTemplate.opsForZSet().add(key, values, source);
return add;
}


public Set<ZSetOperations.TypedTuple<Object>> zsetReverseRangeWithScores(final String key, final Long start, final Long end) {
return redisTemplate.opsForZSet().reverseRangeWithScores(key, start, end);
}


public Set<Object> zsetReverseRange(final String key, final Long start, final Long end) {
return redisTemplate.opsForZSet().reverseRange(key, start, end);
}


public long selfIncrease(final String key) {
return redisTemplate.execute(new SessionCallback<Long>() {
@Override
public Long execute(RedisOperations operations) throws DataAccessException {
operations.multi();
Long count = operations.opsForValue().increment(key);
operations.exec();
return count;
}
});
}

public Double selfIncreaseSource(final String key, final Object value) {
return redisTemplate.execute(new SessionCallback<Double>() {
@Override
public Double execute(RedisOperations operations) throws DataAccessException {
operations.multi();
Double count = operations.opsForZSet().incrementScore(key, value, 1);
operations.exec();
return count;
}
});
}

public long zsetDelAll(final String key, final Set<ZSetOperations.TypedTuple<Object>> values) {
Long count = redisTemplate.opsForZSet().remove(key, values);
return count == null ? 0 : count;
}

public long zsetDel(final String key, Object values) {
Long count = redisTemplate.opsForZSet().remove(key, values);
return count == null ? 0 : count;
}

public long listPush(final String key, final Object value) {
Long count = redisTemplate.opsForList().rightPush(key, value);
return count == null ? 0 : count;
}

public Boolean doesItExist(final String key) {
return redisTemplate.hasKey(key);
}

public long listPushAll(final String key, final Collection<Object> values) {
Long count = redisTemplate.opsForList().rightPushAll(key, values);
return count == null ? 0 : count;
}

public long listPushAll(final String key, final Object... values) {
Long count = redisTemplate.opsForList().rightPushAll(key, values);
return count == null ? 0 : count;
}


public List<Object> listGet(final String key, final int start, final int end) {
return redisTemplate.opsForList().range(key, start, end);
}

public Long keySize(final String key) {
return redisTemplate.opsForList().size(key);
}
}

比较常用的redisUtils.seValue(key,value)设置redis键值,getValue(key)

pom.xml还有许多可以使用的maven库,都加了注释,根据自己需求加删就行.