【MongoDB】MongoDB的Java API及Spring集成(Spring Data)
文章目录
- Java API
- Spring 集成
- 1. 添加依赖
- 2. 配置 MongoDB
- 3. 创建实体类
- 4. 创建 Repository 接口
- 5. 创建 Service 类
- 6. 创建 Controller 类
- 7. 启动 Spring Boot 应用
- 8. 测试你的 API
更多相关内容可查看
Java API
maven
<dependency>
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.12.6</version>
</dependency>
调用代码
private static final String MONGO_HOST = "xxx.xxx.xxx.xxx";
private static final Integer MONGO_PORT = 27017;
private static final String MONGO_DB = "testdb";
public static void main(String args[]) {
try {
// 连接到 mongodb 服务
MongoClient mongoClient = new MongoClient(MONGO_HOST, MONGO_PORT);
// 连接到数据库
MongoDatabase mongoDatabase = mongoClient.getDatabase(MONGO_DB);
System.out.println("Connect to database successfully");
// 创建Collection
mongoDatabase.createCollection("test");
System.out.println("create collection");
// 获取collection
MongoCollection<Document> collection = mongoDatabase.getCollection("test");
// 插入document
Document doc = new Document("name", "MongoDB")
.append("type", "database")
.append("count", 1)
.append("info", new Document("x", 203).append("y", 102));
collection.insertOne(doc);
// 统计count
System.out.println(collection.countDocuments());
// query - first
Document myDoc = collection.find().first();
System.out.println(myDoc.toJson());
// query - loop all
MongoCursor<Document> cursor = collection.find().iterator();
try {
while (cursor.hasNext()) {
System.out.println(cursor.next().toJson());
}
} finally {
cursor.close();
}
} catch (Exception e) {
System.err.println(e.getClass().getName() + ": " + e.getMessage());
}
}
Spring 集成
Spring runtime体系图
Spring Data是基于Spring runtime体系的
Spring Data MongoDB 是 Spring Data 项目的一部分,用于简化与 MongoDB 的交互。通过 Spring Data MongoDB,我们可以轻松地将 MongoDB 数据库的操作与 Spring 应用集成,并且能够以声明式的方式进行数据访问,而无需直接编写大量的 MongoDB 操作代码。
官方文档地址:https://docs.spring.io/spring-data/mongodb/docs/3.0.3.RELEASE/reference/html/#mongo.core
- 引入mongodb-driver, 使用最原生的方式通过Java调用mongodb提供的Java driver;
- 引入spring-data-mongo, 自行配置使用spring data 提供的对MongoDB的封装 使用MongoTemplate 的方式 使用MongoRespository 的方式
- 引入spring-data-mongo-starter, 采用spring autoconfig机制自动装配,然后再使用MongoTemplate或者MongoRespository方式
具体代码如下:
以下是一个使用 Spring Data MongoDB 的基本示例,展示了如何将 MongoDB 集成到 Spring Boot 应用中,执行 CRUD 操作。
1. 添加依赖
首先,在 pom.xml
文件中添加 Spring Data MongoDB 相关的依赖:
<dependencies>
<!-- Spring Boot Starter Web, 用于构建 RESTful API -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!-- Spring Boot Starter Data MongoDB, 用于集成 MongoDB -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
<!-- Spring Boot Starter Test, 用于测试 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 其他依赖 -->
</dependencies>
2. 配置 MongoDB
在 application.properties
或 application.yml
文件中配置 MongoDB 数据源信息。假设你在本地运行 MongoDB,连接信息如下:
# application.properties 示例
spring.data.mongodb.uri=mongodb://localhost:27017/mydb
你也可以单独指定 host
、port
和 database
,如下所示:
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=mydb
3. 创建实体类
定义一个实体类,并使用 @Document
注解标注它为 MongoDB 文档。Spring Data MongoDB 会将此类映射到 MongoDB 中的集合。
package com.example.mongodb.model;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
@Document(collection = "users") // 指定 MongoDB 中集合的名称
public class User {
@Id // 标注主键
private String id;
private String name;
private String email;
// 构造方法、Getter 和 Setter
public User() {}
public User(String name, String email) {
this.name = name;
this.email = email;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
4. 创建 Repository 接口
Spring Data MongoDB 提供了 MongoRepository
接口,你可以通过扩展该接口来定义自己的数据访问层。MongoRepository
提供了很多默认的方法,比如 save()
、findById()
、findAll()
等。
package com.example.mongodb.repository;
import com.example.mongodb.model.User;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;
@Repository
public interface UserRepository extends MongoRepository<User, String> {
// 你可以根据需要定义自定义查询方法
User findByName(String name);
}
5. 创建 Service 类
Service 层将调用 Repository 层进行数据操作。
package com.example.mongodb.service;
import com.example.mongodb.model.User;
import com.example.mongodb.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class UserService {
private final UserRepository userRepository;
@Autowired
public UserService(UserRepository userRepository) {
this.userRepository = userRepository;
}
// 保存一个用户
public User saveUser(User user) {
return userRepository.save(user);
}
// 根据用户名查询用户
public User findByName(String name) {
return userRepository.findByName(name);
}
// 获取所有用户
public Iterable<User> findAllUsers() {
return userRepository.findAll();
}
// 删除一个用户
public void deleteUser(String userId) {
userRepository.deleteById(userId);
}
}
6. 创建 Controller 类
Controller 层暴露 RESTful API,以便客户端能够与系统交互。
package com.example.mongodb.controller;
import com.example.mongodb.model.User;
import com.example.mongodb.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
@RestController
@RequestMapping("/users")
public class UserController {
private final UserService userService;
@Autowired
public UserController(UserService userService) {
this.userService = userService;
}
// 创建用户
@PostMapping
public User createUser(@RequestBody User user) {
return userService.saveUser(user);
}
// 根据用户名查询用户
@GetMapping("/{name}")
public User getUserByName(@PathVariable String name) {
return userService.findByName(name);
}
// 获取所有用户
@GetMapping
public Iterable<User> getAllUsers() {
return userService.findAllUsers();
}
// 删除用户
@DeleteMapping("/{id}")
public void deleteUser(@PathVariable String id) {
userService.deleteUser(id);
}
}
7. 启动 Spring Boot 应用
确保你有一个运行中的 MongoDB 实例,并且配置了连接属性。
接下来,可以启动你的 Spring Boot 应用:
package com.example.mongodb;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
@SpringBootApplication
public class MongoApplication {
public static void main(String[] args) {
SpringApplication.run(MongoApplication.class, args);
}
}
8. 测试你的 API
启动应用后,你可以使用 Postman 或其他 HTTP 客户端来测试你的 API。
- POST
/users
:创建用户 - GET
/users/{name}
:根据用户名查询用户 - GET
/users
:获取所有用户 - DELETE
/users/{id}
:根据 ID 删除用户
以上一个简单的MongoDB使用就完善了,在业务中更多的也是如此的CRUD,后续文章会写一些关于MongoDB的底层原理,毕竟面试要造火箭