springboot中使用mongodb进行简单的查询

文章目录

引言

应用程序中,通常会使用两种数据库,一种是关系型数据库如mysql等,另一种则是非关系型数据库例如mongodb,今天我们就来讲一讲如何在springboot中使用mongodb。

依赖

xml 复制代码
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

配置文件

这里配置的单点

yaml 复制代码
spring:
  data:
    mongodb:
      username: calculate
      password: 1234calculate
      host: 120.79.128.190
      port: 27017
      database: data_db

代码编写

1、实体类

这里新建了一个新闻类的实体来做出说明

java 复制代码
@Data
@Document(value = "test")
public class NewsMg {

	@Id
	private 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;
}
  1. @Document注解
    这是第一个核心注解,mongodb中我们不是以表来指明,而是以文档,而这个注解最核心的就是collection或者是value,例如 @Document(value = "news"),这里注解在实体类上,表示将此实体类标注为文档类型,并且文档名为news,当然也可以不用使用这个文档名,后续会讲解
  2. @Field(value = "vol")
    这个和@TableField一样,指定是一个字段
  3. @Id
    这个注解会指定mongodb的id,插入文档时会自动生成这个id
  4. 无需注意字段的类型,这里通过springboot会自动把字段映射到我们的实体上

2、使用repository查询

我们只需要继承接口MongoRepository<T,ID>接口即可

java 复制代码
/**
 * 使用注解@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查询

相比上一个查询,这里的查询操作就稍微显得繁琐一点了

java 复制代码
	/**
	 * 注入bean 
	 */
	 @Resource
	 private MongoTemplate mongoTemplate;
	 
	 public List<RealtimeOrder> queryAfter(Long time) {
	 	// 表名,也可以不用指定
        String tableName = "table_name";
		// 构造查询条件,这里where是字段名,后续可以跟is/gt/lt等全等比较条件
		// 如果还有字段,可以使用and(字段名)或者or(字段名)继续追加条件
		Criteria criteria = Criteria.where("字段名").gte(time);
		// 构造Query
		Query 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中的集合名,这里就是 test
		mongoTemplate.find(Query.query(criteria), NewsMg.class);
       	// 还有 findOne、findAll、count等方法,能够满足我们最基本的查询
    }
相关推荐
Javashop_jjj22 分钟前
三勾软件| 用SpringBoot+Element-UI+UniApp+Redis+MySQL打造的点餐连锁系统
spring boot·ui·uni-app
间彧35 分钟前
Windows Server,如何使用WSFC+nginx实现集群故障转移
后端
间彧41 分钟前
Nginx + Keepalived 实现高可用集群(Linux下)
后端
间彧42 分钟前
在Kubernetes中如何部署高可用的Nginx Ingress Controller?
后端
间彧44 分钟前
Ribbon负载均衡器和Nginx负载均衡器有什么区别
后端
PHP源码1 小时前
SpringBoot校园二手商城系统
java·spring boot·springboot二手商城·java校园二手商城系统
间彧1 小时前
Nacos详解与项目实战
后端
间彧1 小时前
nginx、网关Gateway、Nacos、多个服务实例之间的数据链路详解
后端
间彧1 小时前
Nacos与Eureka在性能上有哪些具体差异?
后端
间彧1 小时前
详解Nacos健康状态监测机制
后端