1、创建SpringBoot工程
通过idea创建SpringBoot 工程,并添加一下pom依赖。
1<?xml version="1.0" encoding="UTF-8"?>
2<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
4 <modelVersion>4.0.0</modelVersion>
5 <parent>
6 <groupId>org.springframework.boot</groupId>
7 <artifactId>spring-boot-starter-parent</artifactId>
8 <version>2.6.6</version>
9 <relativePath/> <!-- lookup parent from repository -->
10 </parent>
11 <groupId>com.mongodb</groupId>
12 <artifactId>spring-mongodb-example</artifactId>
13 <version>0.0.1-SNAPSHOT</version>
14 <name>spring-mongodb-example</name>
15 <description>spring-mongodb-example</description>
16 <properties>
17 <java.version>1.8</java.version>
18 </properties>
19 <dependencies>
20 <dependency>
21 <groupId>org.springframework.boot</groupId>
22 <artifactId>spring-boot-starter-data-mongodb</artifactId>
23 </dependency>
24 <dependency>
25 <groupId>org.springframework.boot</groupId>
26 <artifactId>spring-boot-starter-web</artifactId>
27 </dependency>
28
29 <dependency>
30 <groupId>com.alibaba</groupId>
31 <artifactId>fastjson</artifactId>
32 <version>1.2.80</version>
33 </dependency>
34
35 <dependency>
36 <groupId>org.projectlombok</groupId>
37 <artifactId>lombok</artifactId>
38 <optional>true</optional>
39 </dependency>
40 <dependency>
41 <groupId>org.springframework.boot</groupId>
42 <artifactId>spring-boot-starter-test</artifactId>
43 <scope>test</scope>
44 </dependency>
45 </dependencies>
46
47 <build>
48 <plugins>
49 <plugin>
50 <groupId>org.springframework.boot</groupId>
51 <artifactId>spring-boot-maven-plugin</artifactId>
52 <configuration>
53 <excludes>
54 <exclude>
55 <groupId>org.projectlombok</groupId>
56 <artifactId>lombok</artifactId>
57 </exclude>
58 </excludes>
59 </configuration>
60 </plugin>
61 </plugins>
62 </build>
63
64</project>
2、在工程配置文件中,增加mongodb地址信息,这里使用的是mongodb的云服务Atlas.
1# 登录用户所在的数据库
2# 数据库的url地址
3spring.data.mongodb.uri=mongodb+srv://julywhj:<password>@cluster0.r1o1v.mongodb.net/test
这里的地址可以直接通过云平台获取,可以参考(1条消息) MongoDB教程(一):MongoDB云服务免费开通_July_whj的博客-CSDN博客中信息查看。
3、编写Controller测试类
1/**
2 * @author JulyWhj
3 */
4@RestController
5@RequestMapping("/mongodbExample")
6public class MongodbExampleController {
7 @Autowired
8 private MongoTemplate mongoTemplate;
9
10 /**
11 * 查询全部 CollectionNames 名称
12 *
13 * @return
14 */
15 @GetMapping("/getCollectionNames")
16 public R getCollectionNames() {
17 return R.of(mongoTemplate.getCollectionNames());
18 }
19
20 /**
21 * 创建订单数据
22 *
23 * @param orderModel
24 * @return
25 */
26 @PostMapping("/createOrder")
27 public R createOrder(@RequestBody OrderModel orderModel) {
28 OrderModel order = mongoTemplate.save(orderModel, "order");
29 return R.of(order);
30 }
31
32 /**
33 * 更新订单数据
34 *
35 * @param orderModel
36 * @return
37 */
38 @PostMapping("/updateOrder")
39 public R updateOrder(@RequestBody OrderModel orderModel) {
40 Query query = new Query();
41 query.addCriteria(Criteria.where("_id").is(orderModel.getId()));
42 Update update = new Update();
43 update.set("materialName", orderModel.getMaterialName());
44 UpdateResult order = mongoTemplate.upsert(query, update, OrderModel.class, "order");
45 return R.of(order);
46 }
47
48 /**
49 * 根据ID查询数据
50 *
51 * @param id id
52 * @return
53 */
54 @GetMapping("/findById")
55 public R findById(BigInteger id) {
56 OrderModel order = mongoTemplate.findById(id, OrderModel.class, "order");
57 return R.of(order);
58 }
59
60 /**
61 * 根据ID删除数据
62 *
63 * @param id id
64 * @return
65 */
66 @DeleteMapping
67 public R deleteById(BigInteger id) {
68 Query query = new Query();
69 query.addCriteria(Criteria.where("_id").is(id));
70 DeleteResult order = mongoTemplate.remove(query, "order");
71 return R.of(order);
72 }
73}
这里引用了订单的Model信息,
1@Data
2public class OrderModel implements Serializable {
3 @Id
4 private BigInteger id;
5 /**
6 * 销售订单编号
7 */
8 private String orderNo;
9 /**
10 *
11 */
12 private Integer orderStatus;
13
14 private Long saleUserId;
15 /**
16 * 收货方企业id
17 */
18 private Long recipientId;
19 /**
20 * 订单来源,字典值:1官网 2 第三方导入 3 系统对接
21 */
22 private String orderSource;
23 /**
24 * 供应商企业id(乙方)
25 */
26 private Long supplierId;
27 /**
28 * 金额
29 */
30 private BigDecimal amount;
31 /**
32 * 税额
33 */
34 private Double taxAmount;
35 /**
36 * 订单扩展字段
37 */
38 private JSONObject saleOrderExpandJson;
39 /**
40 * 物料编号
41 */
42 private String materialId;
43 /**
44 * 物料名称
45 */
46 private String materialName;
47 /**
48 * 销售数量
49 */
50 private String saleNumber;
51 /**
52 * 计价单位
53 */
54 private String priceUnit;
55 /**
56 * 计价数量
57 */
58 private BigDecimal priceUnitQty;
59 /**
60 * 单价
61 */
62 private BigDecimal price;
63 /**
64 * 含税单价
65 */
66 private BigDecimal taxPrice;
67 /**
68 * 是否赠品
69 */
70 private String isFree;
71 /**
72 * 金额
73 */
74 private BigDecimal billAmount;
75 /**
76 * 小计
77 */
78 private Double subtotal;
79 /**
80 * 到货时间
81 */
82 private Date arrivalTime;
83 /**
84 * 物料扩展字段
85 */
86 private JSONObject expandJson;
87}
返回对象R
1@Data
2public class R {
3 private int code;
4 private String msg;
5 private Object data;
6
7 public static R of(Object data) {
8 R r = new R();
9 r.code = 200;
10 r.msg = "操作成功";
11 r.data = data;
12 return r;
13 }
14}
至此,我们需要测试的编码已经完成,我们提前准备了一条数据,数据结构如下:
1{
2 "id": 2460,
3 "orderNo": "XSDD-20220329-0044",
4 "saleOrderExpandJson": {
5 "isManufactureOrder": true,
6 "grossProfitMargin": 27,
7 "storageQuantity": 2650,
8 "estimatedCosts": 73.4,
9 "recipientAddress": "江苏省盐城东台测试地址1",
10 "waitingDeliveryQuantity": 100,
11 "spec": "500*400*300",
12 "orderQuantity": 100
13 },
14 "materialId": "48",
15 "materialName": "阀门包装3.0",
16 "isFree": "否",
17 "arrivalTime": "2022-03-28T16:00:00.000+00:00",
18 "expandJson": {
19 "isManufactureOrder": true,
20 "grossProfitMargin": 27,
21 "storageQuantity": 2650,
22 "estimatedCosts": 73.4,
23 "recipientAddress": "江苏省盐城东台测试地址1",
24 "waitingDeliveryQuantity": 100,
25 "spec": "500*400*300",
26 "orderQuantity": 100
27 }
28}
启动服务,进行简单测试:
screenshot-20220409-092327
首先我们看下testdb中存在的Collection;
screenshot-20220409-092448
我们登陆客户端工具验证下:
screenshot-20220409-092529
OK,我们进行创建数据:
no-data
我们看到开始order中没有数据存在,我们调用create接口,插入数据:
可以看到数据插入成功了,我们在通过客户端验证下
更新数据:
update
update-ok
数据更新成功,根据ID查询这里不过多说明。
删除数据:
delete
我们根据ID将刚刚插入的数据已经删除,看到执行了1条数据的删除。
SpringBoot 整合 MongoDB进行简单的增删改查操作是非常简单的,后续为大家持续更新MongoDB更多高级的查询和原理。