-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathsearch.xml
More file actions
461 lines (238 loc) · 242 KB
/
search.xml
File metadata and controls
461 lines (238 loc) · 242 KB
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
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
<?xml version="1.0" encoding="utf-8"?>
<search>
<entry>
<title>使用Redis为注册中心的Dubbo微服务架构(基于SpringBoot)</title>
<link href="/2019/07/30/shi-yong-redis-wei-zhu-ce-zhong-xin-de-dubbo-wei-fu-wu-jia-gou-ji-yu-springboot/"/>
<url>/2019/07/30/shi-yong-redis-wei-zhu-ce-zhong-xin-de-dubbo-wei-fu-wu-jia-gou-ji-yu-springboot/</url>
<content type="html"><![CDATA[<h3 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h3><p>Dubbo作为一款高性能的RPC框架,已经在大多数一线IT企业中得到了广泛的使用,今天我们也来试一试。为了尽可能的少写代码,让程序简单明了,我们基于SpringBoot来搭建。<br>虽然Dubbo推荐使用zk作为注册中心,今天我们换换Redis试试。</p><h3 id="需求分解"><a href="#需求分解" class="headerlink" title="需求分解"></a>需求分解</h3><p>本项目只是为了讲解Dubbo与Redis的使用,所以将业务尽可能地简化,我们的消费方调用服务提供方获取一个简单的用户信息。<br>将业务进行分解:</p><ul><li>接口定义(user-common)</li><li>服务提供方(user-provider)</li><li>服务消费方(user-consumer)</li></ul><h3 id="接口项目"><a href="#接口项目" class="headerlink" title="接口项目"></a>接口项目</h3><p>原则上该项目其实只是接口定义部分就可以了,其实什么依赖都可以不需要,只是为了少写代码,这里引入了lombok,然后将该项目打包发布到maven仓库即可。<br>pom.xml</p><pre class=" language-xml"><code class="language-xml"><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>project</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://maven.apache.org/POM/4.0.0<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xsi:</span>schemaLocation</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>modelVersion</span><span class="token punctuation">></span></span>4.0.0<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>modelVersion</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>cn.miw.dubbo<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>common<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>0.0.1<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependencies</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>org.projectlombok<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>lombok<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>1.18.8<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>scope</span><span class="token punctuation">></span></span>provided<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>scope</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependencies</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>build</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>sourceDirectory</span><span class="token punctuation">></span></span>src<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>sourceDirectory</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>plugins</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>plugin</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>maven-compiler-plugin<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>3.8.0<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>configuration</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>source</span><span class="token punctuation">></span></span>1.8<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>source</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>target</span><span class="token punctuation">></span></span>1.8<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>target</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>configuration</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>plugin</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>plugins</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>build</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>project</span><span class="token punctuation">></span></span></code></pre><p>接口定义<br>UserService.java</p><pre class=" language-java"><code class="language-java"><span class="token keyword">package</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>api<span class="token punctuation">;</span><span class="token keyword">import</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>model<span class="token punctuation">.</span>User<span class="token punctuation">;</span><span class="token keyword">public</span> <span class="token keyword">interface</span> <span class="token class-name">UserService</span> <span class="token punctuation">{</span> User <span class="token function">findById</span><span class="token punctuation">(</span>Integer id<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><p>实体定义<br>User.java</p><pre class=" language-java"><code class="language-java"><span class="token keyword">package</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>model<span class="token punctuation">;</span><span class="token keyword">import</span> java<span class="token punctuation">.</span>io<span class="token punctuation">.</span>Serializable<span class="token punctuation">;</span><span class="token keyword">import</span> lombok<span class="token punctuation">.</span>Data<span class="token punctuation">;</span><span class="token keyword">import</span> lombok<span class="token punctuation">.</span>NoArgsConstructor<span class="token punctuation">;</span><span class="token annotation punctuation">@Data</span><span class="token annotation punctuation">@NoArgsConstructor</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">User</span> <span class="token keyword">implements</span> <span class="token class-name">Serializable</span><span class="token punctuation">{</span> <span class="token keyword">private</span> <span class="token keyword">static</span> <span class="token keyword">final</span> <span class="token keyword">long</span> serialVersionUID <span class="token operator">=</span> <span class="token operator">-</span>7001216319830050312L<span class="token punctuation">;</span> <span class="token keyword">private</span> Integer id<span class="token punctuation">;</span> <span class="token keyword">private</span> String name<span class="token punctuation">;</span> <span class="token keyword">private</span> <span class="token keyword">int</span> age<span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><h3 id="服务提供方项目"><a href="#服务提供方项目" class="headerlink" title="服务提供方项目"></a>服务提供方项目</h3><p>在该项目中实现具体的服务处理逻辑并完成注册中心注册的过程,该项目可以集成一些成熟的orm框架,这里为了简单演示,其实现只是简单地创建一个对象返回即可。</p><ul><li>pom.xml</li></ul><pre class=" language-xml"><code class="language-xml"><span class="token prolog"><?xml version="1.0" encoding="UTF-8"?></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>project</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://maven.apache.org/POM/4.0.0<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xsi:</span>schemaLocation</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>modelVersion</span><span class="token punctuation">></span></span>4.0.0<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>modelVersion</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>parent</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>spring-boot-starter-parent<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>2.1.1.RELEASE<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>relativePath</span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>parent</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>cn.miw.dubbo<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>user-provider<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>0.0.1<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>packaging</span><span class="token punctuation">></span></span>jar<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>packaging</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>name</span><span class="token punctuation">></span></span>demo<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>name</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>description</span><span class="token punctuation">></span></span>server<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>description</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>properties</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>java.version</span><span class="token punctuation">></span></span>1.8<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>java.version</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>properties</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependencies</span><span class="token punctuation">></span></span> <span class="token comment" spellcheck="true"><!-- 引入通用项目 --></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>cn.miw.dubbo<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>common<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>0.0.1<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> <span class="token comment" spellcheck="true"><!-- Dubbo需要的第三方包 --></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>org.apache.commons<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>commons-pool2<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> <span class="token comment" spellcheck="true"><!-- Redis 支持包 --></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>redis.clients<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>jedis<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> <span class="token comment" spellcheck="true"><!-- Dubbo starter --></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>com.alibaba.boot<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>dubbo-spring-boot-starter<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>0.2.0<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> <span class="token comment" spellcheck="true"><!-- Redis starter --></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>spring-boot-starter-data-redis<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependencies</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>build</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>plugins</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>plugin</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>spring-boot-maven-plugin<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>plugin</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>plugins</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>build</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>project</span><span class="token punctuation">></span></span></code></pre><p>这是一个SpringBoot项目,我们需要使用redis作为注册中心,所以引入了相关的starter及支持包,再加入Dubbo的starter和支持包。</p><p>先看看功能的具体简单实现,这里需要注意的是@Service注解,这是使用的dubbo中的注解,通过这个注解即实现了具体服务层在注册中心的流程过程,所以还需要@Component来加持,让其能够被Spring管理。</p><ul><li>UserServiceImpl.java</li></ul><pre class=" language-java"><code class="language-java"><span class="token keyword">package</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>server<span class="token punctuation">.</span>impl<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>slf4j<span class="token punctuation">.</span>Logger<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>slf4j<span class="token punctuation">.</span>LoggerFactory<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>stereotype<span class="token punctuation">.</span>Component<span class="token punctuation">;</span><span class="token keyword">import</span> com<span class="token punctuation">.</span>alibaba<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>config<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>Service<span class="token punctuation">;</span><span class="token keyword">import</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>api<span class="token punctuation">.</span>UserService<span class="token punctuation">;</span><span class="token keyword">import</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>model<span class="token punctuation">.</span>User<span class="token punctuation">;</span><span class="token annotation punctuation">@Service</span><span class="token punctuation">(</span>version <span class="token operator">=</span> <span class="token string">"1.0"</span><span class="token punctuation">)</span><span class="token annotation punctuation">@Component</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UserServiceImpl</span> <span class="token keyword">implements</span> <span class="token class-name">UserService</span> <span class="token punctuation">{</span> <span class="token keyword">private</span> <span class="token keyword">static</span> Logger log <span class="token operator">=</span> LoggerFactory<span class="token punctuation">.</span><span class="token function">getLogger</span><span class="token punctuation">(</span>UserServiceImpl<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token annotation punctuation">@Override</span> <span class="token keyword">public</span> User <span class="token function">findById</span><span class="token punctuation">(</span>Integer id<span class="token punctuation">)</span> <span class="token punctuation">{</span> log<span class="token punctuation">.</span><span class="token function">info</span><span class="token punctuation">(</span><span class="token string">"接收到的ID:{}"</span><span class="token punctuation">,</span>id<span class="token punctuation">)</span><span class="token punctuation">;</span> User user <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">User</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> user<span class="token punctuation">.</span><span class="token function">setAge</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token operator">+</span>id<span class="token operator">*</span><span class="token number">2</span><span class="token punctuation">)</span><span class="token punctuation">;</span> user<span class="token punctuation">.</span><span class="token function">setName</span><span class="token punctuation">(</span><span class="token string">"张三"</span><span class="token operator">+</span>id<span class="token punctuation">)</span><span class="token punctuation">;</span> user<span class="token punctuation">.</span><span class="token function">setId</span><span class="token punctuation">(</span>id<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> user<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><p>再看看启动类,也非常简单,只是增加了@EnableDubbo注解即可,由于该项目并非web项目,所以增加了一句<code>java System.in.read();</code>,让其保持运行状态。</p><ul><li>ServerApp.java</li></ul><pre class=" language-java"><code class="language-java"><span class="token keyword">package</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>server<span class="token punctuation">;</span><span class="token keyword">import</span> java<span class="token punctuation">.</span>io<span class="token punctuation">.</span>IOException<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token punctuation">.</span>SpringApplication<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token punctuation">.</span>autoconfigure<span class="token punctuation">.</span>SpringBootApplication<span class="token punctuation">;</span><span class="token keyword">import</span> com<span class="token punctuation">.</span>alibaba<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>config<span class="token punctuation">.</span>spring<span class="token punctuation">.</span>context<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>EnableDubbo<span class="token punctuation">;</span><span class="token annotation punctuation">@SpringBootApplication</span><span class="token annotation punctuation">@EnableDubbo</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ServerApp</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span>String<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token keyword">throws</span> IOException <span class="token punctuation">{</span> SpringApplication<span class="token punctuation">.</span><span class="token function">run</span><span class="token punctuation">(</span>ServerApp<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">,</span> args<span class="token punctuation">)</span><span class="token punctuation">;</span> System<span class="token punctuation">.</span>in<span class="token punctuation">.</span><span class="token function">read</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><p>再来看看配置。这里指出了注册中心redis的位置,并指明了提供服务所使用的协议为dubbo协议,服务端口为:12345</p><ul><li>application.yml</li></ul><pre class=" language-yml"><code class="language-yml">dubbo: application: id: user-provider name: user-provider qosEnable: true qosPort: 22223 registry: address: redis://root:pass@192.168.0.116:6379 protocol: name: dubbo port: 12345 spring: application: name: user-provider </code></pre><h3 id="服务调用方项目"><a href="#服务调用方项目" class="headerlink" title="服务调用方项目"></a>服务调用方项目</h3><p>这个项目的依赖仅比服务提供方多了一个web项目的依赖</p><ul><li>pom.xml</li></ul><pre class=" language-xml"><code class="language-xml"><span class="token prolog"><?xml version="1.0" encoding="UTF-8"?></span><span class="token tag"><span class="token tag"><span class="token punctuation"><</span>project</span> <span class="token attr-name">xmlns</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://maven.apache.org/POM/4.0.0<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xmlns:</span>xsi</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://www.w3.org/2001/XMLSchema-instance<span class="token punctuation">"</span></span> <span class="token attr-name"><span class="token namespace">xsi:</span>schemaLocation</span><span class="token attr-value"><span class="token punctuation">=</span><span class="token punctuation">"</span>http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd<span class="token punctuation">"</span></span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>modelVersion</span><span class="token punctuation">></span></span>4.0.0<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>modelVersion</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>parent</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>spring-boot-starter-parent<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>2.1.1.RELEASE<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>relativePath</span> <span class="token punctuation">/></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>parent</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>cn.miw.dubbo<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>consumer<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>0.0.1<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>packaging</span><span class="token punctuation">></span></span>war<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>packaging</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>name</span><span class="token punctuation">></span></span>user-consumer<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>name</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>description</span><span class="token punctuation">></span></span>consumer<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>description</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>properties</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>java.version</span><span class="token punctuation">></span></span>1.8<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>java.version</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>properties</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependencies</span><span class="token punctuation">></span></span> <span class="token comment" spellcheck="true"><!-- Dubbo及redis通用部分 开始 --></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>cn.miw.dubbo<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>common<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>0.0.1<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>org.apache.commons<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>commons-pool2<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>redis.clients<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>jedis<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>com.alibaba.boot<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>dubbo-spring-boot-starter<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>version</span><span class="token punctuation">></span></span>0.2.0<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>version</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>spring-boot-starter-data-redis<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> <span class="token comment" spellcheck="true"><!-- Dubbo及redis通用部分 结束 --></span> <span class="token comment" spellcheck="true"><!-- Web项目 --></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>spring-boot-starter-web<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependency</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>dependencies</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>build</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>plugins</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>plugin</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>groupId</span><span class="token punctuation">></span></span>org.springframework.boot<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>groupId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"><</span>artifactId</span><span class="token punctuation">></span></span>spring-boot-maven-plugin<span class="token tag"><span class="token tag"><span class="token punctuation"></</span>artifactId</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>plugin</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>plugins</span><span class="token punctuation">></span></span> <span class="token tag"><span class="token tag"><span class="token punctuation"></</span>build</span><span class="token punctuation">></span></span><span class="token tag"><span class="token tag"><span class="token punctuation"></</span>project</span><span class="token punctuation">></span></span></code></pre><p>为了尽可能简单实现我们只有一个java文件</p><ul><li>ConsumerApp.java</li></ul><pre class=" language-java"><code class="language-java"><span class="token keyword">package</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>consumer<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>slf4j<span class="token punctuation">.</span>Logger<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>slf4j<span class="token punctuation">.</span>LoggerFactory<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token punctuation">.</span>SpringApplication<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>boot<span class="token punctuation">.</span>autoconfigure<span class="token punctuation">.</span>SpringBootApplication<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>context<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>Bean<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>web<span class="token punctuation">.</span>bind<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>GetMapping<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>web<span class="token punctuation">.</span>bind<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>RestController<span class="token punctuation">;</span><span class="token keyword">import</span> com<span class="token punctuation">.</span>alibaba<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>config<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>Reference<span class="token punctuation">;</span><span class="token keyword">import</span> com<span class="token punctuation">.</span>alibaba<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>config<span class="token punctuation">.</span>spring<span class="token punctuation">.</span>context<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>EnableDubbo<span class="token punctuation">;</span><span class="token keyword">import</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>dubbo<span class="token punctuation">.</span>api<span class="token punctuation">.</span>UserService<span class="token punctuation">;</span><span class="token annotation punctuation">@SpringBootApplication</span><span class="token annotation punctuation">@EnableDubbo</span><span class="token annotation punctuation">@RestController</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ConsumerApp</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span>String<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span> SpringApplication<span class="token punctuation">.</span><span class="token function">run</span><span class="token punctuation">(</span>ConsumerApp<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">,</span> args<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token annotation punctuation">@Reference</span><span class="token punctuation">(</span>version <span class="token operator">=</span> <span class="token string">"1.0"</span><span class="token punctuation">)</span> UserService userService<span class="token punctuation">;</span> <span class="token keyword">private</span> <span class="token keyword">static</span> Logger log <span class="token operator">=</span> LoggerFactory<span class="token punctuation">.</span><span class="token function">getLogger</span><span class="token punctuation">(</span>ConsumerApp<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token annotation punctuation">@GetMapping</span><span class="token punctuation">(</span><span class="token string">"/"</span><span class="token punctuation">)</span> <span class="token keyword">public</span> Object <span class="token function">index</span><span class="token punctuation">(</span>Integer id<span class="token punctuation">)</span> <span class="token punctuation">{</span> log<span class="token punctuation">.</span><span class="token function">info</span><span class="token punctuation">(</span><span class="token string">"输入的ID:{},{}"</span><span class="token punctuation">,</span>id<span class="token punctuation">,</span><span class="token punctuation">(</span>id<span class="token operator">==</span>null<span class="token punctuation">)</span><span class="token operator">?</span><span class="token number">0</span><span class="token operator">:</span>id<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> userService<span class="token punctuation">.</span><span class="token function">findById</span><span class="token punctuation">(</span><span class="token punctuation">(</span>id<span class="token operator">==</span>null<span class="token punctuation">)</span><span class="token operator">?</span><span class="token number">0</span><span class="token operator">:</span>id<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><p>配置文件</p><ul><li>application.yml</li></ul><pre class=" language-yml"><code class="language-yml">dubbo: application: id: user-consumer name: user-consumer qosEnable: false qosPort: 22224 registry: address: redis://root:pass@192.168.0.116:6379 consumer: timeout: 3000spring: application: name: user-consumer </code></pre><h3 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h3><ul><li>由于common项目是其他两个项目都需要使用的,请先编译发布到自己的maven仓库,如果都在同一台电脑上开发,只需要install到本地仓库即可,如果是多台电脑或者小组开发请发布到自己小组的私有仓库;</li><li>在启动服务消费方前请先启动服务提供方,可以多台电脑同时运行服务提供方项目;</li><li>启动消费方 通过浏览器访问 <a href="http://localhost:8080/" target="_blank" rel="noopener">http://localhost:8080/</a> 查看结果。也可以启动多个消费方,看看在多个服务方运行的情况下分别调用的是哪一台的服务。</li></ul><h3 id="结语"><a href="#结语" class="headerlink" title="结语"></a>结语</h3><p>这样拆分后,各其实其实都很简单,具体开发中,各项目只需要处理自己相关业务代码即可,不需要考虑更多,可以让每一个项目都可以完成得更好,并且不影响其他模块的功能,让开发和部署维护都能够更方便。</p>]]></content>
<categories>
<category> 架构 </category>
</categories>
<tags>
<tag> SpringBoot </tag>
<tag> redis </tag>
<tag> Dubbo </tag>
<tag> 微服务 </tag>
<tag> RPC </tag>
</tags>
</entry>
<entry>
<title>基于SpringBoot+Redis的Session共享与单点登录</title>
<link href="/2019/07/23/ji-yu-springboot-redis-de-session-gong-xiang-yu-dan-dian-deng-lu/"/>
<url>/2019/07/23/ji-yu-springboot-redis-de-session-gong-xiang-yu-dan-dian-deng-lu/</url>
<content type="html"><![CDATA[<h2 id="基于SpringBoot-Redis的Session共享与单点登录"><a href="#基于SpringBoot-Redis的Session共享与单点登录" class="headerlink" title="基于SpringBoot+Redis的Session共享与单点登录"></a>基于SpringBoot+Redis的Session共享与单点登录</h2><h3 id="前言"><a href="#前言" class="headerlink" title="前言"></a>前言</h3><p>使用Redis来实现Session共享,其实网上已经有很多例子了,这是确保在集群部署中最典型的redis使用场景。在SpringBoot项目中,其实可以一行运行代码都不用写,只需要简单添加添加依赖和一行注解就可以实现(当然配置信息还是需要的)。<br>然后简单地把该项目部署到不同的tomcat下,比如不同的端口(A、B),但项目访问路径是相同的。此时在A中使用set方法,然后在B中使用get方法,就可以发现B中可以获取A中设置的内容。</p><p>但如果就把这样的一个项目在多个tomcat中的部署说实现了单点登录,那就不对了。</p><p>所谓单点登录是指在不同的项目中,只需要任何一个项目登录了,其他项目不需要登录。</p><p>同样是上面的例子,我们把set和get两个方法分别放到两个项目(set、get)中,并且以集群方式把两个项目都部署到服务器A和B中,然后分别访问A服务器的set和B服务器的get,你就会发现完全得不到你想要的结果。</p><h3 id="同一项目中的set-get"><a href="#同一项目中的set-get" class="headerlink" title="同一项目中的set/get"></a>同一项目中的set/get</h3><p>依赖添加就不说了,直接使用最简单的方式</p><pre class=" language-java"><code class="language-java"><span class="token annotation punctuation">@SpringBootApplication</span><span class="token annotation punctuation">@EnableRedisHttpSession</span><span class="token annotation punctuation">@RestController</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">SessionShareApplication</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span>String<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span> SpringApplication<span class="token punctuation">.</span><span class="token function">run</span><span class="token punctuation">(</span>SessionShareApplication<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">,</span> args<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token annotation punctuation">@Autowired</span> HttpSession session<span class="token punctuation">;</span> <span class="token annotation punctuation">@Autowired</span> HttpServletRequest req<span class="token punctuation">;</span> <span class="token annotation punctuation">@GetMapping</span><span class="token punctuation">(</span><span class="token string">"/set"</span><span class="token punctuation">)</span> <span class="token keyword">public</span> Object <span class="token function">set</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> session<span class="token punctuation">.</span><span class="token function">setAttribute</span><span class="token punctuation">(</span><span class="token string">"state"</span><span class="token punctuation">,</span> <span class="token string">"state was setted."</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Map<span class="token operator"><</span>String<span class="token punctuation">,</span> Object<span class="token operator">></span> map <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">TreeMap</span><span class="token operator"><</span><span class="token operator">></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> map<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"msg"</span><span class="token punctuation">,</span> session<span class="token punctuation">.</span><span class="token function">getAttribute</span><span class="token punctuation">(</span><span class="token string">"state"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> map<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"serverPort"</span><span class="token punctuation">,</span> req<span class="token punctuation">.</span><span class="token function">getLocalPort</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> map<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token annotation punctuation">@GetMapping</span><span class="token punctuation">(</span><span class="token string">"/get"</span><span class="token punctuation">)</span> <span class="token keyword">public</span> Object <span class="token function">get</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Map<span class="token operator"><</span>String<span class="token punctuation">,</span> Object<span class="token operator">></span> map <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">TreeMap</span><span class="token operator"><</span><span class="token operator">></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> map<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"msg"</span><span class="token punctuation">,</span> session<span class="token punctuation">.</span><span class="token function">getAttribute</span><span class="token punctuation">(</span><span class="token string">"state"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> map<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"serverPort"</span><span class="token punctuation">,</span> req<span class="token punctuation">.</span><span class="token function">getLocalPort</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> map<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><p>将该项目打war包,分别部署在tomcatA(端口8080),tomcatB(端口8081),然后通过tomcatA/set 方法设置session,再使用 tomcatB/get 方法即可获得session的值。但这只是实现了同一项目session的共享。并不是单点登录。</p><p>为了验证,我们不仿将set/get方法拆分为两个项目。</p><h3 id="拆分set-get为两个项目"><a href="#拆分set-get为两个项目" class="headerlink" title="拆分set/get为两个项目"></a>拆分set/get为两个项目</h3><ul><li>get项目</li></ul><pre class=" language-java"><code class="language-java"><span class="token annotation punctuation">@SpringBootApplication</span><span class="token annotation punctuation">@EnableRedisHttpSession</span><span class="token annotation punctuation">@RestController</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">SetApplication</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span>String<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span> SpringApplication<span class="token punctuation">.</span><span class="token function">run</span><span class="token punctuation">(</span>SetApplication<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">,</span> args<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token annotation punctuation">@Autowired</span> HttpSession session<span class="token punctuation">;</span> <span class="token annotation punctuation">@Autowired</span> HttpServletRequest req<span class="token punctuation">;</span> <span class="token annotation punctuation">@GetMapping</span><span class="token punctuation">(</span><span class="token string">"/"</span><span class="token punctuation">)</span> <span class="token keyword">public</span> Object <span class="token function">set</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> session<span class="token punctuation">.</span><span class="token function">setAttribute</span><span class="token punctuation">(</span><span class="token string">"state"</span><span class="token punctuation">,</span> <span class="token string">"state was setted."</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Map<span class="token operator"><</span>String<span class="token punctuation">,</span> Object<span class="token operator">></span> map <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">TreeMap</span><span class="token operator"><</span><span class="token operator">></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> map<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"msg"</span><span class="token punctuation">,</span> session<span class="token punctuation">.</span><span class="token function">getAttribute</span><span class="token punctuation">(</span><span class="token string">"state"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> map<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"serverPort"</span><span class="token punctuation">,</span> req<span class="token punctuation">.</span><span class="token function">getLocalPort</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> map<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><p>将该项目打包为set.war</p><ul><li>set项目</li></ul><pre class=" language-java"><code class="language-java"><span class="token annotation punctuation">@SpringBootApplication</span><span class="token annotation punctuation">@EnableRedisHttpSession</span><span class="token annotation punctuation">@RestController</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">GetApplication</span> <span class="token punctuation">{</span> <span class="token keyword">public</span> <span class="token keyword">static</span> <span class="token keyword">void</span> <span class="token function">main</span><span class="token punctuation">(</span>String<span class="token punctuation">[</span><span class="token punctuation">]</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span> SpringApplication<span class="token punctuation">.</span><span class="token function">run</span><span class="token punctuation">(</span>GetApplication<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">,</span> args<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token annotation punctuation">@Autowired</span> HttpSession session<span class="token punctuation">;</span> <span class="token annotation punctuation">@Autowired</span> HttpServletRequest req<span class="token punctuation">;</span> <span class="token annotation punctuation">@GetMapping</span><span class="token punctuation">(</span><span class="token string">"/"</span><span class="token punctuation">)</span> <span class="token keyword">public</span> Object <span class="token function">get</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> Map<span class="token operator"><</span>String<span class="token punctuation">,</span> Object<span class="token operator">></span> map <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">TreeMap</span><span class="token operator"><</span><span class="token operator">></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> map<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"msg"</span><span class="token punctuation">,</span> session<span class="token punctuation">.</span><span class="token function">getAttribute</span><span class="token punctuation">(</span><span class="token string">"state"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> map<span class="token punctuation">.</span><span class="token function">put</span><span class="token punctuation">(</span><span class="token string">"serverPort"</span><span class="token punctuation">,</span> req<span class="token punctuation">.</span><span class="token function">getLocalPort</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> map<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><p>将该项目打包为get.war<br>再分别将set.war,get.war部署在tomcatA和tomcatB,再通过 tomcatA/set 设置session内容, 然后通过 tomcatB/get 就发现无法获得session的值。</p><h3 id="问题分析"><a href="#问题分析" class="headerlink" title="问题分析"></a>问题分析</h3><p>尽管我们使用的路径都是一样的,但其实是两个项目,与前面的一个项目是完全不同的,问题就在于 session和cookie在默认情况下是与项目路径相关的,在同一个项目的情况下两个方法所需要的cookie依赖的项目路径是相同的,所以获取session的值就没有问题,但在后一种情况下,cookie的路径是分别属于不同的项目的,所以第二个项目就无法获得第一个项目中设置的session内容了。</p><h3 id="解决方法"><a href="#解决方法" class="headerlink" title="解决方法"></a>解决方法</h3><p>解决方法在springboot项目中其实也非常简单。既然cookie路径发生了变化,那我们让它配置为相同的路径就解决了。<br>在每个子项目中都添加一个配置类或者直接设置cookie的路径,如果有域名还可以设置域名的限制,比如 set.xxx.com 与 get.xxx.com 这种情况与我们就需要设置cookie的域名为 xxx.com,以确保无法在哪个项目下都能够获取 xxx.com 这个域名下的cookie值。这样就确保能够正常获得共享的session值了。</p><pre class=" language-java"><code class="language-java"><span class="token annotation punctuation">@Configuration</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">CookieConfig</span> <span class="token punctuation">{</span> <span class="token annotation punctuation">@Bean</span> <span class="token keyword">public</span> <span class="token keyword">static</span> DefaultCookieSerializer <span class="token function">defaultCookieSerializer</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> DefaultCookieSerializer serializer <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">DefaultCookieSerializer</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> serializer<span class="token punctuation">.</span><span class="token function">setCookiePath</span><span class="token punctuation">(</span><span class="token string">"/"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">//serializer.setDomainName("xxx.com"); //如果使用域名访问,建议对这一句进行设置 </span> <span class="token keyword">return</span> serializer<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><p>以上才是正直的redis实现单点登录的正确打开方式。</p>]]></content>
<categories>
<category> 架构 </category>
</categories>
<tags>
<tag> SpringBoot </tag>
<tag> redis </tag>
<tag> session </tag>
<tag> 单点登录 </tag>
</tags>
</entry>
<entry>
<title>Mariadb(mysql)定时任务的使用</title>
<link href="/2019/07/15/mariadb-mysql-ding-shi-ren-wu-de-shi-yong/"/>
<url>/2019/07/15/mariadb-mysql-ding-shi-ren-wu-de-shi-yong/</url>
<content type="html"><![CDATA[<h2 id="Mariadb-mysql-定时任务的使用"><a href="#Mariadb-mysql-定时任务的使用" class="headerlink" title="Mariadb(mysql)定时任务的使用"></a>Mariadb(mysql)定时任务的使用</h2><h3 id="需求描述"><a href="#需求描述" class="headerlink" title="需求描述"></a>需求描述</h3><p>随时系统数据量的增加,在原系统中本来使用的一个视图,发现越来越影响性能了,本来该视图只是临时使用的,结果一搜索代码,发现已经有很多地方使用到了,修改代码的工作量太大,并且该视图使用的数据对实时性要求并不高,于是将该视图的内容处理成表,查询速度一下就提供上去了。</p><h3 id="查看是否开启了计划事件"><a href="#查看是否开启了计划事件" class="headerlink" title="查看是否开启了计划事件"></a>查看是否开启了计划事件</h3><pre class=" language-sql"><code class="language-sql"><span class="token keyword">SHOW</span> VARIABLES <span class="token operator">LIKE</span> <span class="token string">'event_scheduler'</span><span class="token punctuation">;</span></code></pre><h3 id="临时开启与关闭"><a href="#临时开启与关闭" class="headerlink" title="临时开启与关闭"></a>临时开启与关闭</h3><p>只需要将on改为off,把1改为0即可实现关闭。</p><pre class=" language-sql"><code class="language-sql"><span class="token keyword">SET</span> <span class="token keyword">GLOBAL</span> event_scheduler <span class="token operator">=</span> <span class="token keyword">ON</span><span class="token punctuation">;</span><span class="token keyword">SET</span> @<span class="token variable">@global.event_scheduler</span> <span class="token operator">=</span> <span class="token keyword">ON</span><span class="token punctuation">;</span><span class="token keyword">SET</span> <span class="token keyword">GLOBAL</span> event_scheduler <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span><span class="token keyword">SET</span> @<span class="token variable">@global.event_scheduler</span> <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span></code></pre><h3 id="计划事件语法"><a href="#计划事件语法" class="headerlink" title="计划事件语法"></a>计划事件语法</h3><pre class=" language-sql"><code class="language-sql"><span class="token keyword">CREATE</span> <span class="token punctuation">[</span><span class="token keyword">DEFINER</span> <span class="token operator">=</span> <span class="token keyword">user</span><span class="token punctuation">]</span> EVENT <span class="token punctuation">[</span><span class="token keyword">IF</span> <span class="token operator">NOT</span> <span class="token keyword">EXISTS</span><span class="token punctuation">]</span> event_name <span class="token keyword">ON</span> SCHEDULE schedule <span class="token punctuation">[</span><span class="token keyword">ON</span> COMPLETION <span class="token punctuation">[</span><span class="token operator">NOT</span><span class="token punctuation">]</span> PRESERVE<span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token keyword">ENABLE</span> <span class="token operator">|</span> <span class="token keyword">DISABLE</span> <span class="token operator">|</span> <span class="token keyword">DISABLE</span> <span class="token keyword">ON</span> SLAVE<span class="token punctuation">]</span> <span class="token punctuation">[</span><span class="token keyword">COMMENT</span> <span class="token string">'string'</span><span class="token punctuation">]</span> <span class="token keyword">DO</span> event_body<span class="token punctuation">;</span>schedule: AT <span class="token keyword">timestamp</span> <span class="token punctuation">[</span><span class="token operator">+</span> INTERVAL interval<span class="token punctuation">]</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span> <span class="token operator">|</span> EVERY interval <span class="token punctuation">[</span>STARTS <span class="token keyword">timestamp</span> <span class="token punctuation">[</span><span class="token operator">+</span> INTERVAL interval<span class="token punctuation">]</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">]</span> <span class="token punctuation">[</span>ENDS <span class="token keyword">timestamp</span> <span class="token punctuation">[</span><span class="token operator">+</span> INTERVAL interval<span class="token punctuation">]</span> <span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">]</span>interval: quantity {YEAR <span class="token operator">|</span> QUARTER <span class="token operator">|</span> MONTH <span class="token operator">|</span> DAY <span class="token operator">|</span> HOUR <span class="token operator">|</span> MINUTE <span class="token operator">|</span> WEEK <span class="token operator">|</span> SECOND <span class="token operator">|</span> YEAR_MONTH <span class="token operator">|</span> DAY_HOUR <span class="token operator">|</span> DAY_MINUTE <span class="token operator">|</span> DAY_SECOND <span class="token operator">|</span> HOUR_MINUTE <span class="token operator">|</span> HOUR_SECOND <span class="token operator">|</span> MINUTE_SECOND}</code></pre><h3 id="使用样例"><a href="#使用样例" class="headerlink" title="使用样例"></a>使用样例</h3><p>每天临晨1点执行指定存储过程,在该存储过程中删除原数据,再从之前的视图中将数据insert到指定表中。</p><pre class=" language-sql"><code class="language-sql"><span class="token keyword">CREATE</span> EVENT <span class="token keyword">if</span> <span class="token operator">not</span> <span class="token keyword">exists</span> event_update_data<span class="token keyword">on</span> schedule EVERY <span class="token number">1</span> DAY STARTS <span class="token string">'2019-07-16 00:01:00'</span><span class="token keyword">on</span> completion preserve <span class="token keyword">ENABLE</span><span class="token keyword">do</span> <span class="token keyword">call</span> P_update_data<span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><h3 id="视图数据到表示例"><a href="#视图数据到表示例" class="headerlink" title="视图数据到表示例"></a>视图数据到表示例</h3><pre class=" language-sql"><code class="language-sql"><span class="token comment" spellcheck="true">#直接用视图生成表,这样最简单,但有一样不好,没有索引和主键等。</span><span class="token keyword">drop</span> <span class="token keyword">table</span> T1<span class="token punctuation">;</span><span class="token keyword">create</span> <span class="token keyword">table</span> T1 <span class="token keyword">select</span> <span class="token operator">*</span> <span class="token keyword">from</span> V1<span class="token punctuation">;</span><span class="token comment" spellcheck="true">#另一种,先根据视图建好表,并建立索引等,再用insert into T1 select * from V1;</span><span class="token keyword">TRUNCATE</span> T1<span class="token punctuation">;</span><span class="token keyword">insert</span> <span class="token keyword">into</span> T1 <span class="token keyword">select</span> <span class="token operator">*</span> <span class="token keyword">from</span> V1<span class="token punctuation">;</span></code></pre><h3 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h3><p>由于这里涉及到执行时间问题,所以时区一定要确定,具体时区的配置请参看上一篇</p>]]></content>
<categories>
<category> 数据库 </category>
</categories>
<tags>
<tag> Mariadb </tag>
<tag> mysql </tag>
<tag> 定时任务 </tag>
</tags>
</entry>
<entry>
<title>Mariadb(mysql)默认时区处理及docker运行配置</title>
<link href="/2019/07/15/mariadb-mysql-mo-ren-shi-qu-chu-li-ji-docker-yun-xing-pei-zhi/"/>
<url>/2019/07/15/mariadb-mysql-mo-ren-shi-qu-chu-li-ji-docker-yun-xing-pei-zhi/</url>
<content type="html"><![CDATA[<h2 id="Mariadb-mysql-默认时区处理及docker运行配置"><a href="#Mariadb-mysql-默认时区处理及docker运行配置" class="headerlink" title="Mariadb(mysql)默认时区处理及docker运行配置"></a>Mariadb(mysql)默认时区处理及docker运行配置</h2><h3 id="查看时区和当前时间"><a href="#查看时区和当前时间" class="headerlink" title="查看时区和当前时间"></a>查看时区和当前时间</h3><pre class=" language-sql"><code class="language-sql"><span class="token keyword">show</span> variables <span class="token operator">like</span> <span class="token string">"%time_zone%"</span><span class="token punctuation">;</span><span class="token keyword">select</span> <span class="token function">now</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre><h3 id="临时修改时区"><a href="#临时修改时区" class="headerlink" title="临时修改时区"></a>临时修改时区</h3><pre class=" language-sql"><code class="language-sql"><span class="token keyword">set</span> <span class="token keyword">global</span> time_zone <span class="token operator">=</span> <span class="token string">'+8:00'</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">##修改mysql全局时区为北京时间,即我们所在的东8区</span><span class="token keyword">set</span> time_zone <span class="token operator">=</span> <span class="token string">'+8:00'</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">##修改当前会话时区</span>flush <span class="token keyword">privileges</span><span class="token punctuation">;</span> <span class="token comment" spellcheck="true">#立即生效</span></code></pre><h3 id="永久生效"><a href="#永久生效" class="headerlink" title="永久生效"></a>永久生效</h3><p>在/etc/my.cnf的[mysqld]区域中加上,重启mysql使新时区生效</p><pre><code>#vim /etc/my.cnf default-time_zone = '+8:00'#systemctl restart mysql</code></pre><h3 id="在docker中运行"><a href="#在docker中运行" class="headerlink" title="在docker中运行"></a>在docker中运行</h3><p>如果mariadb(mysql)是在docker中运行,本来想用-e参数方式注入参数,却发现并不能生效,于是找到了docker的时区配置命令。<br>在宿主机上运行,进入控制台</p><pre class=" language-shell"><code class="language-shell">#进入控制台docker exec -it mariadb /bin/bash #修改默认时区,根据提示选择区域和城市#dpkg-reconfigure tzdata#需要重新启动docker restart mariadb</code></pre>]]></content>
<categories>
<category> 数据库 </category>
</categories>
<tags>
<tag> Mariadb </tag>
<tag> mysql </tag>
<tag> 时区 </tag>
<tag> docker </tag>
</tags>
</entry>
<entry>
<title>利用nginx与frp/ngrok实现内网穿透,将网站架在自己家里或者公司内部</title>
<link href="/2019/04/17/li-yong-nginx-yu-frp-ngrok-shi-xian-nei-wang-chuan-tou-jiang-wang-zhan-jia-zai-zi-ji-jia-li-huo-zhe-gong-si-nei-bu/"/>
<url>/2019/04/17/li-yong-nginx-yu-frp-ngrok-shi-xian-nei-wang-chuan-tou-jiang-wang-zhan-jia-zai-zi-ji-jia-li-huo-zhe-gong-si-nei-bu/</url>
<content type="html"><![CDATA[<h2 id="利用nginx与frp-ngrok实现内网穿透,将网站架在自己家里或者公司内部"><a href="#利用nginx与frp-ngrok实现内网穿透,将网站架在自己家里或者公司内部" class="headerlink" title="利用nginx与frp/ngrok实现内网穿透,将网站架在自己家里或者公司内部"></a>利用nginx与frp/ngrok实现内网穿透,将网站架在自己家里或者公司内部</h2><p>这个需求其实在天朝一直都是比较强烈的,对于一些小企业,或者是个人,能够把网站架在企业内部,或者家里是非常方便的一件事情,但现在国内,如果没有备案的域名往往是无法被解析到相应的服务器的,但使用https却不受影响。基于以上原因,将服务器架在自己家里或者公司内部,就不受限制了。</p><h3 id="frp还是ngrok?"><a href="#frp还是ngrok?" class="headerlink" title="frp还是ngrok?"></a>frp还是ngrok?</h3><p>就目前来看这两个工具好像是使用最为广泛的,ngrok需要自己编译,也还算比较方便,但frp你可以直接下载编译好的版本,并且linux/win的版本都已经编译好了,下载后就可以直接使用。所以这里直接以frp作为样例。</p><h3 id="为什么还要nginx"><a href="#为什么还要nginx" class="headerlink" title="为什么还要nginx?"></a>为什么还要nginx?</h3><p>内网穿透,但无论如何还是需要一台有固定IP的公网服务器。如果你购买或者租用了一台公网服务器,其实不可能只用它来做中转,应该还是会用它来架一些其他的服务,如果我们直接在上面架frp或者ngrok来监控80和443端口,感觉还是有点浪费了。所以我们前端使用nginx来管理,后面可以将请求转到相应的服务端口即可,当然frp/ngrok也就放到nginx的后面了,后面还可以有tomcat或者iis、apache等。</p><h3 id="重点还是在nginx的配置"><a href="#重点还是在nginx的配置" class="headerlink" title="重点还是在nginx的配置"></a>重点还是在nginx的配置</h3><p>在下面的配置中,我在公网服务器上同样架了tomcat,端口8080,但并没有对外开放,只能使用127.0.0.1:8080进行访问,然后架了frps,端口开放为7000,同时这个7000也是frpc连接使用。将80端口的访问转向443,然后使用nginx反向代理,将443的请求以http协议转发到frps,然后转到内网的的服务器上。由于nginx已经配置了泛域名证书支持,所以所有的子站均显示为安全网站 。</p><pre><code>upstream tomcat9 { server 127.0.0.1:8080;}upstream frps { server 127.0.0.1:7000;}server { listen 80; server_name www.easex.cn; location / { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_redirect off; proxy_pass http://tomcat9/; } }server { listen 80; server_name *.easex.cn; return 301 https://$http_host$request_uri;}server { listen 443 ssl http2; server_name *.easex.cn; ssl_certificate cert/easex.cn/fullchina.cer; ssl_certificate_key cert/easex.cn/easex.cn.key; ssl_session_timeout 5m; ssl_protocols TLSV1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_prefer_server_ciphers on; access_log logs/easex.cn_access.log; error_log logs/easex.cn_error.log; location / { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_redirect off; proxy_pass http://frps/; }}</code></pre>]]></content>
<categories>
<category> 架构 </category>
</categories>
<tags>
<tag> web </tag>
<tag> nginx </tag>
<tag> frp </tag>
<tag> ngrok </tag>
</tags>
</entry>
<entry>
<title>nginx泛域名http(80)强制跳转https(443)</title>
<link href="/2019/04/17/nginx-fan-yu-ming-http-80-qiang-zhi-tiao-zhuan-https-443/"/>
<url>/2019/04/17/nginx-fan-yu-ming-http-80-qiang-zhi-tiao-zhuan-https-443/</url>
<content type="html"><![CDATA[<h2 id="nginx泛域名http-80-强制跳转https-443"><a href="#nginx泛域名http-80-强制跳转https-443" class="headerlink" title="nginx泛域名http(80)强制跳转https(443)"></a>nginx泛域名http(80)强制跳转https(443)</h2><p>随着chrome浏览器在地址栏开始标注网站『不安全』的提示开始,各大小网站都开始从http转为https了,并且都更注重网站的安全了。然页我们之前的很多站点都是基于http开发的,如果全部改造成https,必然是很大的工作量,幸好有第三方的工具可以为我们解决这个问题,可以让原有的系统不改动的情况下,或者少改动的情况下就能够满足这个需求。nginx就是其中使用最为广泛的一个,并且它的响应最快,目前国内绝大多数平台或者系统在前端都使用的是nginx或者nginx的变种。</p><p>为每个域名(子域名)申请证书,然后配置nginx,这样就可以解决https证书问题。但为每个域名或者子域名都申请一个证书,暂起不说费用问题,申请也是比较麻烦的事,所以申请一个支持泛域名的能用证书是最方便的,所有子域名都可以使用该证书,肯定是最快捷的。</p><h3 id="泛域名证书申请"><a href="#泛域名证书申请" class="headerlink" title="泛域名证书申请"></a>泛域名证书申请</h3><p>推荐使用acme.sh来申请,下载地址和使用说明</p><pre><code>https://github.com/Neilpang/acme.sh</code></pre><p>安装很简单, 一个命令:</p><pre class=" language-shell"><code class="language-shell">curl https://get.acme.sh | sh</code></pre><p>并且acme.sh 支持大多数国内知名dns的api方式。比如dnspod,aliyun,只需要在相应的平台上申请id和key即可使用api方式使用acme.sh,非常方便,申请证书一条命令就搞定了。<br>以下命令使用dnspod的api方式申请easex.cn泛域名证书,其下的所有子域名均可以使用。</p><pre class=" language-shell"><code class="language-shell">acme.sh --issue -d easex.cn -d *.easex.cn --dns dns_dp</code></pre><p>申请到的证书默认存放在 当前用户的 <code>~/.acme.sh/easex.cn(域名)</code>目录下。你可以copy出来,或者使用 acme.sh的install-cert命令来安装到指定目录。</p><h3 id="nginx的配置"><a href="#nginx的配置" class="headerlink" title="nginx的配置"></a>nginx的配置</h3><p>nginx的安装就不说了,在centos下通常用yum 来安装,也可以自己编译。这里只说配置一事。网上虽然有很多关于http跳转https的配置,但都只针对单域名的,对泛域名都无法使用。<br>以下是本人使用着的配置,供大家参考。</p><pre class=" language-conf"><code class="language-conf">upstream tomcat9 { server 127.0.0.1:8080;}server { listen 80; server_name *.easex.cn; return 301 https://$http_host$request_uri;}server { listen 443 ssl http2; server_name *.easex.cn; ssl_certificate cert/easex.cn/fullchina.cer; ssl_certificate_key cert/easex.cn/easex.cn.key; ssl_session_timeout 5m; ssl_protocols TLSV1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_prefer_server_ciphers on; access_log logs/easex.cn_access.log; error_log logs/easex.cn_error.log; location / { proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_redirect off; proxy_pass http://tomcat9/; }}</code></pre><p>这里的server_name均指定的为 <code>*.easex.cn</code> ,重点就在于 <code>return 301 https://$http_host$request_uri;</code> 这一句。在这里不得不提一下不管是使用$host还是$server_name,都不能让浏览器正常跳转到相应的子域名,只有使用$http_host这样才可以,困绕了我两天时间。<br>通过以上配置,80端口被强制跳转到了443,但443中通过 <code>proxy_pass http://tomcat9/;</code>实际还是跳转回了http的原始端口,但对外,浏览器和用户所看到的确实是https了,并且显示的是安全网站。</p><h3 id="注意事项"><a href="#注意事项" class="headerlink" title="注意事项"></a>注意事项</h3><p>服务器应该要开放 80 443端口。</p>]]></content>
<categories>
<category> 架构 </category>
</categories>
<tags>
<tag> web </tag>
<tag> nginx </tag>
<tag> http </tag>
<tag> https </tag>
</tags>
</entry>
<entry>
<title>docker运行oracle12c注意事项</title>
<link href="/2019/03/27/docker-yun-xing-oracle12c-zhu-yi-shi-xiang/"/>
<url>/2019/03/27/docker-yun-xing-oracle12c-zhu-yi-shi-xiang/</url>
<content type="html"><![CDATA[<h2 id="docker运行oracle12c注意事项"><a href="#docker运行oracle12c注意事项" class="headerlink" title="docker运行oracle12c注意事项"></a>docker运行oracle12c注意事项</h2><p>docker的安装就不说了,这里主要说在docker中运行oracle的事情。首先oracle映像本身比较大,近2.8G,所以你的磁盘空间一定要够,再有运行时还需要大约7G的空间,所以空间要足够,再有是内存,至少需要2G。</p><h3 id="获取oracle映像"><a href="#获取oracle映像" class="headerlink" title="获取oracle映像"></a>获取oracle映像</h3><pre class=" language-shell"><code class="language-shell">docker pull registry.docker-cn.com/sath89/oracle-12c docker images</code></pre><h3 id="为启动作准备"><a href="#为启动作准备" class="headerlink" title="为启动作准备"></a>为启动作准备</h3><p>oracle映像中的空间是不够安装数据库,需要宿主机的空间,所以需要建立一个目录来放数据库文件。并且需要修改owner,否则启动可能会失败。</p><pre class=" language-shell"><code class="language-shell">mkdir /data/oraclechown -R 1001:1001 /data/oracle</code></pre><h3 id="启动映像"><a href="#启动映像" class="headerlink" title="启动映像"></a>启动映像</h3><p>第一次启动过程会比较长,所以需要监控是否启动完成,或者启动过程中是否有错。这里oracle的web管理端口被制作到8080,将宿主机的19000映射到8080,毕竟8080还需要留给TOMCAT,1521必然是需要映射出来的。</p><pre class=" language-shell"><code class="language-shell">docker run -d -p 19000:8080 -p 1521:1521 -v /data/oracle:/u01/app/oracle --name oracle12c ee3351d51185docker logs -f oracle12c</code></pre><h3 id="修改权限及密码"><a href="#修改权限及密码" class="headerlink" title="修改权限及密码"></a>修改权限及密码</h3><p>这个映像毕竟制作时间有点长,用户密码早又过期,所以需要修改。</p><pre class=" language-shell"><code class="language-shell">docker exec -it oracle12c /bin/bash </code></pre><p>登录映像后,切换到oracle用户,然后登录oracle。</p><pre class=" language-shell"><code class="language-shell">su oracle$ORACLE_HOME/bin/sqlplus / as sysdbaSQL>ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;SQL>alter user SYSTEM account unlock;SQL>alter user system identified by system;</code></pre><h3 id="其他电脑访问oracle"><a href="#其他电脑访问oracle" class="headerlink" title="其他电脑访问oracle"></a>其他电脑访问oracle</h3><p>如果你的系统防火墙开着,那需要将19000和1521开放。回到宿主机,执行防火墙命令。<br>oracle-12c 数据库sid: xe, 如果你没有修改密码,system默认密码为oracle。</p><pre class=" language-shell"><code class="language-shell">firewall-cmd --permanent --zone=public --add-port=19000/tcpfirewall-cmd --permanent --zone=public --add-port=1521/tcpfirewall-cmd --reload</code></pre><p>搞定了。</p>]]></content>
<categories>
<category> 数据库 </category>
</categories>
<tags>
<tag> docker </tag>
<tag> 数据库 </tag>
<tag> oracle </tag>
</tags>
</entry>
<entry>
<title>利用mysql(Mariadb)系统信息生成数据字典</title>
<link href="/2018/12/24/li-yong-mysql-mariadb-xi-tong-xin-xi-sheng-cheng-shu-ju-zi-dian/"/>
<url>/2018/12/24/li-yong-mysql-mariadb-xi-tong-xin-xi-sheng-cheng-shu-ju-zi-dian/</url>
<content type="html"><![CDATA[<h2 id="利用mysql-Mariadb-系统信息生成数据字典"><a href="#利用mysql-Mariadb-系统信息生成数据字典" class="headerlink" title="利用mysql(Mariadb)系统信息生成数据字典"></a>利用mysql(Mariadb)系统信息生成数据字典</h2><p>现在很多新手在做设计时并不是从正规流程来的, 可能是先完成了表的设计, 甚至是系统都开发完成了, 还没有数据库的相关文档, 那我们其实可以再反过来利用数据库的基础信息反向生成数据库字典文档, 可以使用以下语句, 得到你想的结果, 再导出到excel, 稍做排版即可满足了.</p><pre class=" language-sql"><code class="language-sql"><span class="token keyword">USE</span> information_schema<span class="token punctuation">;</span><span class="token keyword">select</span> <span class="token number">c</span><span class="token punctuation">.</span>TABLE_NAME <span class="token string">'表名'</span><span class="token punctuation">,</span> <span class="token number">c</span><span class="token punctuation">.</span>COLUMN_NAME <span class="token string">'字段名'</span><span class="token punctuation">,</span> <span class="token number">c</span><span class="token punctuation">.</span>COLUMN_TYPE <span class="token string">'字段类型'</span><span class="token punctuation">,</span> <span class="token number">c</span><span class="token punctuation">.</span>IS_NULLABLE <span class="token string">'允许为空'</span><span class="token punctuation">,</span> <span class="token number">c</span><span class="token punctuation">.</span>EXTRA <span class="token string">'PK'</span><span class="token punctuation">,</span> <span class="token number">c</span><span class="token punctuation">.</span>COLUMN_COMMENT <span class="token string">'字段说明'</span><span class="token keyword">from</span> <span class="token punctuation">`</span><span class="token keyword">COLUMNS</span><span class="token punctuation">`</span> <span class="token number">c</span><span class="token punctuation">,</span> <span class="token punctuation">`</span><span class="token keyword">TABLES</span><span class="token punctuation">`</span> t <span class="token keyword">where</span> <span class="token number">1</span><span class="token operator">=</span><span class="token number">1</span> <span class="token operator">and</span> <span class="token number">c</span><span class="token punctuation">.</span>TABLE_SCHEMA <span class="token operator">=</span> t<span class="token punctuation">.</span>TABLE_SCHEMA <span class="token operator">and</span> <span class="token number">c</span><span class="token punctuation">.</span>TABLE_NAME <span class="token operator">=</span> t<span class="token punctuation">.</span>TABLE_NAME <span class="token operator">and</span> t<span class="token punctuation">.</span>TABLE_SCHEMA<span class="token operator">=</span><span class="token string">'数据库名'</span><span class="token punctuation">;</span></code></pre>]]></content>
<categories>
<category> 数据库 </category>
</categories>
<tags>
<tag> Mariadb </tag>
<tag> mysql </tag>
<tag> 数据字典 </tag>
</tags>
</entry>
<entry>
<title>SpringBoot集成Jfinal Enjoy模板引擎热加载问题的解决</title>
<link href="/2018/11/14/springboot-ji-cheng-jfinal-enjoy-mo-ban-yin-qing-re-jia-zai-wen-ti-de-jie-jue/"/>
<url>/2018/11/14/springboot-ji-cheng-jfinal-enjoy-mo-ban-yin-qing-re-jia-zai-wen-ti-de-jie-jue/</url>
<content type="html"><![CDATA[<h2 id="SpringBoot集成Jfinal-Enjoy模板引擎热加载问题的解决"><a href="#SpringBoot集成Jfinal-Enjoy模板引擎热加载问题的解决" class="headerlink" title="SpringBoot集成Jfinal Enjoy模板引擎热加载问题的解决"></a>SpringBoot集成Jfinal Enjoy模板引擎热加载问题的解决</h2><p>Jfinal Enjoy模板引擎通过一段时间的使用, 感觉比freeMarker更方便, 与Jfinal的配置更是天衣无缝, 同时也可以在 SpringBoot中集成, 但在集成使用过程中还是有一些问题需要注意, 在这里列出, 以方便大家查阅. </p><h3 id="获取ContextPath的问题"><a href="#获取ContextPath的问题" class="headerlink" title="获取ContextPath的问题"></a>获取ContextPath的问题</h3><p>在任何一个网站系统中, 作为前台页面, 除非是写死的, 其实我们都需要知道Application运行的是什么目录, 否则引用路径就不正确了, 所以在我经手的项目中前面页面都会有一个root变量, 不管是js/css, 都需要, 在向服务器请求的方法中更是需要.<br>创建一个Enjoy配置类, 实现ApplicationListener<contextrefreshedevent>, 使用getEngine().addSharedObject(“root”, getServletContext().getContextPath());即可, 但在热加载的过程中会提示该对象已存在,并抛出一个异常, 导致Application无法正常运行下去, 其实那就给它加一个try来解决.</contextrefreshedevent></p><pre class=" language-java"><code class="language-java"><span class="token keyword">package</span> com<span class="token punctuation">.</span>ynca<span class="token punctuation">.</span>conf<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>context<span class="token punctuation">.</span>ApplicationListener<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>context<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>Bean<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>context<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>Configuration<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>context<span class="token punctuation">.</span>event<span class="token punctuation">.</span>ContextRefreshedEvent<span class="token punctuation">;</span><span class="token keyword">import</span> com<span class="token punctuation">.</span>jfinal<span class="token punctuation">.</span>template<span class="token punctuation">.</span>ext<span class="token punctuation">.</span>spring<span class="token punctuation">.</span>JFinalViewResolver<span class="token punctuation">;</span><span class="token keyword">import</span> com<span class="token punctuation">.</span>jfinal<span class="token punctuation">.</span>template<span class="token punctuation">.</span>source<span class="token punctuation">.</span>ClassPathSourceFactory<span class="token punctuation">;</span><span class="token comment" spellcheck="true">/** * Jfinal Enjoy模板支持 * @ClassName: EnjoyConf * @author mrzhou@miw.cn<br> * www.miw.cn<br> * Nov 13, 2018 12:55:01 PM<br> */</span><span class="token annotation punctuation">@Configuration</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">EnjoyConf</span> <span class="token punctuation">{</span> <span class="token annotation punctuation">@Bean</span><span class="token punctuation">(</span>name <span class="token operator">=</span> <span class="token string">"jfinalViewResolver"</span><span class="token punctuation">)</span> <span class="token keyword">public</span> ViewResolver <span class="token function">getJFinalViewResolver</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> ViewResolver viewResolver <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ViewResolver</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> viewResolver<span class="token punctuation">.</span><span class="token function">setDevMode</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> viewResolver<span class="token punctuation">.</span><span class="token function">setSourceFactory</span><span class="token punctuation">(</span><span class="token keyword">new</span> <span class="token class-name">ClassPathSourceFactory</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> JFinalViewResolver<span class="token punctuation">.</span>engine<span class="token punctuation">.</span><span class="token function">setBaseTemplatePath</span><span class="token punctuation">(</span><span class="token string">"/templates/"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> viewResolver<span class="token punctuation">.</span><span class="token function">setSuffix</span><span class="token punctuation">(</span><span class="token string">".html"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> viewResolver<span class="token punctuation">.</span><span class="token function">setContentType</span><span class="token punctuation">(</span><span class="token string">"text/html;charset=UTF-8"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> viewResolver<span class="token punctuation">.</span><span class="token function">setOrder</span><span class="token punctuation">(</span><span class="token number">0</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> viewResolver<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">ViewResolver</span> <span class="token keyword">extends</span> <span class="token class-name">JFinalViewResolver</span> <span class="token keyword">implements</span> <span class="token class-name">ApplicationListener</span><span class="token operator"><</span>ContextRefreshedEvent<span class="token operator">></span> <span class="token punctuation">{</span> <span class="token annotation punctuation">@Override</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">onApplicationEvent</span><span class="token punctuation">(</span>ContextRefreshedEvent event<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">try</span> <span class="token punctuation">{</span> <span class="token function">getEngine</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">addSharedObject</span><span class="token punctuation">(</span><span class="token string">"root"</span><span class="token punctuation">,</span> <span class="token function">getServletContext</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getContextPath</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Exception</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><h3 id="关于devTools热加载问题"><a href="#关于devTools热加载问题" class="headerlink" title="关于devTools热加载问题"></a>关于devTools热加载问题</h3><p>再一个修改了代码或者页面后, devtools会进行热载, 重新刷新页面, 结果又出错了, object is not an instance of declaring class. 原因是 模板引擎没有被重新热加载, 这是devtools的加载机制引起的, 解决方法: 在src/main/resources目录下面创建META-INF文件夹,然后创建spring-devtools.properties文件,文件里面的内容如下即可:</p><pre class=" language-text"><code class="language-text">restart.include.thirdparty=/enjoy-3.4.jar</code></pre>]]></content>
<categories>
<category> 软件设计 </category>
<category> JAVA </category>
</categories>
<tags>
<tag> SpringBoot </tag>
<tag> Jfinal </tag>
<tag> Enjoy模板引擎 </tag>
</tags>
</entry>
<entry>
<title>SpringBoot+JdbcTemplate通用Mapper的实现</title>
<link href="/2018/10/25/springboot-jdbctemplate-tong-yong-mapper-de-shi-xian/"/>
<url>/2018/10/25/springboot-jdbctemplate-tong-yong-mapper-de-shi-xian/</url>
<content type="html"><![CDATA[<h2 id="SpringBoot-JdbcTemplate通用Mapper的实现"><a href="#SpringBoot-JdbcTemplate通用Mapper的实现" class="headerlink" title="SpringBoot+JdbcTemplate通用Mapper的实现"></a>SpringBoot+JdbcTemplate通用Mapper的实现</h2><p>就我个人而言, 使用某个框架, 还是建议尽是只使用框架原生提供的方法来完成相关的操作, 这样从各方面来说应该都是性能最优的. 代码也应该是最好阅读和理解的. 这里还用上一篇中的model来说明. 各位也可以对两篇进行一下对比, 看看哪一种更适合你.</p><h3 id="通用Mapper"><a href="#通用Mapper" class="headerlink" title="通用Mapper"></a>通用Mapper</h3><pre class=" language-java"><code class="language-java"><span class="token keyword">package</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>jdbc<span class="token punctuation">.</span>common<span class="token punctuation">;</span><span class="token keyword">import</span> java<span class="token punctuation">.</span>lang<span class="token punctuation">.</span>reflect<span class="token punctuation">.</span>Field<span class="token punctuation">;</span><span class="token keyword">import</span> java<span class="token punctuation">.</span>lang<span class="token punctuation">.</span>reflect<span class="token punctuation">.</span>ParameterizedType<span class="token punctuation">;</span><span class="token keyword">import</span> java<span class="token punctuation">.</span>sql<span class="token punctuation">.</span>ResultSet<span class="token punctuation">;</span><span class="token keyword">import</span> java<span class="token punctuation">.</span>sql<span class="token punctuation">.</span>SQLException<span class="token punctuation">;</span><span class="token keyword">import</span> java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>ArrayList<span class="token punctuation">;</span><span class="token keyword">import</span> java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>List<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>beans<span class="token punctuation">.</span>factory<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>Autowired<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>jdbc<span class="token punctuation">.</span>core<span class="token punctuation">.</span>JdbcTemplate<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>jdbc<span class="token punctuation">.</span>core<span class="token punctuation">.</span>RowMapper<span class="token punctuation">;</span><span class="token comment" spellcheck="true">/** * 基于JdbcTemplate的通用Mapper * @author mrzhou<br> * @link http://www.miw.cn<br> * @email mrzhou@miw.cn<br> * 2018年10月6日下午5:24:32<br> * @param <T> */</span><span class="token keyword">public</span> <span class="token keyword">abstract</span> <span class="token keyword">class</span> <span class="token class-name">GernalRowMapper</span><span class="token operator"><</span>T <span class="token keyword">extends</span> <span class="token class-name">BaseEntity</span><span class="token operator">></span> <span class="token keyword">implements</span> <span class="token class-name">RowMapper</span><span class="token operator"><</span>T<span class="token operator">></span> <span class="token punctuation">{</span> <span class="token annotation punctuation">@Autowired</span> <span class="token keyword">protected</span> JdbcTemplate jdbcTemplate<span class="token punctuation">;</span> <span class="token annotation punctuation">@SuppressWarnings</span><span class="token punctuation">(</span><span class="token string">"unchecked"</span><span class="token punctuation">)</span> <span class="token annotation punctuation">@Override</span> <span class="token keyword">public</span> T <span class="token function">mapRow</span><span class="token punctuation">(</span>ResultSet rs<span class="token punctuation">,</span> <span class="token keyword">int</span> rowNum<span class="token punctuation">)</span> <span class="token keyword">throws</span> SQLException <span class="token punctuation">{</span> Object instance <span class="token operator">=</span> null<span class="token punctuation">;</span> Class<span class="token operator"><</span><span class="token operator">?</span><span class="token operator">></span> clz <span class="token operator">=</span> <span class="token function">getTrueClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">try</span> <span class="token punctuation">{</span> instance <span class="token operator">=</span> clz<span class="token punctuation">.</span><span class="token function">newInstance</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Field<span class="token punctuation">[</span><span class="token punctuation">]</span> fields <span class="token operator">=</span> clz<span class="token punctuation">.</span><span class="token function">getDeclaredFields</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>Field field <span class="token operator">:</span> fields<span class="token punctuation">)</span> <span class="token punctuation">{</span> field<span class="token punctuation">.</span><span class="token function">setAccessible</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> field<span class="token punctuation">.</span><span class="token function">set</span><span class="token punctuation">(</span>instance<span class="token punctuation">,</span> rs<span class="token punctuation">.</span><span class="token function">getObject</span><span class="token punctuation">(</span>field<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">InstantiationException</span> <span class="token operator">|</span> IllegalAccessException e<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token keyword">return</span> <span class="token punctuation">(</span>T<span class="token punctuation">)</span> instance<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">private</span> Class<span class="token operator"><</span>T<span class="token operator">></span> <span class="token function">getTrueClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> ParameterizedType type <span class="token operator">=</span> <span class="token punctuation">(</span>ParameterizedType<span class="token punctuation">)</span> <span class="token keyword">this</span><span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getGenericSuperclass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token annotation punctuation">@SuppressWarnings</span><span class="token punctuation">(</span><span class="token string">"unchecked"</span><span class="token punctuation">)</span> Class<span class="token operator"><</span>T<span class="token operator">></span> clazz <span class="token operator">=</span> <span class="token punctuation">(</span>Class<span class="token operator"><</span>T<span class="token operator">></span><span class="token punctuation">)</span> type<span class="token punctuation">.</span><span class="token function">getActualTypeArguments</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">]</span><span class="token punctuation">;</span> <span class="token keyword">return</span> clazz<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> List<span class="token operator"><</span>T<span class="token operator">></span> <span class="token function">list</span><span class="token punctuation">(</span>String sql<span class="token punctuation">,</span> Object<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> jdbcTemplate<span class="token punctuation">.</span><span class="token function">query</span><span class="token punctuation">(</span>sql<span class="token punctuation">,</span> <span class="token keyword">this</span><span class="token punctuation">,</span> args<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> T <span class="token function">find</span><span class="token punctuation">(</span>String sql<span class="token punctuation">,</span> Object<span class="token punctuation">.</span><span class="token punctuation">.</span><span class="token punctuation">.</span> args<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> jdbcTemplate<span class="token punctuation">.</span><span class="token function">queryForObject</span><span class="token punctuation">(</span>sql<span class="token punctuation">,</span> <span class="token keyword">this</span><span class="token punctuation">,</span> args<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">save</span><span class="token punctuation">(</span>T object<span class="token punctuation">)</span> <span class="token punctuation">{</span> String sql <span class="token operator">=</span> <span class="token string">"insert into "</span> <span class="token operator">+</span> object<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getSimpleName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Field<span class="token punctuation">[</span><span class="token punctuation">]</span> fields <span class="token operator">=</span> object<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getDeclaredFields</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> List<span class="token operator"><</span>String<span class="token operator">></span> f <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ArrayList</span><span class="token operator"><</span>String<span class="token operator">></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> List<span class="token operator"><</span>String<span class="token operator">></span> v <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ArrayList</span><span class="token operator"><</span>String<span class="token operator">></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>Field field <span class="token operator">:</span> fields<span class="token punctuation">)</span> <span class="token punctuation">{</span> field<span class="token punctuation">.</span><span class="token function">setAccessible</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">try</span> <span class="token punctuation">{</span> Object value <span class="token operator">=</span> field<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>object<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>value <span class="token operator">!=</span> null<span class="token punctuation">)</span> <span class="token punctuation">{</span> f<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>field<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> v<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span><span class="token string">"'"</span> <span class="token operator">+</span> value<span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">"'"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IllegalArgumentException</span> <span class="token operator">|</span> IllegalAccessException e<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> sql <span class="token operator">+=</span> <span class="token string">"("</span> <span class="token operator">+</span> StringUtils<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span>f<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">") values("</span> <span class="token operator">+</span> StringUtils<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span>v<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">")"</span><span class="token punctuation">;</span> jdbcTemplate<span class="token punctuation">.</span><span class="token function">execute</span><span class="token punctuation">(</span>sql<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">del</span><span class="token punctuation">(</span>T object<span class="token punctuation">)</span> <span class="token punctuation">{</span> String sql <span class="token operator">=</span> <span class="token string">"delete from "</span> <span class="token operator">+</span> object<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getSimpleName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">" where 1=1"</span><span class="token punctuation">;</span> Field<span class="token punctuation">[</span><span class="token punctuation">]</span> fields <span class="token operator">=</span> object<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getDeclaredFields</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>Field field <span class="token operator">:</span> fields<span class="token punctuation">)</span> <span class="token punctuation">{</span> field<span class="token punctuation">.</span><span class="token function">setAccessible</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">try</span> <span class="token punctuation">{</span> Object value <span class="token operator">=</span> field<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>object<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>value <span class="token operator">!=</span> null<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>value <span class="token keyword">instanceof</span> <span class="token class-name">String</span> <span class="token operator">&&</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>String<span class="token punctuation">)</span> value<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">contains</span><span class="token punctuation">(</span><span class="token string">"%"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> sql <span class="token operator">+=</span> <span class="token string">" and "</span> <span class="token operator">+</span> field<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">" like '"</span> <span class="token operator">+</span> value<span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">"'"</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> sql <span class="token operator">+=</span> <span class="token string">" and "</span> <span class="token operator">+</span> field<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">" = '"</span> <span class="token operator">+</span> value<span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">"'"</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IllegalArgumentException</span> <span class="token operator">|</span> IllegalAccessException e<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> jdbcTemplate<span class="token punctuation">.</span><span class="token function">execute</span><span class="token punctuation">(</span>sql<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">int</span> <span class="token function">update</span><span class="token punctuation">(</span>T object<span class="token punctuation">)</span> <span class="token punctuation">{</span> String sql <span class="token operator">=</span> <span class="token string">"update "</span> <span class="token operator">+</span> object<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getSimpleName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> String id <span class="token operator">=</span> <span class="token string">""</span><span class="token punctuation">;</span> List<span class="token operator"><</span>String<span class="token operator">></span> list <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">ArrayList</span><span class="token operator"><</span><span class="token operator">></span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Field<span class="token punctuation">[</span><span class="token punctuation">]</span> fields <span class="token operator">=</span> object<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getDeclaredFields</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>Field field <span class="token operator">:</span> fields<span class="token punctuation">)</span> <span class="token punctuation">{</span> field<span class="token punctuation">.</span><span class="token function">setAccessible</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">try</span> <span class="token punctuation">{</span> Object value <span class="token operator">=</span> field<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>object<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token string">"id"</span><span class="token punctuation">.</span><span class="token function">equals</span><span class="token punctuation">(</span>field<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> id <span class="token operator">=</span> value<span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> list<span class="token punctuation">.</span><span class="token function">add</span><span class="token punctuation">(</span>field<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">" = "</span> <span class="token operator">+</span> <span class="token punctuation">(</span>value <span class="token operator">==</span> null <span class="token operator">?</span> <span class="token string">"NULL"</span> <span class="token operator">:</span> <span class="token string">"'"</span> <span class="token operator">+</span> value<span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">"'"</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IllegalArgumentException</span> <span class="token operator">|</span> IllegalAccessException e<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> sql <span class="token operator">+=</span> <span class="token string">" set "</span> <span class="token operator">+</span> StringUtils<span class="token punctuation">.</span><span class="token function">join</span><span class="token punctuation">(</span>list<span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">" where id="</span> <span class="token operator">+</span> id<span class="token punctuation">;</span> <span class="token keyword">return</span> jdbcTemplate<span class="token punctuation">.</span><span class="token function">update</span><span class="token punctuation">(</span>sql<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> List<span class="token operator"><</span>T<span class="token operator">></span> <span class="token function">page</span><span class="token punctuation">(</span>T object<span class="token punctuation">)</span> <span class="token punctuation">{</span> String sql <span class="token operator">=</span> <span class="token string">"select * from "</span> <span class="token operator">+</span> object<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getSimpleName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">" where 1=1"</span><span class="token punctuation">;</span> Field<span class="token punctuation">[</span><span class="token punctuation">]</span> fields <span class="token operator">=</span> object<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getDeclaredFields</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>Field field <span class="token operator">:</span> fields<span class="token punctuation">)</span> <span class="token punctuation">{</span> field<span class="token punctuation">.</span><span class="token function">setAccessible</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">try</span> <span class="token punctuation">{</span> Object value <span class="token operator">=</span> field<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>object<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>value <span class="token operator">!=</span> null<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>value <span class="token keyword">instanceof</span> <span class="token class-name">String</span> <span class="token operator">&&</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>String<span class="token punctuation">)</span> value<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">contains</span><span class="token punctuation">(</span><span class="token string">"%"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> sql <span class="token operator">+=</span> <span class="token string">" and "</span> <span class="token operator">+</span> field<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">" like '"</span> <span class="token operator">+</span> value<span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">"'"</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> sql <span class="token operator">+=</span> <span class="token string">" and "</span> <span class="token operator">+</span> field<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">" = '"</span> <span class="token operator">+</span> value<span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">"'"</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">IllegalArgumentException</span> <span class="token operator">|</span> IllegalAccessException e<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> sql <span class="token operator">+=</span> <span class="token string">" limit "</span> <span class="token operator">+</span> object<span class="token punctuation">.</span><span class="token function">getStart</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token operator">+</span> <span class="token string">","</span> <span class="token operator">+</span> object<span class="token punctuation">.</span><span class="token function">getPageSize</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> jdbcTemplate<span class="token punctuation">.</span><span class="token function">query</span><span class="token punctuation">(</span>sql<span class="token punctuation">,</span> <span class="token keyword">this</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><h3 id="针对User的jdbcMapper"><a href="#针对User的jdbcMapper" class="headerlink" title="针对User的jdbcMapper"></a>针对User的jdbcMapper</h3><pre class=" language-java"><code class="language-java"><span class="token keyword">package</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>jdbc<span class="token punctuation">.</span>mapper<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>stereotype<span class="token punctuation">.</span>Repository<span class="token punctuation">;</span><span class="token keyword">import</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>jdbc<span class="token punctuation">.</span>common<span class="token punctuation">.</span>GernalRowMapper<span class="token punctuation">;</span><span class="token keyword">import</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>jdbc<span class="token punctuation">.</span>model<span class="token punctuation">.</span>User<span class="token punctuation">;</span><span class="token annotation punctuation">@Repository</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UserMapper</span> <span class="token keyword">extends</span> <span class="token class-name">GernalRowMapper</span><span class="token operator"><</span>User<span class="token operator">></span><span class="token punctuation">{</span><span class="token punctuation">}</span></code></pre><p>就这样简单, 其实什么也不用写了</p><h3 id="针对-User的Service"><a href="#针对-User的Service" class="headerlink" title="针对 User的Service"></a>针对 User的Service</h3><pre class=" language-java"><code class="language-java"><span class="token keyword">package</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>jdbc<span class="token punctuation">.</span>service<span class="token punctuation">;</span><span class="token keyword">import</span> java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>List<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>beans<span class="token punctuation">.</span>factory<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>Autowired<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>stereotype<span class="token punctuation">.</span>Service<span class="token punctuation">;</span><span class="token keyword">import</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>jdbc<span class="token punctuation">.</span>mapper<span class="token punctuation">.</span>UserMapper<span class="token punctuation">;</span><span class="token keyword">import</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>jdbc<span class="token punctuation">.</span>model<span class="token punctuation">.</span>User<span class="token punctuation">;</span><span class="token annotation punctuation">@Service</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">UserService</span> <span class="token punctuation">{</span> <span class="token annotation punctuation">@Autowired</span> <span class="token keyword">private</span> UserMapper mapper<span class="token punctuation">;</span> <span class="token keyword">public</span> List<span class="token operator"><</span>User<span class="token operator">></span> <span class="token function">list</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">{</span> String sql <span class="token operator">=</span> <span class="token string">"select * from User where name like ? "</span><span class="token punctuation">;</span> List<span class="token operator"><</span>User<span class="token operator">></span> list <span class="token operator">=</span> mapper<span class="token punctuation">.</span><span class="token function">list</span><span class="token punctuation">(</span>sql<span class="token punctuation">,</span><span class="token string">"%"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> list<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment" spellcheck="true">/** * 没使用通用Mapper的情况下我们只能拼接sql来完成分页操作 * @param page * @param pageSize * @return */</span> <span class="token keyword">public</span> List<span class="token operator"><</span>User<span class="token operator">></span> <span class="token function">list</span><span class="token punctuation">(</span><span class="token keyword">int</span> page<span class="token punctuation">,</span><span class="token keyword">int</span> pageSize<span class="token punctuation">)</span><span class="token punctuation">{</span> String sql <span class="token operator">=</span> <span class="token string">"select * from User where name like ? limit "</span><span class="token operator">+</span><span class="token punctuation">(</span><span class="token punctuation">(</span>page<span class="token operator">-</span><span class="token number">1</span><span class="token punctuation">)</span><span class="token operator">*</span>pageSize<span class="token punctuation">)</span><span class="token operator">+</span><span class="token string">","</span><span class="token operator">+</span>pageSize<span class="token punctuation">;</span> List<span class="token operator"><</span>User<span class="token operator">></span> list <span class="token operator">=</span> mapper<span class="token punctuation">.</span><span class="token function">list</span><span class="token punctuation">(</span>sql<span class="token punctuation">,</span><span class="token string">"%"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> list<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment" spellcheck="true">/** * 现在我们可以优雅地获取page * @param page * @param pageSize * @return */</span> <span class="token keyword">public</span> List<span class="token operator"><</span>User<span class="token operator">></span> <span class="token function">page</span><span class="token punctuation">(</span><span class="token keyword">int</span> page<span class="token punctuation">,</span><span class="token keyword">int</span> pageSize<span class="token punctuation">)</span><span class="token punctuation">{</span> User object<span class="token operator">=</span><span class="token keyword">new</span> <span class="token class-name">User</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> object<span class="token punctuation">.</span><span class="token function">setPage</span><span class="token punctuation">(</span>page<span class="token punctuation">)</span><span class="token punctuation">;</span> List<span class="token operator"><</span>User<span class="token operator">></span> list <span class="token operator">=</span> mapper<span class="token punctuation">.</span><span class="token function">page</span><span class="token punctuation">(</span>object<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> list<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> User <span class="token function">find</span><span class="token punctuation">(</span><span class="token keyword">int</span> id<span class="token punctuation">)</span> <span class="token punctuation">{</span> String sql <span class="token operator">=</span> <span class="token string">"select * from User where id=?"</span><span class="token punctuation">;</span> <span class="token keyword">return</span> mapper<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span>sql<span class="token punctuation">,</span> id<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">save</span><span class="token punctuation">(</span>User user<span class="token punctuation">)</span> <span class="token punctuation">{</span> mapper<span class="token punctuation">.</span><span class="token function">save</span><span class="token punctuation">(</span>user<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">del</span><span class="token punctuation">(</span>User user<span class="token punctuation">)</span> <span class="token punctuation">{</span> mapper<span class="token punctuation">.</span><span class="token function">del</span><span class="token punctuation">(</span>user<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">update</span><span class="token punctuation">(</span>User user<span class="token punctuation">)</span> <span class="token punctuation">{</span> mapper<span class="token punctuation">.</span><span class="token function">update</span><span class="token punctuation">(</span>user<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><h3 id="相应的Controller"><a href="#相应的Controller" class="headerlink" title="相应的Controller"></a>相应的Controller</h3><pre class=" language-java"><code class="language-java"><span class="token keyword">package</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>jdbc<span class="token punctuation">;</span><span class="token keyword">import</span> java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>ArrayList<span class="token punctuation">;</span><span class="token keyword">import</span> java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>List<span class="token punctuation">;</span><span class="token keyword">import</span> java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>concurrent<span class="token punctuation">.</span>Callable<span class="token punctuation">;</span><span class="token keyword">import</span> java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>concurrent<span class="token punctuation">.</span>ExecutorService<span class="token punctuation">;</span><span class="token keyword">import</span> java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>concurrent<span class="token punctuation">.</span>Executors<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>beans<span class="token punctuation">.</span>factory<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>Autowired<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>web<span class="token punctuation">.</span>bind<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>GetMapping<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>web<span class="token punctuation">.</span>bind<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>PathVariable<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>web<span class="token punctuation">.</span>bind<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>PostMapping<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>web<span class="token punctuation">.</span>bind<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>RequestBody<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>web<span class="token punctuation">.</span>bind<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>RestController<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>web<span class="token punctuation">.</span>client<span class="token punctuation">.</span>RestTemplate<span class="token punctuation">;</span><span class="token keyword">import</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>batis<span class="token punctuation">.</span>common<span class="token punctuation">.</span>JSON<span class="token punctuation">;</span><span class="token keyword">import</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>jdbc<span class="token punctuation">.</span>model<span class="token punctuation">.</span>MovieInfo<span class="token punctuation">;</span><span class="token keyword">import</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>jdbc<span class="token punctuation">.</span>model<span class="token punctuation">.</span>User<span class="token punctuation">;</span><span class="token keyword">import</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>jdbc<span class="token punctuation">.</span>service<span class="token punctuation">.</span>UserService<span class="token punctuation">;</span><span class="token keyword">import</span> io<span class="token punctuation">.</span>swagger<span class="token punctuation">.</span>annotations<span class="token punctuation">.</span>Api<span class="token punctuation">;</span><span class="token annotation punctuation">@Api</span><span class="token annotation punctuation">@RestController</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">IndexController</span> <span class="token punctuation">{</span> <span class="token annotation punctuation">@Autowired</span> <span class="token keyword">private</span> UserService service<span class="token punctuation">;</span> <span class="token annotation punctuation">@GetMapping</span><span class="token punctuation">(</span><span class="token string">"/"</span><span class="token punctuation">)</span> <span class="token keyword">public</span> List<span class="token operator"><</span>User<span class="token operator">></span> <span class="token function">index</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> List<span class="token operator"><</span>User<span class="token operator">></span> list <span class="token operator">=</span> service<span class="token punctuation">.</span><span class="token function">page</span><span class="token punctuation">(</span><span class="token number">1</span><span class="token punctuation">,</span> <span class="token number">5</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> list<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token annotation punctuation">@GetMapping</span><span class="token punctuation">(</span><span class="token string">"/add"</span><span class="token punctuation">)</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">add</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> User user<span class="token operator">=</span><span class="token keyword">new</span> <span class="token class-name">User</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> user<span class="token punctuation">.</span><span class="token function">setAge</span><span class="token punctuation">(</span><span class="token number">50</span><span class="token punctuation">)</span><span class="token punctuation">;</span> user<span class="token punctuation">.</span><span class="token function">setName</span><span class="token punctuation">(</span><span class="token string">"赵钱孙"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> service<span class="token punctuation">.</span><span class="token function">save</span><span class="token punctuation">(</span>user<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token annotation punctuation">@GetMapping</span><span class="token punctuation">(</span><span class="token string">"/del"</span><span class="token punctuation">)</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">del</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> User user<span class="token operator">=</span><span class="token keyword">new</span> <span class="token class-name">User</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> user<span class="token punctuation">.</span><span class="token function">setAge</span><span class="token punctuation">(</span><span class="token number">50</span><span class="token punctuation">)</span><span class="token punctuation">;</span> user<span class="token punctuation">.</span><span class="token function">setName</span><span class="token punctuation">(</span><span class="token string">"赵钱孙"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> service<span class="token punctuation">.</span><span class="token function">del</span><span class="token punctuation">(</span>user<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token annotation punctuation">@GetMapping</span><span class="token punctuation">(</span><span class="token string">"/update"</span><span class="token punctuation">)</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">update</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> User user<span class="token operator">=</span><span class="token keyword">new</span> <span class="token class-name">User</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> user<span class="token punctuation">.</span><span class="token function">setId</span><span class="token punctuation">(</span><span class="token number">13</span><span class="token punctuation">)</span><span class="token punctuation">;</span> user<span class="token punctuation">.</span><span class="token function">setAge</span><span class="token punctuation">(</span><span class="token number">52</span><span class="token punctuation">)</span><span class="token punctuation">;</span> user<span class="token punctuation">.</span><span class="token function">setName</span><span class="token punctuation">(</span><span class="token string">"赵钱孙"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> service<span class="token punctuation">.</span><span class="token function">update</span><span class="token punctuation">(</span>user<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token annotation punctuation">@GetMapping</span><span class="token punctuation">(</span><span class="token string">"/user/{id}"</span><span class="token punctuation">)</span> <span class="token keyword">public</span> User <span class="token function">user</span><span class="token punctuation">(</span><span class="token annotation punctuation">@PathVariable</span> <span class="token keyword">int</span> id<span class="token punctuation">)</span> <span class="token punctuation">{</span> User list <span class="token operator">=</span> service<span class="token punctuation">.</span><span class="token function">find</span><span class="token punctuation">(</span>id<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> list<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><p>与 Mybatis的使用一样, 同样非常的简单, 但不用引入更多的东西.</p>]]></content>
<categories>
<category> 软件设计 </category>
<category> JAVA </category>
</categories>
<tags>
<tag> SpringBoot </tag>
<tag> JdbcTemplate </tag>
</tags>
</entry>
<entry>
<title>SpringBoot+MyBatis中通用动态CRUDP的实现</title>
<link href="/2018/10/23/springboot-mybatis-zhong-tong-yong-dong-tai-crudp-de-shi-xian/"/>
<url>/2018/10/23/springboot-mybatis-zhong-tong-yong-dong-tai-crudp-de-shi-xian/</url>
<content type="html"><![CDATA[<h2 id="SpringBoot-MyBatis中通用动态CRUDP的实现"><a href="#SpringBoot-MyBatis中通用动态CRUDP的实现" class="headerlink" title="SpringBoot+MyBatis中通用动态CRUDP的实现"></a>SpringBoot+MyBatis中通用动态CRUDP的实现</h2><p>SpringBoot+MyBatis框架的优缺点我就不表啦, 今天来说就怎么动态实现CRUDP.<br>先来一个通用Mapper</p><pre class=" language-java"><code class="language-java"><span class="token keyword">package</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>batis<span class="token punctuation">.</span>common<span class="token punctuation">;</span><span class="token keyword">import</span> java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>List<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>ibatis<span class="token punctuation">.</span>annotations<span class="token punctuation">.</span>DeleteProvider<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>ibatis<span class="token punctuation">.</span>annotations<span class="token punctuation">.</span>InsertProvider<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>ibatis<span class="token punctuation">.</span>annotations<span class="token punctuation">.</span>Options<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>ibatis<span class="token punctuation">.</span>annotations<span class="token punctuation">.</span>SelectProvider<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>ibatis<span class="token punctuation">.</span>annotations<span class="token punctuation">.</span>UpdateProvider<span class="token punctuation">;</span><span class="token keyword">import</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>jdbc<span class="token punctuation">.</span>common<span class="token punctuation">.</span>BaseEntity<span class="token punctuation">;</span><span class="token comment" spellcheck="true">/** * 通用Mapper基础接口,使用范型,其他Mapper继承即可 * @author mrzhou * * @param <T> */</span><span class="token keyword">public</span> <span class="token keyword">interface</span> <span class="token class-name">GeneralMapper</span><span class="token operator"><</span>T <span class="token keyword">extends</span> <span class="token class-name">BaseEntity</span><span class="token operator">></span> <span class="token punctuation">{</span> <span class="token annotation punctuation">@InsertProvider</span><span class="token punctuation">(</span>method<span class="token operator">=</span><span class="token string">"insert"</span><span class="token punctuation">,</span>type<span class="token operator">=</span>SQLGen<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span> <span class="token annotation punctuation">@Options</span><span class="token punctuation">(</span>useGeneratedKeys<span class="token operator">=</span><span class="token boolean">true</span><span class="token punctuation">,</span>keyProperty<span class="token operator">=</span><span class="token string">"id"</span><span class="token punctuation">)</span> <span class="token keyword">int</span> <span class="token function">save</span><span class="token punctuation">(</span>T t<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token annotation punctuation">@DeleteProvider</span><span class="token punctuation">(</span>method<span class="token operator">=</span><span class="token string">"del"</span><span class="token punctuation">,</span>type<span class="token operator">=</span>SQLGen<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span> <span class="token keyword">int</span> <span class="token function">del</span><span class="token punctuation">(</span>T t<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token annotation punctuation">@UpdateProvider</span><span class="token punctuation">(</span>method<span class="token operator">=</span><span class="token string">"update"</span><span class="token punctuation">,</span>type<span class="token operator">=</span>SQLGen<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span> <span class="token keyword">int</span> <span class="token function">update</span><span class="token punctuation">(</span>T t<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token annotation punctuation">@SelectProvider</span><span class="token punctuation">(</span>method<span class="token operator">=</span><span class="token string">"select"</span><span class="token punctuation">,</span>type<span class="token operator">=</span>SQLGen<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span> List<span class="token operator"><</span>T<span class="token operator">></span> <span class="token function">list</span><span class="token punctuation">(</span>T t<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token annotation punctuation">@SelectProvider</span><span class="token punctuation">(</span>method<span class="token operator">=</span><span class="token string">"page"</span><span class="token punctuation">,</span>type<span class="token operator">=</span>SQLGen<span class="token punctuation">.</span><span class="token keyword">class</span><span class="token punctuation">)</span> List<span class="token operator"><</span>T<span class="token operator">></span> <span class="token function">page</span><span class="token punctuation">(</span>T t<span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><p>这里需要一个SQLGen</p><pre class=" language-java"><code class="language-java"><span class="token keyword">package</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>batis<span class="token punctuation">.</span>common<span class="token punctuation">;</span><span class="token keyword">import</span> java<span class="token punctuation">.</span>lang<span class="token punctuation">.</span>reflect<span class="token punctuation">.</span>Field<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>ibatis<span class="token punctuation">.</span>jdbc<span class="token punctuation">.</span>SQL<span class="token punctuation">;</span><span class="token keyword">import</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>jdbc<span class="token punctuation">.</span>common<span class="token punctuation">.</span>BaseEntity<span class="token punctuation">;</span><span class="token comment" spellcheck="true">/** * 常规CRUD四个方法 * @author mrzhou * * @param <T> */</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">SQLGen</span><span class="token operator"><</span>T <span class="token keyword">extends</span> <span class="token class-name">BaseEntity</span><span class="token operator">></span> <span class="token punctuation">{</span> <span class="token keyword">public</span> String <span class="token function">page</span><span class="token punctuation">(</span>T object<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">SQL</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">{</span> <span class="token function">SELECT</span><span class="token punctuation">(</span><span class="token string">"*"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">FROM</span><span class="token punctuation">(</span>object<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getSimpleName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">try</span> <span class="token punctuation">{</span> Field<span class="token punctuation">[</span><span class="token punctuation">]</span> fields <span class="token operator">=</span> object<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getDeclaredFields</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>Field field <span class="token operator">:</span> fields<span class="token punctuation">)</span> <span class="token punctuation">{</span> field<span class="token punctuation">.</span><span class="token function">setAccessible</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Object v <span class="token operator">=</span> field<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>object<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>v <span class="token operator">!=</span> null<span class="token punctuation">)</span> <span class="token punctuation">{</span> String fieldName <span class="token operator">=</span> field<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>v <span class="token keyword">instanceof</span> <span class="token class-name">String</span> <span class="token operator">&&</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>String<span class="token punctuation">)</span>v<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">contains</span><span class="token punctuation">(</span><span class="token string">"%"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">WHERE</span><span class="token punctuation">(</span>fieldName <span class="token operator">+</span> <span class="token string">" like '"</span><span class="token operator">+</span>v<span class="token operator">+</span><span class="token string">"'"</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token function">WHERE</span><span class="token punctuation">(</span>fieldName <span class="token operator">+</span> <span class="token string">"=#{"</span> <span class="token operator">+</span> fieldName <span class="token operator">+</span> <span class="token string">"}"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Exception</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token operator">+</span><span class="token string">" limit #{start},#{pageSize}"</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> String <span class="token function">select</span><span class="token punctuation">(</span>T object<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">SQL</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">{</span> <span class="token function">SELECT</span><span class="token punctuation">(</span><span class="token string">"*"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">FROM</span><span class="token punctuation">(</span>object<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getSimpleName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">try</span> <span class="token punctuation">{</span> Field<span class="token punctuation">[</span><span class="token punctuation">]</span> fields <span class="token operator">=</span> object<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getDeclaredFields</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>Field field <span class="token operator">:</span> fields<span class="token punctuation">)</span> <span class="token punctuation">{</span> field<span class="token punctuation">.</span><span class="token function">setAccessible</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Object v <span class="token operator">=</span> field<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>object<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>v <span class="token operator">!=</span> null<span class="token punctuation">)</span> <span class="token punctuation">{</span> String fieldName <span class="token operator">=</span> field<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>v <span class="token keyword">instanceof</span> <span class="token class-name">String</span> <span class="token operator">&&</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>String<span class="token punctuation">)</span>v<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">contains</span><span class="token punctuation">(</span><span class="token string">"%"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">WHERE</span><span class="token punctuation">(</span>fieldName <span class="token operator">+</span> <span class="token string">" like '"</span><span class="token operator">+</span>v<span class="token operator">+</span><span class="token string">"'"</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token function">WHERE</span><span class="token punctuation">(</span>fieldName <span class="token operator">+</span> <span class="token string">"=#{"</span> <span class="token operator">+</span> fieldName <span class="token operator">+</span> <span class="token string">"}"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Exception</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> String <span class="token function">update</span><span class="token punctuation">(</span>T object<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">SQL</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">{</span> <span class="token function">UPDATE</span><span class="token punctuation">(</span>object<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getSimpleName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">try</span> <span class="token punctuation">{</span> Field<span class="token punctuation">[</span><span class="token punctuation">]</span> fields <span class="token operator">=</span> object<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getDeclaredFields</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>Field field <span class="token operator">:</span> fields<span class="token punctuation">)</span> <span class="token punctuation">{</span> field<span class="token punctuation">.</span><span class="token function">setAccessible</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Object v <span class="token operator">=</span> field<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>object<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>v <span class="token operator">!=</span> null<span class="token punctuation">)</span> <span class="token punctuation">{</span> String fieldName <span class="token operator">=</span> field<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">SET</span><span class="token punctuation">(</span>fieldName <span class="token operator">+</span> <span class="token string">"=#{"</span> <span class="token operator">+</span> fieldName <span class="token operator">+</span> <span class="token string">"}"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Exception</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token function">WHERE</span><span class="token punctuation">(</span><span class="token string">"id=#{id}"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> String <span class="token function">insert</span><span class="token punctuation">(</span>T object<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">SQL</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">{</span> <span class="token function">INSERT_INTO</span><span class="token punctuation">(</span>object<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getSimpleName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">try</span> <span class="token punctuation">{</span> Field<span class="token punctuation">[</span><span class="token punctuation">]</span> fields <span class="token operator">=</span> object<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getDeclaredFields</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>Field field <span class="token operator">:</span> fields<span class="token punctuation">)</span> <span class="token punctuation">{</span> field<span class="token punctuation">.</span><span class="token function">setAccessible</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Object v <span class="token operator">=</span> field<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>object<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>v <span class="token operator">!=</span> null<span class="token punctuation">)</span> <span class="token punctuation">{</span> String fieldName <span class="token operator">=</span> field<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token function">VALUES</span><span class="token punctuation">(</span>fieldName<span class="token punctuation">,</span><span class="token string">"#{"</span><span class="token operator">+</span>fieldName<span class="token operator">+</span><span class="token string">"}"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Exception</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> String <span class="token function">del</span><span class="token punctuation">(</span>T object<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token keyword">new</span> <span class="token class-name">SQL</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">{</span> <span class="token function">DELETE_FROM</span><span class="token punctuation">(</span>object<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getSimpleName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">try</span> <span class="token punctuation">{</span> Field<span class="token punctuation">[</span><span class="token punctuation">]</span> fields <span class="token operator">=</span> object<span class="token punctuation">.</span><span class="token function">getClass</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">getDeclaredFields</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">for</span> <span class="token punctuation">(</span>Field field <span class="token operator">:</span> fields<span class="token punctuation">)</span> <span class="token punctuation">{</span> field<span class="token punctuation">.</span><span class="token function">setAccessible</span><span class="token punctuation">(</span><span class="token boolean">true</span><span class="token punctuation">)</span><span class="token punctuation">;</span> Object v <span class="token operator">=</span> field<span class="token punctuation">.</span><span class="token function">get</span><span class="token punctuation">(</span>object<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>v <span class="token operator">!=</span> null<span class="token punctuation">)</span> <span class="token punctuation">{</span> String fieldName <span class="token operator">=</span> field<span class="token punctuation">.</span><span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>v <span class="token keyword">instanceof</span> <span class="token class-name">String</span> <span class="token operator">&&</span> <span class="token punctuation">(</span><span class="token punctuation">(</span>String<span class="token punctuation">)</span>v<span class="token punctuation">)</span><span class="token punctuation">.</span><span class="token function">contains</span><span class="token punctuation">(</span><span class="token string">"%"</span><span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token function">WHERE</span><span class="token punctuation">(</span>fieldName <span class="token operator">+</span> <span class="token string">" like '"</span><span class="token operator">+</span>v<span class="token operator">+</span><span class="token string">"'"</span> <span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">else</span> <span class="token punctuation">{</span> <span class="token function">WHERE</span><span class="token punctuation">(</span>fieldName <span class="token operator">+</span> <span class="token string">"=#{"</span> <span class="token operator">+</span> fieldName <span class="token operator">+</span> <span class="token string">"}"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token keyword">catch</span> <span class="token punctuation">(</span><span class="token class-name">Exception</span> e<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span> <span class="token punctuation">}</span><span class="token punctuation">.</span><span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><p>在这里的分页查询中, 可以看到多了两个变量, 其实这个是我对每个实体都定义了一个基础类, 但这些属性对于使用来说是不需要的, 所以在这里忽略了.</p><pre class=" language-java"><code class="language-java"><span class="token keyword">package</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>jdbc<span class="token punctuation">.</span>common<span class="token punctuation">;</span><span class="token keyword">import</span> com<span class="token punctuation">.</span>fasterxml<span class="token punctuation">.</span>jackson<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>JsonIgnore<span class="token punctuation">;</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">BaseEntity</span> <span class="token punctuation">{</span> <span class="token annotation punctuation">@JsonIgnore</span> <span class="token keyword">private</span> <span class="token keyword">int</span> page <span class="token operator">=</span> <span class="token number">1</span><span class="token punctuation">;</span> <span class="token annotation punctuation">@JsonIgnore</span> <span class="token keyword">private</span> <span class="token keyword">int</span> pageSize <span class="token operator">=</span> <span class="token number">10</span><span class="token punctuation">;</span> <span class="token keyword">public</span> <span class="token keyword">int</span> <span class="token function">getPage</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> page<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token annotation punctuation">@JsonIgnore</span> <span class="token keyword">public</span> <span class="token keyword">int</span> <span class="token function">getStart</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token punctuation">(</span>page <span class="token operator">-</span> <span class="token number">1</span><span class="token punctuation">)</span> <span class="token operator">*</span> pageSize<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setPage</span><span class="token punctuation">(</span><span class="token keyword">int</span> page<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">this</span><span class="token punctuation">.</span>page <span class="token operator">=</span> page<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">int</span> <span class="token function">getPageSize</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> pageSize<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setPageSize</span><span class="token punctuation">(</span><span class="token keyword">int</span> pageSize<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">this</span><span class="token punctuation">.</span>pageSize <span class="token operator">=</span> pageSize<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><p>再下看一下具体的实体</p><pre class=" language-java"><code class="language-java"><span class="token keyword">package</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>jdbc<span class="token punctuation">.</span>model<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>data<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>Id<span class="token punctuation">;</span><span class="token keyword">import</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>jdbc<span class="token punctuation">.</span>common<span class="token punctuation">.</span>BaseEntity<span class="token punctuation">;</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">User</span> <span class="token keyword">extends</span> <span class="token class-name">BaseEntity</span> <span class="token punctuation">{</span> <span class="token annotation punctuation">@Id</span> <span class="token keyword">private</span> Integer id<span class="token punctuation">;</span> <span class="token keyword">private</span> String name<span class="token punctuation">;</span> <span class="token keyword">private</span> Integer age<span class="token punctuation">;</span> <span class="token keyword">public</span> Integer <span class="token function">getId</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> id<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setId</span><span class="token punctuation">(</span><span class="token keyword">int</span> id<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">this</span><span class="token punctuation">.</span>id <span class="token operator">=</span> id<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> String <span class="token function">getName</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> name<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setName</span><span class="token punctuation">(</span>String name<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">=</span> name<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token annotation punctuation">@Override</span> <span class="token keyword">public</span> String <span class="token function">toString</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> <span class="token string">"User [id="</span> <span class="token operator">+</span> id <span class="token operator">+</span> <span class="token string">", name="</span> <span class="token operator">+</span> name <span class="token operator">+</span> <span class="token string">", age="</span> <span class="token operator">+</span> age <span class="token operator">+</span> <span class="token string">"]"</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token function">User</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">super</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token function">User</span><span class="token punctuation">(</span><span class="token keyword">int</span> id<span class="token punctuation">,</span> String name<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">super</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">this</span><span class="token punctuation">.</span>id <span class="token operator">=</span> id<span class="token punctuation">;</span> <span class="token keyword">this</span><span class="token punctuation">.</span>name <span class="token operator">=</span> name<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> Integer <span class="token function">getAge</span><span class="token punctuation">(</span><span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> age<span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token keyword">public</span> <span class="token keyword">void</span> <span class="token function">setAge</span><span class="token punctuation">(</span><span class="token keyword">int</span> age<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">this</span><span class="token punctuation">.</span>age <span class="token operator">=</span> age<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><p>来看看实例对应的mapper, 在这里还可以继续定义其他你喜欢的方法</p><pre class=" language-java"><code class="language-java"><span class="token keyword">package</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>batis<span class="token punctuation">.</span>mapper<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>ibatis<span class="token punctuation">.</span>annotations<span class="token punctuation">.</span>Delete<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>ibatis<span class="token punctuation">.</span>annotations<span class="token punctuation">.</span>Insert<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>ibatis<span class="token punctuation">.</span>annotations<span class="token punctuation">.</span>Mapper<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>ibatis<span class="token punctuation">.</span>annotations<span class="token punctuation">.</span>Param<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>ibatis<span class="token punctuation">.</span>annotations<span class="token punctuation">.</span>Select<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>apache<span class="token punctuation">.</span>ibatis<span class="token punctuation">.</span>annotations<span class="token punctuation">.</span>Update<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>stereotype<span class="token punctuation">.</span>Repository<span class="token punctuation">;</span><span class="token keyword">import</span> com<span class="token punctuation">.</span>github<span class="token punctuation">.</span>pagehelper<span class="token punctuation">.</span>Page<span class="token punctuation">;</span><span class="token keyword">import</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>batis<span class="token punctuation">.</span>common<span class="token punctuation">.</span>GeneralMapper<span class="token punctuation">;</span><span class="token keyword">import</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>jdbc<span class="token punctuation">.</span>model<span class="token punctuation">.</span>User<span class="token punctuation">;</span><span class="token annotation punctuation">@Mapper</span><span class="token annotation punctuation">@Repository</span><span class="token punctuation">(</span><span class="token string">"umapper"</span><span class="token punctuation">)</span><span class="token keyword">public</span> <span class="token keyword">interface</span> <span class="token class-name">UserMapper</span> <span class="token keyword">extends</span> <span class="token class-name">GeneralMapper</span><span class="token operator"><</span>User<span class="token operator">></span> <span class="token punctuation">{</span> <span class="token annotation punctuation">@Insert</span><span class="token punctuation">(</span><span class="token string">"insert into User(name,age) values(#{name},#{age})"</span><span class="token punctuation">)</span> <span class="token keyword">int</span> <span class="token function">addUser</span><span class="token punctuation">(</span><span class="token annotation punctuation">@Param</span><span class="token punctuation">(</span><span class="token string">"name"</span><span class="token punctuation">)</span> String name<span class="token punctuation">,</span> <span class="token annotation punctuation">@Param</span><span class="token punctuation">(</span><span class="token string">"age"</span><span class="token punctuation">)</span> <span class="token keyword">int</span> age<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token annotation punctuation">@Select</span><span class="token punctuation">(</span><span class="token string">"select * from User where id =#{id}"</span><span class="token punctuation">)</span> User <span class="token function">findById</span><span class="token punctuation">(</span><span class="token annotation punctuation">@Param</span><span class="token punctuation">(</span><span class="token string">"id"</span><span class="token punctuation">)</span> <span class="token keyword">int</span> id<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token annotation punctuation">@Update</span><span class="token punctuation">(</span><span class="token string">"update User set name=#{name} where id=#{id}"</span><span class="token punctuation">)</span> <span class="token keyword">void</span> <span class="token function">updataById</span><span class="token punctuation">(</span><span class="token annotation punctuation">@Param</span><span class="token punctuation">(</span><span class="token string">"id"</span><span class="token punctuation">)</span> <span class="token keyword">int</span> id<span class="token punctuation">,</span> <span class="token annotation punctuation">@Param</span><span class="token punctuation">(</span><span class="token string">"name"</span><span class="token punctuation">)</span> String name<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token annotation punctuation">@Delete</span><span class="token punctuation">(</span><span class="token string">"delete from User where id=#{id}"</span><span class="token punctuation">)</span> <span class="token keyword">void</span> <span class="token function">deleteById</span><span class="token punctuation">(</span><span class="token annotation punctuation">@Param</span><span class="token punctuation">(</span><span class="token string">"id"</span><span class="token punctuation">)</span> <span class="token keyword">int</span> id<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token annotation punctuation">@Select</span><span class="token punctuation">(</span><span class="token string">"select * from User order by id desc"</span><span class="token punctuation">)</span> Page<span class="token operator"><</span>User<span class="token operator">></span> <span class="token function">getPage</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span><span class="token punctuation">}</span></code></pre><p>最后来看看Controller中的调用</p><pre class=" language-java"><code class="language-java"><span class="token keyword">package</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>batis<span class="token punctuation">;</span><span class="token keyword">import</span> java<span class="token punctuation">.</span>util<span class="token punctuation">.</span>List<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>beans<span class="token punctuation">.</span>factory<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>Autowired<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>web<span class="token punctuation">.</span>bind<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>GetMapping<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>web<span class="token punctuation">.</span>bind<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>PathVariable<span class="token punctuation">;</span><span class="token keyword">import</span> org<span class="token punctuation">.</span>springframework<span class="token punctuation">.</span>web<span class="token punctuation">.</span>bind<span class="token punctuation">.</span>annotation<span class="token punctuation">.</span>RestController<span class="token punctuation">;</span><span class="token keyword">import</span> com<span class="token punctuation">.</span>github<span class="token punctuation">.</span>pagehelper<span class="token punctuation">.</span>Page<span class="token punctuation">;</span><span class="token keyword">import</span> com<span class="token punctuation">.</span>github<span class="token punctuation">.</span>pagehelper<span class="token punctuation">.</span>PageHelper<span class="token punctuation">;</span><span class="token keyword">import</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>batis<span class="token punctuation">.</span>common<span class="token punctuation">.</span>JSON<span class="token punctuation">;</span><span class="token keyword">import</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>batis<span class="token punctuation">.</span>mapper<span class="token punctuation">.</span>UserMapper<span class="token punctuation">;</span><span class="token keyword">import</span> cn<span class="token punctuation">.</span>miw<span class="token punctuation">.</span>rpc<span class="token punctuation">.</span>jdbc<span class="token punctuation">.</span>model<span class="token punctuation">.</span>User<span class="token punctuation">;</span><span class="token keyword">import</span> io<span class="token punctuation">.</span>swagger<span class="token punctuation">.</span>annotations<span class="token punctuation">.</span>Api<span class="token punctuation">;</span><span class="token annotation punctuation">@Api</span><span class="token annotation punctuation">@RestController</span><span class="token keyword">public</span> <span class="token keyword">class</span> <span class="token class-name">BatisController</span> <span class="token punctuation">{</span> <span class="token annotation punctuation">@Autowired</span> <span class="token keyword">private</span> UserMapper userMapper<span class="token punctuation">;</span> <span class="token annotation punctuation">@GetMapping</span><span class="token punctuation">(</span><span class="token string">"/batis/{id}"</span><span class="token punctuation">)</span> <span class="token keyword">public</span> User <span class="token function">insert</span><span class="token punctuation">(</span><span class="token annotation punctuation">@PathVariable</span> <span class="token keyword">int</span> id<span class="token punctuation">)</span> <span class="token punctuation">{</span> <span class="token keyword">return</span> userMapper<span class="token punctuation">.</span><span class="token function">findById</span><span class="token punctuation">(</span>id<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token annotation punctuation">@GetMapping</span><span class="token punctuation">(</span><span class="token string">"/batis/find/{page}"</span><span class="token punctuation">)</span> <span class="token keyword">public</span> Object <span class="token function">find</span><span class="token punctuation">(</span><span class="token annotation punctuation">@PathVariable</span> <span class="token keyword">int</span> page<span class="token punctuation">)</span> <span class="token punctuation">{</span> User user <span class="token operator">=</span> <span class="token keyword">new</span> <span class="token class-name">User</span><span class="token punctuation">(</span><span class="token punctuation">)</span><span class="token punctuation">;</span> user<span class="token punctuation">.</span><span class="token function">setName</span><span class="token punctuation">(</span><span class="token string">"%"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> user<span class="token punctuation">.</span><span class="token function">setPage</span><span class="token punctuation">(</span>page<span class="token punctuation">)</span><span class="token punctuation">;</span> user<span class="token punctuation">.</span><span class="token function">setPageSize</span><span class="token punctuation">(</span><span class="token number">10</span><span class="token punctuation">)</span><span class="token punctuation">;</span> List<span class="token operator"><</span>User<span class="token operator">></span> list <span class="token operator">=</span> userMapper<span class="token punctuation">.</span><span class="token function">page</span><span class="token punctuation">(</span>user<span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token keyword">return</span> list<span class="token punctuation">;</span> <span class="token punctuation">}</span><span class="token punctuation">}</span></code></pre><p>使用是不是很简单呢?</p>]]></content>
<categories>
<category> 软件设计 </category>
<category> JAVA </category>
</categories>
<tags>
<tag> SpringBoot </tag>
<tag> MyBatis </tag>
</tags>
</entry>
<entry>
<title>JRebel 2018.1.6 注册服务搭建</title>
<link href="/2018/10/15/jrebel-2018-1-6-zhu-ce-fu-wu-da-jian/"/>
<url>/2018/10/15/jrebel-2018-1-6-zhu-ce-fu-wu-da-jian/</url>
<content type="html"><![CDATA[<h1 id="JRebel-2018-1-6-注册服务搭建"><a href="#JRebel-2018-1-6-注册服务搭建" class="headerlink" title="JRebel 2018.1.6 注册服务搭建"></a>JRebel 2018.1.6 注册服务搭建</h1><p>JRebel热部署功能使用起来确实很方便, 只是需要激活使用, 虽然有好多在线的激活服务地址, 但需要都可能被和谐掉, 也有可能被Jetbrain封掉, 不如自己架一个注册服务.</p><p>下载地址: <a href="https://download.csdn.net/download/miw__/10721048" target="_blank" rel="noopener">https://download.csdn.net/download/miw__/10721048</a></p><p>使用java -jar JRebelServer.jar 运行 可以自定义指定端口</p><img src="/2018/10/15/jrebel-2018-1-6-zhu-ce-fu-wu-da-jian/jrebelserver.png" title="jrebelserver.png">]]></content>
<categories>
<category> 软件设计 </category>
<category> JAVA </category>
</categories>
<tags>
<tag> java </tag>
<tag> JRebel </tag>
<tag> 注册 </tag>
</tags>
</entry>
<entry>
<title>2005-2010年网站作品</title>
<link href="/2018/10/13/2005-2010-nian-wang-zhan-zuo-pin/"/>
<url>/2018/10/13/2005-2010-nian-wang-zhan-zuo-pin/</url>
<content type="html"><![CDATA[<h2 id="2005-2010年网站作品"><a href="#2005-2010年网站作品" class="headerlink" title="2005-2010年网站作品"></a>2005-2010年网站作品</h2><p>自2005年始, 全面转向JAVA阵营. 从jsp页面的网站开始,到servlet, 再到struts1.2 struts2, 到hibernate, 在开发过程中也积累了大量的基础工具包. jdk大概最初用的是1.4/1.5,后来1.7使用的时间最长. JAVA容器主要接触有Tomcat/JBOSS/WebLogic/Websphare. 也尝试过Lotus Domino , PHP等.</p><h3 id="云南省建设厅资质管理系统-2006"><a href="#云南省建设厅资质管理系统-2006" class="headerlink" title="云南省建设厅资质管理系统(2006)"></a>云南省建设厅资质管理系统(2006)</h3><img src="/2018/10/13/2005-2010-nian-wang-zhan-zuo-pin/(2006)aptitude.ynhouse.org.png" title="云南省建设厅资质管理系统(2006)"><h3 id="景洪房产信息网-2006"><a href="#景洪房产信息网-2006" class="headerlink" title="景洪房产信息网(2006)"></a>景洪房产信息网(2006)</h3><img src="/2018/10/13/2005-2010-nian-wang-zhan-zuo-pin/(2006)bnhouse.org(java).png" title="景洪房产信息网(2006)"><h3 id="楚雄房产信息网-2006"><a href="#楚雄房产信息网-2006" class="headerlink" title="楚雄房产信息网(2006)"></a>楚雄房产信息网(2006)</h3><img src="/2018/10/13/2005-2010-nian-wang-zhan-zuo-pin/(2006)cxhouse.org.png" title="楚雄房产信息网(2006)"><h3 id="迈威域名代理注册网-2006"><a href="#迈威域名代理注册网-2006" class="headerlink" title="迈威域名代理注册网(2006)"></a>迈威域名代理注册网(2006)</h3><img src="/2018/10/13/2005-2010-nian-wang-zhan-zuo-pin/(2006)do.miw.cn.png" title="迈威域名代理注册网(2006)"><h3 id="曲靖维修基金管理信息网-2006"><a href="#曲靖维修基金管理信息网-2006" class="headerlink" title="曲靖维修基金管理信息网(2006)"></a>曲靖维修基金管理信息网(2006)</h3><img src="/2018/10/13/2005-2010-nian-wang-zhan-zuo-pin/(2006)fund.qjhouse.org.png" title="曲靖维修基金管理信息网(2006)"><h3 id="丽江房产信息网-2006"><a href="#丽江房产信息网-2006" class="headerlink" title="丽江房产信息网(2006)"></a>丽江房产信息网(2006)</h3><img src="/2018/10/13/2005-2010-nian-wang-zhan-zuo-pin/(2006)ljhouse.org(java).png" title="丽江房产信息网(2006)"><h3 id="昆明新奇星科技有限公司-2006"><a href="#昆明新奇星科技有限公司-2006" class="headerlink" title="昆明新奇星科技有限公司(2006)"></a>昆明新奇星科技有限公司(2006)</h3><img src="/2018/10/13/2005-2010-nian-wang-zhan-zuo-pin/(2006)xqx.net.cn.png" title="昆明新奇星科技有限公司(2006)"><h3 id="云南建设厅资质管理网-2006"><a href="#云南建设厅资质管理网-2006" class="headerlink" title="云南建设厅资质管理网(2006)"></a>云南建设厅资质管理网(2006)</h3><img src="/2018/10/13/2005-2010-nian-wang-zhan-zuo-pin/(2006)ynhouse.org.png" title="云南建设厅资质管理网(2006)"><h3 id="昆明房产信息网-2007"><a href="#昆明房产信息网-2007" class="headerlink" title="昆明房产信息网(2007)"></a>昆明房产信息网(2007)</h3><img src="/2018/10/13/2005-2010-nian-wang-zhan-zuo-pin/(2007)kmhouse.org(java).png" title="昆明房产信息网(2007)"><h3 id="云南房产管理信息网-2007"><a href="#云南房产管理信息网-2007" class="headerlink" title="云南房产管理信息网(2007)"></a>云南房产管理信息网(2007)</h3><img src="/2018/10/13/2005-2010-nian-wang-zhan-zuo-pin/(2007)ynhouse.org(java).png" title="云南房产管理信息网(2007)"><h3 id="珠绣中国网-2009"><a href="#珠绣中国网-2009" class="headerlink" title="珠绣中国网(2009)"></a>珠绣中国网(2009)</h3><img src="/2018/10/13/2005-2010-nian-wang-zhan-zuo-pin/(2009)beadchina.com-.jpg" title="珠绣中国网(2009)"><h3 id="云南龙联经贸有限公司-2009"><a href="#云南龙联经贸有限公司-2009" class="headerlink" title="云南龙联经贸有限公司(2009)"></a>云南龙联经贸有限公司(2009)</h3><img src="/2018/10/13/2005-2010-nian-wang-zhan-zuo-pin/(2009)elonglian.com.png" title="云南龙联经贸有限公司(2009)">]]></content>
<categories>
<category> 作品 </category>
<category> WEB </category>
</categories>
<tags>
<tag> web </tag>
<tag> java </tag>
<tag> servlet </tag>
<tag> hibernate </tag>
</tags>
</entry>
<entry>
<title>2005年前网站作品</title>
<link href="/2018/10/12/2005-nian-qian-wang-zhan-zuo-pin/"/>
<url>/2018/10/12/2005-nian-qian-wang-zhan-zuo-pin/</url>
<content type="html"><![CDATA[<h2 id="2005年前的网站作品"><a href="#2005年前的网站作品" class="headerlink" title="2005年前的网站作品"></a>2005年前的网站作品</h2><p>2005年以前, 主要还在微软体系下工作, DOS使用的也是MSDOS, 桌面系统(foxBase/foxPro,VB/Delphi),网站系统(ASP).</p><h3 id="云岭党建网-1998"><a href="#云岭党建网-1998" class="headerlink" title="云岭党建网(1998)"></a>云岭党建网(1998)</h3><img src="/2018/10/12/2005-nian-qian-wang-zhan-zuo-pin/(1998)ccp.org.cn.png" title="云岭党建网(1998)"><h3 id="云南房网-2000"><a href="#云南房网-2000" class="headerlink" title="云南房网(2000)"></a>云南房网(2000)</h3><img src="/2018/10/12/2005-nian-qian-wang-zhan-zuo-pin/(2000)ynhouse.com.png" title="云南房网(2000)"><h3 id="昆明房产信息网-2003"><a href="#昆明房产信息网-2003" class="headerlink" title="昆明房产信息网(2003)"></a>昆明房产信息网(2003)</h3><img src="/2018/10/12/2005-nian-qian-wang-zhan-zuo-pin/(2003)kmhouse.org.png" title="昆明房产信息网(2003)"><h3 id="中国普生肿瘤医学网-2004"><a href="#中国普生肿瘤医学网-2004" class="headerlink" title="中国普生肿瘤医学网(2004)"></a>中国普生肿瘤医学网(2004)</h3><img src="/2018/10/12/2005-nian-qian-wang-zhan-zuo-pin/(2004)cnptm.com.png" title="中国普生肿瘤医学网(2004)"><h3 id="北京金台博物馆-2004"><a href="#北京金台博物馆-2004" class="headerlink" title="北京金台博物馆(2004)"></a>北京金台博物馆(2004)</h3><img src="/2018/10/12/2005-nian-qian-wang-zhan-zuo-pin/(2004)jintaimuseum.org.png" title="北京金台博物馆(2004)"><h3 id="昆明公积金网-2005"><a href="#昆明公积金网-2005" class="headerlink" title="昆明公积金网(2005)"></a>昆明公积金网(2005)</h3><img src="/2018/10/12/2005-nian-qian-wang-zhan-zuo-pin/(2005)kmgjj.com.png" title="昆明公积金网(2005)">]]></content>
<categories>
<category> 作品 </category>
<category> WEB </category>
</categories>
<tags>
<tag> web </tag>
<tag> asp </tag>
</tags>
</entry>
<entry>
<title>wangEditorExt,为wangEditor增加全屏编辑,查看源码功能</title>
<link href="/2018/10/12/wangeditorext-wei-wangeditor-zeng-jia-quan-ping-bian-ji-cha-kan-yuan-ma-gong-neng/"/>
<url>/2018/10/12/wangeditorext-wei-wangeditor-zeng-jia-quan-ping-bian-ji-cha-kan-yuan-ma-gong-neng/</url>
<content type="html"><![CDATA[<h1 id="wangEditorExt"><a href="#wangEditorExt" class="headerlink" title="wangEditorExt"></a>wangEditorExt</h1><p>wangEditor确实是一款比较轻巧的在线可视编辑器, 其实作为网页编辑器有这些功能足够了, 基本满足了在线编辑的需要, 但作为一个技术控, 有些东西它还不满足, 于是就增加全屏编辑, 查看源码功能, 在查看源码功能中同样可以进行编辑, 比如对图像大小的编辑等.</p><pre><code>/** * wangEditor扩展,增加全屏 查看源码功能 * 传入均为 editor实例,非css选择器 * 依赖jquery 如果是layui之类的需要在layui.use方法中使用 * 全屏功能需要引入 wangEditor-fullscreen.css * @author mrzhou@miw.cn * @date 2018.8.30 am 10:00 * 2018.9.18 pm 16:00 增加同页多编辑器支持 * 使用方法: * E.fullscreen.init(editor); * E.viewSource.init(editor); */</code></pre><h3 id="附上一个测试样例"><a href="#附上一个测试样例" class="headerlink" title="附上一个测试样例"></a>附上一个测试样例</h3><pre><code><!DOCTYPE html><html lang="zh-CN"><head> <meta charset="UTF-8"> <title>Document</title> <script src="https://cdn.bootcss.com/jquery/2.2.1/jquery.min.js"></script></head><body> <div id="editor"></div></body></html><script>var E = window.wangEditor;var editor = new E('#editor');editor.create();E.fullscreen.init(editor);E.viewSource.init(editor);</script></code></pre><p><a href="https://github.com/miws/wangEditorExt" target="_blank" rel="noopener">wangEditorExt项目</a><br><a href="https://github.com/wangfupeng1988/wangEditor" target="_blank" rel="noopener">wangEditor项目</a><br><a href="https://github.com/askmiw/simpleweb" target="_blank" rel="noopener">超级简单的JAVA mvc框架,全免配置</a></p>]]></content>
<categories>
<category> 作品 </category>
<category> 前端 </category>
</categories>
<tags>
<tag> javascript </tag>
<tag> wangEditor </tag>
</tags>
</entry>
<entry>
<title>Hello World</title>
<link href="/2018/10/12/hello-world/"/>
<url>/2018/10/12/hello-world/</url>
<content type="html"><![CDATA[<h2 id="这是第一篇-你好-蜜友"><a href="#这是第一篇-你好-蜜友" class="headerlink" title="这是第一篇, 你好, 蜜友!"></a>这是第一篇, 你好, 蜜友!</h2><p>欢迎来到蜜友工作室. 这是基于hexo 构造的网站.</p><pre class=" language-java"><code class="language-java">System<span class="token punctuation">.</span>out<span class="token punctuation">.</span><span class="token function">println</span><span class="token punctuation">(</span><span class="token string">"你好, 蜜友!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span></code></pre>]]></content>
<categories>
<category> 软件设计 </category>
<category> JAVA </category>
</categories>
<tags>
<tag> java </tag>
<tag> redis </tag>
<tag> hexo </tag>
</tags>
</entry>
</search>