1.准备环境

新建一个Springboot项目




点击finish完成项目的搭建

2.配置连接参数

# application.properties
# 配置数据库连接
#格式: mongodb://账号:密码@ip:端口/数据库?认证数据库
spring.data.mongodb.uri=mongodb://root:admin@localhost/mongotest?authSource=admin
#配置MongoTemplate的执行日志
logging.level.org.springframework.data.mongodb.core=debug

3.domain

@Setter@Getter@ToString
@AllArgsConstructor
@NoArgsConstructor
@Document("users")//设置文档所在的集合
public class User {@Id//文档的id使用ObjectId类型来封装,并且贴上@Id注解private ObjectId _id;private  Long id ;private String name;private Integer age;
}

4.MongoRepository

该接口对MongoDB数据的常用操作进行了封装,我们只需要写个接口去继承该接口就能直接拥有的CRUD等基本操作,再学习下JPA的方法命名规范,可以毫不费力的完成各种复杂的高级操作

/** 自定义一个接口继承MongoRepository,* 泛型1:domain类型* 泛型2:文档主键类型* 贴上@Repository注解,底层会创建出动态代理对象,交给Spring管理* 接口继承MongoRepository,就可以直接进行简单的CRUD操作* @Repository,由spring框架来创建动态代理对象* */
@Repository
public interface UserMongoRepository extends MongoRepository<User,ObjectId>{// 使用Spring Data命名规范做高级查询List<User> findByName(String name);
}


(1)Spring Data方法命名规范

(2).实例代码(简单的CRUD操作)

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMongoRepositoryTest {@Autowiredprivate UserMongoRepository repository;@Testpublic void testSaveOrUpdate() throws Exception {User user = new User();user.setId(9L);user.setName("伊伊");user.setAge(17);// 主键为null则新增,不为null则更新repository.save(user);}//删除一个文档@Testpublic void testDelete() throws Exception {repository.deleteById(new ObjectId("5e9a990232fdb326c79ae329"));}//查询一个文档@Testpublic void testGet() throws Exception {Optional<User> optional = repository.findById(new ObjectId("5e9a6f73a0efdb355c004152"));optional.ifPresent(System.out::println);//User(_id=5e9a6f73a0efdb355c004152, id=1, name=伊伊, age=18)}//查询所有文档@Testpublic void testList() throws Exception {//查询所有文档List<User > list = repository.findAll();list.forEach(System.err::println);}//根据name来查询@Testpublic void testFindByName() throws Exception {List<User> list = repository.findByName("伊伊");list.forEach(System.out::println);}
}

5.MongoTemplate

该对象有SpringBoot完成了自动配置,存入Spring容器中,我们直接注入就可以使用了,依靠该对象能完成任何的MongoDB操作,一般和MongoRepository分工合作,多数用于复杂的高级查询以及底层操作

//注入MongoTemplate
@Autowired
private MongoTemplate template;

(1).条件限定
Query对象用于封装查询条件,配合Criteria一起使用,来完成各种条件的描述

//一个Criteria对象可以理解为是一个限定条件Criteria.where(String key).is(Object val); //设置一个等值条件 Criteria.orOperator(Criteria ...); //设置一组或的逻辑条件 //模糊查询(了解) Criteria.where(String key).regex(String regex); //使用正则表达式匹配查询 注意:Criteria对象可以由其静态方法和构造器获取 Criteria封装了所有对条件的描述,常见的有以下方法lt / lte / gt / gte / ne / ...

最后通过Query对象的addCriteria把条件封装到Query对象中

Query对象.addCriteria(Criteria criteria); //添加查询条件
Query对象.skip(start).limit(pageSize); //分页查询

(2).API方法

//根据条件查询集合中的文档
List<T> mongoTemplate.find(Query query, Class<T> type, String collectionName);

(3).实例代码

@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMongoTempleteTest {@Autowiredprivate MongoTemplate mongoTemplate;//分页查询文档,显示第2页,每页显示3个,按照id升序排列@Testpublic void testQuery1() throws Exception {//创建查询对象Query query = new Query();// 设置排序规则/*** springboot2.2.1(含)以上的版本Sort已经不能再实例化了,构造方法已经是私有的了!* query.with(new Sort(Sort.Direction.ASC,"id"));不可用了* 使用Sort.by()方法*/query.with(Sort.by(Sort.Direction.ASC, "id"));// 设置分页信息query.skip(3).limit(3);List<User> list = mongoTemplate.find(query, User.class, "users");list.forEach(System.err::println);}//查询所有name为伊伊的文档@Testpublic void testQuery2() throws Exception {/*构建限制条件 {"name":"伊伊"}*/Criteria criteria = Criteria.where("name").is("伊伊");// 创建查询对象Query query = new Query();// 添加限制条件query.addCriteria(criteria);List<User> list = mongoTemplate.find(query, User.class, "users");list.forEach(System.err::println);}//查询所有name为伊伊或者age<30的文档@Testpublic void testQuery3() throws Exception {/*构建限制条件{"$or": [{"name": "伊伊"},{"age": {"$lt": 30}}]}*/Criteria criteria = new Criteria().orOperator(Criteria.where("name").is("伊伊"), Criteria.where("age").lt(30));// 创建查询对象Query query = new Query();// 添加限制条件query.addCriteria(criteria);List<User> list = mongoTemplate.find(query, User.class, "users");list.forEach(System.err::println);}// 查询所有name含有ha并且30<=age<=32的文档@Testpublic void testQuery4() throws Exception {/*构建限制条件{"$and" : [{"name": {"$regex": ".*wang.*"} },{"age": {"$gte": 30, "$lte": 32 }}]}*/Criteria criteria = new Criteria().andOperator(Criteria.where("name").regex(".*ha.*"), Criteria.where("age").gte(30).lte(32));// 创建查询对象Query query = new Query();// 添加限制条件query.addCriteria(criteria);List<User> list = mongoTemplate.find(query, User.class, "users");list.forEach(System.err::println);}
}

Spring Data MongoDB 学习和使用相关推荐

  1. [Spring Data MongoDB]学习笔记--建立数据库的连接

    1. 有了上一篇的Mongo后,连接数据库我们还需要更多的信息,比如数据库名字,用户名和密码等. 我们可以继续来配置MongoDbFactory的实例. public interface MongoD ...

  2. Spring Data MongoDB示例

    Spring Data MongoDB示例 欢迎使用Spring Data MongoDB示例.Spring Data MongoDB是将Spring Framework与最广泛使用的NoSQL数据库 ...

  3. SpringBoot系列之Spring Data MongoDB教程

    SpringBoot系列之Spring Data MongoDB教程 1.MongoDB下载安装 因为没有买linux服务器,所以本博客只安装window来学习,可以点击官网下载链接进行下载,安装过程 ...

  4. SpringBoot 集成 Spring Data Mongodb 操作 MongoDB 详解

    一.MongoDB 简介 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,且与关系数据库的最为相像的.它支持的数据结构非常松散,是类似 json 的 bso ...

  5. mongodb数据库java接口,MongoDB —— 使用Spring Data MongoDB操作数据库

    我们使用Spring Data MongoDB可以方便的在Spring boot项目中操作MongoDB 文档地址:https://docs.spring.io/spring-boot/docs/2. ...

  6. 使用Spring访问Mongodb的方法大全——Spring Data MongoDB查询指南

    1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库.本文介绍使用Spring Data MongoDB来访问mongod ...

  7. Spring Data MongoDB教程

    在当今世界,尽快启动并运行应用程序非常重要. 该应用程序还应该易于开发和维护. Spring是这样的框架,它提供了与许多不同框架的集成的简便性,这使得使用Spring开发应用程序变得容易. 一种这样的 ...

  8. 数据聚合Spring Data MongoDB:嵌套结果

    1引言 在上一篇文章中,我们构建了聚合管道的基本示例. 如果您需要有关如何创建项目和配置应用程序的更多详细信息,也许您想看看使用Spring Data MongoDB和Spring Boot进行数据聚 ...

  9. orderby排序慢_使用@OrderBy对Spring Data MongoDB集合进行排序

    orderby排序慢 这是关于调整和增强Spring Data MongoDB功能的第三篇文章. 这次,我发现我错过了一个JPA功能– @OrderBy批注. @OrderBy指定在检索关联值时集合值 ...

最新文章

  1. MutipartFile使用过程中遇到的坑
  2. [转]android-学习笔记之按钮事件
  3. java dispatchevent_dispatchEvent(AWTEvent) 分派事件
  4. FirstLetterUtil
  5. HDU 1711 Number Sequence(KMP模板)
  6. php rewinddir(),PHP rewinddir() 函数 ——jQuery中文网
  7. 目标检测——对数据进行EDA分析的学习笔记
  8. 使用HTML Help Workshop将HTML转为CHM
  9. Discuz代码片段
  10. Codeforces Round #799 (Div. 4) (AK代码)
  11. (转)工业机器人用什么语言编程的?
  12. 顶级区块链开发人员工具:涉及框架、IDE、安全工具、测试网络、区块链预言机和节点服务
  13. 愿你与生活交手多年,依然满怀新鲜,
  14. postman——集合——执行集合——脚本的执行顺序——验证
  15. Java的重载和重写区别(面试常见)
  16. amCharts 5.1.12 Crack
  17. 微信H5授权用户和公众号关注用户区别
  18. Vue数据格式化:JSON、HTML、XML数据的格式化显示
  19. 项目经历 - 卷积网络识别古日文
  20. 关键元器件选型设计指引--多端口RJ45及网络变压器

热门文章

  1. 傻瓜式安装Kubernetes集群
  2. python语言:五星红旗制作
  3. [Web]如何利用Boostrap框架搭建一个还可以的静态网站(六_子页)
  4. 呼叫中心服务器类型,呼叫中心的多种分类
  5. 曲线(笔迹)简化算法
  6. Ajax,jQuery ajax,axios和fetch的区别
  7. 关于“996”的个人看法
  8. java 双斜杠变单斜杠_java 过滤文本特殊字符 以及单斜杠替换成双斜杠 | 学步园...
  9. 专栏《乔新亮的CTO成长复盘》读书笔记(一)
  10. 山东大学RISCV公共开放平台