Skip to content

Commit ba53773

Browse files
committed
DSW011-MongoDB-REST-Mongotemplate-CDUR
1 parent b8817f6 commit ba53773

File tree

6 files changed

+221
-6
lines changed

6 files changed

+221
-6
lines changed

S8-dsw-Mongotemplate-CDUR/S8-dsw-Mongotemplate-CDUR/build.gradle

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ dependencies {
2424
implementation 'org.springframework.boot:spring-boot-starter-web'
2525
testImplementation 'org.springframework.boot:spring-boot-starter-test'
2626
testRuntimeOnly 'org.junit.platform:junit-platform-launcher'
27+
28+
compileOnly 'org.projectlombok:lombok:1.18.34'
29+
annotationProcessor 'org.projectlombok:lombok:1.18.34'
30+
31+
testCompileOnly 'org.projectlombok:lombok:1.18.34'
32+
testAnnotationProcessor 'org.projectlombok:lombok:1.18.34'
2733
}
2834

2935
tasks.named('test') {
Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,19 @@
1-
package com.jinwei.S8_dsw_Mongotemplate_CDUR;public class CACert {
2-
}
1+
package com.jinwei.S8_dsw_Mongotemplate_CDUR;
2+
3+
import com.fasterxml.jackson.annotation.JsonFormat;
4+
import lombok.Data;
5+
import lombok.ToString;
6+
import lombok.experimental.Accessors;
7+
8+
import java.util.Date;
9+
10+
@Data // lombok-set-get
11+
@ToString // lombok-tostring
12+
@Accessors(chain = true) // lombok-链式编程开启
13+
public class CACert {
14+
private String content;
15+
private String description;
16+
17+
@JsonFormat( pattern ="yyyy-MM-dd", timezone ="GMT+8")
18+
private Date registerDay;
19+
}
Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,23 @@
1-
package com.jinwei.S8_dsw_Mongotemplate_CDUR;public class Connector {
2-
}
1+
package com.jinwei.S8_dsw_Mongotemplate_CDUR;
2+
3+
import com.fasterxml.jackson.annotation.JsonFormat;
4+
import lombok.Data;
5+
import lombok.ToString;
6+
import lombok.experimental.Accessors;
7+
import org.springframework.data.mongodb.core.mapping.MongoId;
8+
import java.util.Date;
9+
10+
@Data // ombok-自动构建-get、set、equals、hashCode、canEqual、toString等方法
11+
@ToString // lombok-自动构建-ToString
12+
@Accessors(chain = true) // lombok-链式编程
13+
public class Connector {
14+
@MongoId
15+
private String id; // 使用注解 MongoID可以更清晰地指定 _id主键
16+
private String description;
17+
@JsonFormat( pattern ="yyyy-MM-dd", timezone ="GMT+8")
18+
private Date loginDay;
19+
@JsonFormat( pattern ="yyyy-MM-dd", timezone ="GMT+8")
20+
private Date registerDay;
21+
// CA certification
22+
private CACert caCert; // 链式编程
23+
}
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,95 @@
1-
package com.jinwei.S8_dsw_Mongotemplate_CDUR;public class CreateCollectionService {
1+
package com.jinwei.S8_dsw_Mongotemplate_CDUR;
2+
3+
import jakarta.annotation.Resource;
4+
import org.springframework.data.mongodb.core.CollectionOptions;
5+
import org.springframework.data.mongodb.core.MongoTemplate;
6+
import org.springframework.data.mongodb.core.query.Criteria;
7+
import org.springframework.data.mongodb.core.query.CriteriaDefinition;
8+
import org.springframework.data.mongodb.core.validation.Validator;
9+
import org.springframework.stereotype.Service;
10+
//import javax.annotation.Resource;
11+
12+
@Service
13+
public class CreateCollectionService {
14+
15+
@Resource
16+
private MongoTemplate mongoTemplate;
17+
18+
/**
19+
* 创建【集合】
20+
*
21+
* 创建一个大小没有限制的集合(默认集合创建方式)
22+
*
23+
* @return 创建集合的结果
24+
*/
25+
public Object createCollection() {
26+
// 设置集合名称
27+
String collectionName = "users1";
28+
// 创建集合并返回集合信息
29+
mongoTemplate.createCollection(collectionName);
30+
// 检测新的集合是否存在,返回创建结果
31+
return mongoTemplate.collectionExists(collectionName) ? "创建视图成功" : "创建视图失败";
32+
}
33+
34+
/**
35+
* 创建【固定大小集合】
36+
*
37+
* 创建集合并设置 `capped=true` 创建 `固定大小集合`,可以配置参数 `size` 限制文档大小,可以配置参数 `max` 限制集合文档数量。
38+
*
39+
* @return 创建集合的结果
40+
*/
41+
public Object createCollectionFixedSize() {
42+
// 设置集合名称
43+
String collectionName = "users2";
44+
// 设置集合参数
45+
long size = 1024L;
46+
long max = 5L;
47+
// 创建固定大小集合
48+
CollectionOptions collectionOptions = CollectionOptions.empty()
49+
// 创建固定集合。固定集合是指有着固定大小的集合,当达到最大值时,它会自动覆盖最早的文档。
50+
.capped()
51+
// 固定集合指定一个最大值,以千字节计(KB),如果 capped 为 true,也需要指定该字段。
52+
.size(size)
53+
// 指定固定集合中包含文档的最大数量。
54+
.maxDocuments(max);
55+
// 执行创建集合
56+
mongoTemplate.createCollection(collectionName, collectionOptions);
57+
// 检测新的集合是否存在,返回创建结果
58+
return mongoTemplate.collectionExists(collectionName) ? "创建视图成功" : "创建视图失败";
59+
}
60+
61+
/**
62+
* 创建【验证文档数据】的集合
63+
*
64+
* 创建集合并在文档"插入"与"更新"时进行数据效验,如果符合创建集合设置的条件就进允许更新与插入,否则则按照设置的设置的策略进行处理。
65+
*
66+
* * 效验级别:
67+
* - off:关闭数据校验。
68+
* - strict:(默认值) 对所有的文档"插入"与"更新"操作有效。
69+
* - moderate:仅对"插入"和满足校验规则的"文档"做"更新"操作有效。对已存在的不符合校验规则的"文档"无效。
70+
* * 执行策略:
71+
* - error:(默认值) 文档必须满足校验规则,才能被写入。
72+
* - warn:对于"文档"不符合校验规则的 MongoDB 允许写入,但会记录一条告警到 mongod.log 中去。日志内容记录报错信息以及该"文档"的完整记录。
73+
*
74+
* @return 创建集合结果
75+
*/
76+
public Object createCollectionValidation() {
77+
// 设置集合名称
78+
String collectionName = "users3";
79+
// 设置验证条件,只允许岁数大于20的用户信息插入
80+
CriteriaDefinition criteria = Criteria.where("age").gt(20);
81+
// 设置集合选项验证对象
82+
CollectionOptions collectionOptions = CollectionOptions.empty()
83+
.validator(Validator.criteria(criteria))
84+
// 设置效验级别
85+
.strictValidation()
86+
// 设置效验不通过后执行的动作
87+
.failOnValidationError();
88+
// 执行创建集合
89+
mongoTemplate.createCollection(collectionName, collectionOptions);
90+
// 检测新的集合是否存在,返回创建结果
91+
return mongoTemplate.collectionExists(collectionName) ? "创建集合成功" : "创建集合失败";
92+
}
93+
294
}
95+

S8-dsw-Mongotemplate-CDUR/S8-dsw-Mongotemplate-CDUR/src/main/java/com/jinwei/S8_dsw_Mongotemplate_CDUR/S8DswMongotemplateCdurApplication.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,5 @@ public static void main(String[] args) {
1111
}
1212

1313
}
14+
15+

handsonDoc/DSW011-MongoDB-REST-Mongotemplate-CDUR.md

Lines changed: 77 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,4 +112,80 @@ spring.data.mongodb.uri=mongodb://127.0.0.1:27017/c_db2
112112

113113
## 创建实体类:Connector
114114

115-
代码:
115+
代码:com/jinwei/S8_dsw_Mongotemplate_CDUR/Connector.java
116+
117+
```java
118+
package com.jinwei.S8_dsw_Mongotemplate_CDUR;
119+
120+
import com.fasterxml.jackson.annotation.JsonFormat;
121+
import lombok.Data;
122+
import lombok.ToString;
123+
import lombok.experimental.Accessors;
124+
import org.springframework.data.mongodb.core.mapping.MongoId;
125+
import java.util.Date;
126+
127+
@Data // ombok-自动构建-get、set、equals、hashCode、canEqual、toString等方法
128+
@ToString // lombok-自动构建-ToString
129+
@Accessors(chain = true) // lombok-链式编程
130+
public class Connector {
131+
@MongoId
132+
private String id; // 使用注解 MongoID可以更清晰地指定 _id主键
133+
private String description;
134+
@JsonFormat( pattern ="yyyy-MM-dd", timezone ="GMT+8")
135+
private Date loginDay;
136+
@JsonFormat( pattern ="yyyy-MM-dd", timezone ="GMT+8")
137+
private Date registerDay;
138+
// CA certification
139+
private CACert caCert; // 链式编程
140+
}
141+
```
142+
143+
## 创建实体类-链式编程类:Connector-CACert
144+
145+
代码:com/jinwei/S8_dsw_Mongotemplate_CDUR/CACert.java
146+
147+
```java
148+
package com.jinwei.S8_dsw_Mongotemplate_CDUR;
149+
150+
import com.fasterxml.jackson.annotation.JsonFormat;
151+
import lombok.Data;
152+
import lombok.ToString;
153+
import lombok.experimental.Accessors;
154+
155+
import java.util.Date;
156+
157+
@Data // lombok-set-get
158+
@ToString // lombok-tostring
159+
@Accessors(chain = true) // lombok-链式编程开启
160+
public class CACert {
161+
private String content;
162+
private String description;
163+
164+
@JsonFormat( pattern ="yyyy-MM-dd", timezone ="GMT+8")
165+
private Date registerDay;
166+
}
167+
```
168+
169+
## 创建服务类:Connector-CACert
170+
171+
代码:com/jinwei/S8_dsw_Mongotemplate_CDUR/CACert.java
172+
173+
```java
174+
175+
```
176+
177+
178+
179+
180+
181+
182+
183+
184+
185+
186+
187+
188+
189+
190+
191+

0 commit comments

Comments
 (0)