文章目录
- 引言
- 依赖
- 配置文件
- 代码编写
- 1、实体类
- 2、使用repository查询
- 3、使用MongoTemplate查询
引言
应用程序中,通常会使用两种数据库,一种是关系型数据库如mysql等,另一种则是非关系型数据库例如mongodb,今天我们就来讲一讲如何在springboot中使用mongodb。
依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId></dependency>
配置文件
这里配置的单点
spring:data:mongodb:username: calculatepassword: 1234calculatehost: 120.79.128.190port: 27017database: data_db
代码编写
1、实体类
这里新建了一个新闻类的实体来做出说明
@Data
@Document(value = "test")
public class NewsMg {@Idprivate String id;/*** 标题*/@Field(value = "title")private String title;/*** 分类*/@Field(value = "news_type")private String type;/*** 描述*/@Field(value = "abstract")private String describe;/*** 链接*/@Field(value = "link")private String link;/*** 来源*/@Field(value = "source")private String source;/*** 作者*/@Field(value = "author")private String author;/*** 发表时间*/@Field(value = "date")private Long resourceTime;/*** 重要性*/@Field(value = "importance")private String importance;
}
- @Document注解
这是第一个核心注解,mongodb中我们不是以表来指明,而是以文档,而这个注解最核心的就是collection或者是value,例如 @Document(value = “news”),这里注解在实体类上,表示将此实体类标注为文档类型,并且文档名为news,当然也可以不用使用这个文档名,后续会讲解 - @Field(value = “vol”)
这个和@TableField一样,指定是一个字段 - @Id
这个注解会指定mongodb的id,插入文档时会自动生成这个id - 无需注意字段的类型,这里通过springboot会自动把字段映射到我们的实体上
2、使用repository查询
我们只需要继承接口MongoRepository<T,ID>接口即可
/*** 使用注解@Repository* 继承后实体类和主键类型*/
@Repository
public interface newsRepository extents MongoRepository<NewsMg,String>{/*** 通过id列表查找所有*/List<NewsMg> getAllByIdIn(List<String> ids);/*** 通过id查找*/NewsMg findById(String id);
}
这里可以使用很多,例如 findByXXInORYY(List XX, String YY),可以通过OR和AND连接条件,当然也可以使用注解 @Aggregation(pipeline={})直接写查询语句来实现复杂的查询
但是复杂查询也可以通过下面方式进行查询
3、使用MongoTemplate查询
相比上一个查询,这里的查询操作就稍微显得繁琐一点了
/*** 注入bean */@Resourceprivate MongoTemplate mongoTemplate;public List<RealtimeOrder> queryAfter(Long time) {// 表名,也可以不用指定String tableName = "table_name";// 构造查询条件,这里where是字段名,后续可以跟is/gt/lt等全等比较条件// 如果还有字段,可以使用and(字段名)或者or(字段名)继续追加条件Criteria criteria = Criteria.where("字段名").gte(time);// 构造QueryQuery query = Query.query(criteria);// 这里query还可以追加排序等操作// 例如 query.with(Sort.by(Sort.Order.desc("date")))// limit, query.limit(查询条数)// query.addCriteria() 再次追加查询条件// 查询 使用mongoTemplate的方法// 查询所有mongoTemplate.find(Query.query(criteria), NewsMg.class, tableName);// 不指定表名则直接查询实体类注解Document中的集合名,这里就是 testmongoTemplate.find(Query.query(criteria), NewsMg.class);// 还有 findOne、findAll、count等方法,能够满足我们最基本的查询}