Spring Boot MongoDB 实现总结
一、引入数据源配置和依赖
<!-- MongoDb -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-mongodb</artifactId>
</dependency>
spring.data.mongodb.host=localhost
spring.data.mongodb.port=27017
spring.data.mongodb.database=Java
spring.jpa.show-sql=true
spring.data.jpa.repositories.enabled=truelogging.level.org.springframework.data.mongodb.core=DEBUG
二、Dao层实现
通过继承MongoRepository可实现简单常用的CURD方法,方法如下:
T为需要返回的类型,ID为主键类型
@NoRepositoryBean
public interface MongoRepository<T, ID> extends PagingAndSortingRepository<T, ID>, QueryByExampleExecutor<T> {<S extends T> List<S> saveAll(Iterable<S> var1);List<T> findAll();List<T> findAll(Sort var1);<S extends T> S insert(S var1);<S extends T> List<S> insert(Iterable<S> var1);<S extends T> List<S> findAll(Example<S> var1);<S extends T> List<S> findAll(Example<S> var1, Sort var2);
}
三、定义文档对象
packNum com.study.demo.entity;import com.study.demo.utils.UuidUtil;
import lombok.Data;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import org.springframework.data.mongodb.core.mapping.Field;import java.io.Serializable;
import java.util.Date;@Data
@Document(collection = "WIKI")
public class WikiInfo implements Serializable{private static final long serialVersionUID = 4565375579357105655L;@Id@Field("ID")private String id = UuidUtil.getId();@Field("TITLE")private String title;@Field("AUTHOR")private String author;@Field("URL")private String url;@Field("PUBLISH_TIME")private Date publishTime;@Field("CREATE_TIME")private Date createTime = new Date();}
四、复杂查询简单实现
对于复杂的一些条件,可以自定义方法(按照命名规范)或者自定义SQL(注解,Query等),例如下列定义的四个方法,通过属性+关键字+参数构造特殊方法
如:findByTitleLike 查询以findBy开头,意为通过什么查找,后接需要的属性名Title表示通过标题条件查找,后接Like,sql里为模糊匹配的意思,即按照Title字段值模糊匹配查询所有满足条件的信息。
参数列表:String title即为需要注入的值,如果需要分页,则增加参数PNumable,即可实现分页效果。
通过实现类PNumRequest构造PNumable对象:
PNumable pNumable = PNumRequest.of(pNum,size);
如果需要多个查询条件,可以用And、Or等关键字连接(如方法四,主要关键字见后文)
packNum com.study.demo.dao;import com.study.demo.entity.WikiInfo;
import org.springframework.data.domain.PNumable;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.stereotype.Repository;import java.util.Date;
import java.util.List;@Repository
public interface WikiInfoDao extends MongoRepository<WikiInfo, String> {/** 查询输入时间之前的数据 */List<WikiInfo> findByCreateTimeBefore(Date createTime);/** 查询所有信息通过标题模糊匹配 */List<WikiInfo> findByTitleLike(String title);/** 查询所有信息通过标题模糊匹配,分页查询 */List<WikiInfo> findByTitleLike(String title, PNumable pNumable);/** 查询输入所有作者ID在输入时间后的数据 */List<WikiInfo> findByIdInAndCreateTimeAfter(List<String> ids, Date createTime);
}
通过Controller简单访问,可查看结果和SQL 如:
2020-01-20 12:03:38.251 DEBUG 10848 --- [nio-9090-exec-5] o.s.data.mongodb.core.MongoTemplate : find using query: { "TITLE" : { "$regex" : "Java", "$options" : "" } } fields: Document{{}} for class: class com.study.demo.entity.WikiInfo in collection: WIKI
2020-01-20 12:04:06.055 DEBUG 10848 --- [nio-9090-exec-3] o.s.data.mongodb.core.MongoTemplate : find using query: { "_id" : { "$in" : ["58077516d06c40278c1ede771b4d3f9c", "15fb39d7f5ea4dd3a07c0b69e006384b"] }, "CREATE_TIME" : { "$gt" : { "$date" : 1578975086000 } } } fields: Document{{}} for class: class com.study.demo.entity.WikiInfo in collection: WIKI
五、相关关键字
KeyWord | sample | logical result |
---|---|---|
After(在某时间之后) | findByCreateTimeAfter | {“CreateTime”:{"$gt":createTime}} |
Before(在某时间之前) | findByCreateTimeBefore | {“CreateTime”:{"$lt":createTime}} |
GreaterThan(大于) | findByNumGreaterThan(int Num) | {“Num” : {"$gt" : Num}} |
LessThan(小于) | findByNumLessThan(int Num) | {“Num” : {"$lt" : Num}} |
Between(在…之间) | findByNumBetween(int from, int to) | {“Num” : {“ g t " : f r o m , " gt" : from, " gt":from,"lt” : to}} |
IsNotNull, NotNull(是否非空) | findByTitleNotNull() | {“Num” : {"$ne" : null}} |
IsNull, Null(是否为空) | findByTitleNull() | {“Num” : null} |
Like(模糊查询) | findByTitleLike(String name) | {“Num” : Num} ( Num as regex) |
(No keyword) | findByTitle(String name) | {“Num” : name} |
Not(不包含) | findByTitleNot(String name) | {“Num” : {"$ne" : name}} |
Near(查询地理位置相近的) | findByLocationNear(Point point) | {“location” : {"$near" : [x,y]}} |
Within(在地理位置范围内的) | findByLocationWithin(Circle circle) | {“location” : {“KaTeX parse error: Expected '}', got 'EOF' at end of input: within" : {"center” : [ [x, y], distance]}}} |
Within(在地理位置范围内的) | findByLocationWithin(Box box) | {“location” : {“KaTeX parse error: Expected '}', got 'EOF' at end of input: within" : {"box” : [ [x1, y1], x2, y2]}}} |
Regex | findByTitleRegex(String title) | {“TITLE”:{"$regex":title}} |
Spring Boot MongoDB 实现总结相关推荐
- Spring boot mongodb
mongodb语法 spring boot mongodb 引入 pom依赖 <dependencies><dependency><groupId>org.spri ...
- Spring Boot MongoDB 入门
1. 概述 可能有一些胖友对 MongoDB 不是很了解,这里我们引用一段介绍: FROM <分布式文档存储数据库 MongoDB> MongoDB 是一个介于关系数据库和非关系数据库之间 ...
- Spring boot -mongodb
1.更接近原生mongodb public class MongoApp { private static final Log log = LogFactory.getLog(MongoApp.cla ...
- Spring boot整合Mongodb
最近的项目用了Mongodb,网上的用法大多都是七零八落的没有一个统一性,自己大概整理了下,项目中的相关配置就不叙述了,由于spring boot的快捷开发方式,所以spring boot项目中要使用 ...
- 一文读懂 Spring Boot、微服务架构和大数据治理三者之间的故事
微服务架构 微服务的诞生并非偶然,它是在互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下诞生的产物.互联网时代的产品通常有两类特点:需求变化快和用户群体庞大,在这种情况 ...
- 一文透析 Spring Boot、微服务架构和大数据治理三者之间的故事
微服务架构 微服务的诞生并非偶然,它是在互联网高速发展,技术日新月异的变化以及传统架构无法适应快速变化等多重因素的推动下诞生的产物.互联网时代的产品通常有两类特点:需求变化快和用户群体庞大,在这种情况 ...
- Spring Boot + Spring Data + Elasticsearch实例
在本文中,我们将讨论"如何创建Spring Boot + Spring Data + Elasticsearch范例". 本文中使用的工具: Spring Boot 1.5.1.R ...
- SpringBoot 集成 Spring Data Mongodb 操作 MongoDB 详解
一.MongoDB 简介 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,且与关系数据库的最为相像的.它支持的数据结构非常松散,是类似 json 的 bso ...
- Spring boot AOP(切面)使用方法和解析
最近开始实习,终于有时间写博客了.因为需要使用springboot,大三学Oracle数据库的时候使用过springboot,之前没怎么用java写网页后台,发现网上很多的博客要不就是复制粘贴,要不就 ...
最新文章
- python【数据结构与算法】Python语法查询大宝剑(全)
- 一文解读光纤收发器单模和多模的区别!
- 播种数据MVC 6 .NET Core应用程序
- 组件注册@ComponentScan的自动扫描和指定扫描规则
- 人工智能语音识别ppt
- matlab fft2 opencv,基于OPENCV的FFT2变换
- 所有IT人的大恩人永远的离开了
- android 4k 测试图片,4K高清图片视频测试
- Poj 2456 Aggressive cows
- Latex中的caption
- java smtp.126.com_java实现邮件发送
- 京东热 key 探测框架新版发布JD-hotkey,单机 QPS 可达 35 万
- 201871010134-周英杰《面向对象程序设计(Java)》第四周学习总结
- [论文阅读]Contextual Instance Decoupling for Robust Multi-Person Pose Estimation
- 编程之美——找符合条件的整数
- 计算机病毒对网络有什么影响,小议计算机病毒对网络安全的影响
- 计算机主机是啥意思,pc是什么_pc是什么意思
- Windows Server HP 服务器磁盘阵列检测
- MacOS基础用户指南-不断更新
- 蓄电池内阻在线监测及告警方案(接入动环主机)