Mongo-SpringBoot集成
Mongo 集成 SpringBoot
开发环境配置如下👇
框架 | 版本 |
---|---|
SpringBoot | 2.5.4 |
mongodb | 5.0.2 |
spring-boot-starter-data-mongodb | 2.5.4 |
导入 pom 文件
我们想要在 SpringBoot 中集成 mongo,第一步☝️就是导入相应的 pom 文件
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
配置文件
spring:
data:
# mongodb 配置
mongodb:
database: xxx
host: 127.0.0.1
port: 27017
开启注解
@EnableMongoRepositories(basePackages = "xx.xxx.xxx")
因为使用了 Spring-data 框架,所以需要开启注解扫描 Repository 类
编写对应的 JavaBean
先定义一个 JavaBean 类,指定集合名称
@Data
@Document("entries")
// 为序列化中的属性选择命名策略
// 所有字母均为小写,并在名称元素之间使用下划线作为分隔符
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
public class Entry {
@Id
private String id;
private String title;
private String link;
@Field("image_url")
private String imageUrl;
@Field("icon_url")
private String iconUrl;
@Field("title_color")
private String titleColor;
private String description;
private int price;
@Field("is_in_serving")
private String isInServing;
}
创建 Repository
Spring Data 的强大之处,就在于你不用写任何DAO处理,自动根据方法名或类的信息进行CRUD操作。只要你定义一个接口,然后继承Repository提供的一些子接口,就能具备各种基本的CRUD功能
@Repository
public interface EntryRepository extends CrudRepository<Entry, String> {
}
mongoTemplate API 方法大全
Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库。本文介绍使用Spring Data MongoDB来访问mongodb数据库的几种方法:
- 使用Query和Criteria类
- JPA自动生成的查询方法
- 使用@Query 注解基于JSON查询
使用Spring Data来查询MongoDB的最常用方法之一是使用
Query
和Criteria
类
is 查询
在以下示例中 - 我们正在寻找 title 名为 果蔬生菜 的数据
Query query = new Query();
query.addCriteria(Criteria.where("title").is("果蔬生菜"));
List<Entry> entrys = mongoTemplate.find(query, Entry.class);
模糊查询 - 正则
在以下示例中 - 我们正在寻找 title、和 description 中带有 早餐 的数据
//模糊匹配
Pattern pattern = Pattern.compile(".*?早餐.*?");
query.addCriteria(Criteria.where("")
.orOperator(Criteria.where("title").regex(pattern),Criteria.where("description").regex(pattern)));
List<Entry> entrys = mongoTemplate.find(query, Entry.class);
LT和GT
$ lt(小于)运算符和$ gt(大于)
举个🌰 - 查找价格在 100 ~ 500 之间的数据
Query query = new Query();
query.addCriteria(Criteria.where("price").lt(100).gt(500));
List<Entry> users = mongoTemplate.find(query, Entry.class);
结果排序
Sort 用于指定结果的排序顺序
在以下示例中 - 根据价格来排序
Query query = new Query();
query.with(new Sort(Sort.Direction.ASC, "price"));
List<Entry> entrys = mongoTemplate.find(query, Entry.class);
分页
一个使用分页的简单例子 - 每页显示 5 条数据,且根据价格排序
// 排序
Sort sort = new Sort(Sort.Direction.ASC, "price")
Pageable pageableRequest = new PageRequest(0, 5, sort);
Query query = new Query();
query.with(pageableRequest);
List<Entry> entrys = mongoTemplate.find(query, Entry.class);
Repository 使用
生成查询方法是JPA的一个特性,在Spring Data Mongodb里也可以使用
FindByX
通过 title 查找,只需要在接口上声明方法即可
@Repository
public interface EntryRepository extends CrudRepository<Entry, String> {
List<Entry> findByTitle(String title);
}
StartingWith and endingWith
List<Entry> findByTitleStartingWith(String regexp);
List<Entry> findByTitleEndingWith(String regexp);
Between
类似价格区间查询我们可以使用 Between :
List<Entry> findByPriceBetween(int minPrice, int maxPrice);
List<Entry> entrys = entryRepository.findByPriceBetween(100, 500);
Like和OrderBy
示例 - 我们将要查找 title 中包含 早餐 的所有数据,我们也将按 价格 顺序排列结果:
List<Entry> entrys = entryRepository.findByTitleLikeOrderByPriceAsc("早餐");
原始查询
使用@Query注解 - 我们可以指定一个原始查询 - 作为一个Mongo JSON查询字符串
FindBy
@Query("{ 'title' : ?0 }")
List<Entry> findEntryByTitle(String title);
$regex
正则表达式驱动的查询
@Query("{ 'title' : { $regex: ?0 } }")
List<Entry> findEntryByRegexpTitle(String regexp);