MongoDB
是一个面向文档的数据库管理系统,它是一个介于关系型数据库和非关系型数据库之间的产品,支持一种类似 JSON
的 BSON
数据格式,既可以存储简单的数据格式,也可以存储复杂的数据类型。MongoDB
最大的特点是它支持的查询语言非常强大,并且还支持对数据建立索引。借助于 Spring Data MongoDB
, SpringBoot 为 MongoDB
也提供了开箱即用的自动化配置方案,具体配置步骤如下:
- 添加依赖
<!-- MongoDB -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
- 在
application.properties
中配置MongoDB
的连接信息,代码如下:
### MongoDB
# 验证登录信息的库
spring.data.mongodb.authentication-database=admin
# 要连接的库,认证信息不一定要在连接的库中创建,因此这两个分开配置
spring.data.mongodb.database=test
spring.data.mongodb.host=192.168.0.1
spring.data.mongodb.port=27017
spring.data.mongodb.username=scott
spring.data.mongodb.password=scott
- 创建实体类
public class Book {
private Integer bookId;
private String name;
private String author;
private Float price;
private Date publicationDate;
// 省略 getter/setter
@Override
public String toString() {
return "Book { bookId: " + bookId + "; name: " + name + "; author: " + author
+ "; price: " + price + "; publicationDate: " + publicationDate + "}";
}
}
使用 MongoRepository
- 创建
BookDAO
import org.springframework.data.mongodb.repository.MongoRepository;
import xyz.ther.boot.pojo.Book;
import java.util.List;
public interface BookDAO extends MongoRepository<Book, Integer> {
List<Book> findByAuthorContains(String author);
Book findByNameEquals(String name);
}
MongoRepository
中已经预定义了针对实体类的查询、 添加、删除等操作。
- 创建
Controller
@RestController
public class BookController {
@Autowired
BookDAO bookDAO;
@GetMapping("/mongodbTest1")
public void mongodbTest1() {
List<Book> bookList = new ArrayList<>();
Book book1 = new Book();
book1.setBookId(1);
book1.setName("中文书");
book1.setAuthor("匿名");
bookList.add(book1);
Book book2 = new Book();
book2.setBookId(2);
book2.setName("中文书 2");
book2.setAuthor("匿名 2");
bookList.add(book2);
bookDAO.insert(bookList);
List<Book> bookList1 = bookDAO.findByAuthorContains("匿名");
System.out.println(bookList1);
Book returnBook = bookDAO.findByNameEquals("中文书");
System.out.println(returnBook);
}
}
- 测试结果
[Book { bookId: 1; name: 中文书; author: 匿名; price: null; publicationDate: null}, Book { bookId: 2; name: 中文书 2; author: 匿名 2; price: null; publicationDate: null}]
Book { bookId: 1; name: 中文书; author: 匿名; price: null; publicationDate: null}
使用 MongoTemplate
除了继承 MongoRepository
外, Spring Data MongoDB
还提供了 MongoTemplate
用来方便地操作 MongoDB
。在 Spring Boot 中,若添加了 MongoDB 相关的依赖 ,且开发者并没有提供 MongoTemplate
,则默认会有一个 MongoTemplate
注册到 Spring 容器中,相关配置源码在 MongoDataAutoConfiguration
类中 。因此,用户可以直接使用 MongoTemplate
,在 Controller 中直接注入 MongoTemplate
就可以使用了。
- 创建
Controller
@RestController
public class BookController {
@Autowired
MongoTemplate mongoTemplate;
@GetMapping("/mongodbTest2")
public void mongodbTest2() {
List<Book> bookList = new ArrayList<>();
Book book1 = new Book();
book1.setBookId(3);
book1.setName("英文书");
book1.setAuthor("Unknown");
bookList.add(book1);
Book book2 = new Book();
book2.setBookId(4);
book2.setName("英文书 2");
book2.setAuthor("Unknown 2");
bookList.add(book2);
mongoTemplate.insertAll(bookList);
List<Book> bookList1 = mongoTemplate.findAll(Book.class);
System.out.println(bookList1);
Book returnBook = mongoTemplate.findById("5e3a3924ef21ec46a0f33386", Book.class);
System.out.println(returnBook);
}
}
- 测试结果
[Book { bookId: 1; name: 中文书; author: 匿名; price: null; publicationDate: null}, Book { bookId: 2; name: 中文书 2; author: 匿名 2; price: null; publicationDate: null}, Book { bookId: 3; name: 英文书; author: Unknown; price: null; publicationDate: null}, Book { bookId: 4; name: 英文书 2; author: Unknown 2; price: null; publicationDate: null}]
Book { bookId: 1; name: 中文书; author: 匿名; price: null; publicationDate: null}