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等方法,能够满足我们最基本的查询
    }
相关推荐
wn53112 分钟前
【Go - 类型断言】
服务器·开发语言·后端·golang
bjzhang7522 分钟前
SpringBoot开发——集成Tess4j实现OCR图像文字识别
spring boot·ocr·tess4j
flying jiang27 分钟前
Spring Boot 入门面试五道题
spring boot
小菜yh28 分钟前
关于Redis
java·数据库·spring boot·redis·spring·缓存
希冀12336 分钟前
【操作系统】1.2操作系统的发展与分类
后端
GoppViper1 小时前
golang学习笔记29——golang 中如何将 GitHub 最新提交的版本设置为 v1.0.0
笔记·git·后端·学习·golang·github·源代码管理
爱上语文2 小时前
Springboot的三层架构
java·开发语言·spring boot·后端·spring
荆州克莱2 小时前
springcloud整合nacos、sentinal、springcloud-gateway,springboot security、oauth2总结
spring boot·spring·spring cloud·css3·技术
serve the people2 小时前
springboot 单独新建一个文件实时写数据,当文件大于100M时按照日期时间做文件名进行归档
java·spring boot·后端
罗政8 小时前
[附源码]超简洁个人博客网站搭建+SpringBoot+Vue前后端分离
vue.js·spring boot·后端