Spring Data MongoDB 学习和使用
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 学习和使用相关推荐
- [Spring Data MongoDB]学习笔记--建立数据库的连接
1. 有了上一篇的Mongo后,连接数据库我们还需要更多的信息,比如数据库名字,用户名和密码等. 我们可以继续来配置MongoDbFactory的实例. public interface MongoD ...
- Spring Data MongoDB示例
Spring Data MongoDB示例 欢迎使用Spring Data MongoDB示例.Spring Data MongoDB是将Spring Framework与最广泛使用的NoSQL数据库 ...
- SpringBoot系列之Spring Data MongoDB教程
SpringBoot系列之Spring Data MongoDB教程 1.MongoDB下载安装 因为没有买linux服务器,所以本博客只安装window来学习,可以点击官网下载链接进行下载,安装过程 ...
- SpringBoot 集成 Spring Data Mongodb 操作 MongoDB 详解
一.MongoDB 简介 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,且与关系数据库的最为相像的.它支持的数据结构非常松散,是类似 json 的 bso ...
- mongodb数据库java接口,MongoDB —— 使用Spring Data MongoDB操作数据库
我们使用Spring Data MongoDB可以方便的在Spring boot项目中操作MongoDB 文档地址:https://docs.spring.io/spring-boot/docs/2. ...
- 使用Spring访问Mongodb的方法大全——Spring Data MongoDB查询指南
1.概述 Spring Data MongoDB 是Spring框架访问mongodb的神器,借助它可以非常方便的读写mongo库.本文介绍使用Spring Data MongoDB来访问mongod ...
- Spring Data MongoDB教程
在当今世界,尽快启动并运行应用程序非常重要. 该应用程序还应该易于开发和维护. Spring是这样的框架,它提供了与许多不同框架的集成的简便性,这使得使用Spring开发应用程序变得容易. 一种这样的 ...
- 数据聚合Spring Data MongoDB:嵌套结果
1引言 在上一篇文章中,我们构建了聚合管道的基本示例. 如果您需要有关如何创建项目和配置应用程序的更多详细信息,也许您想看看使用Spring Data MongoDB和Spring Boot进行数据聚 ...
- orderby排序慢_使用@OrderBy对Spring Data MongoDB集合进行排序
orderby排序慢 这是关于调整和增强Spring Data MongoDB功能的第三篇文章. 这次,我发现我错过了一个JPA功能– @OrderBy批注. @OrderBy指定在检索关联值时集合值 ...
最新文章
- MutipartFile使用过程中遇到的坑
- [转]android-学习笔记之按钮事件
- java dispatchevent_dispatchEvent(AWTEvent) 分派事件
- FirstLetterUtil
- HDU 1711 Number Sequence(KMP模板)
- php rewinddir(),PHP rewinddir() 函数 ——jQuery中文网
- 目标检测——对数据进行EDA分析的学习笔记
- 使用HTML Help Workshop将HTML转为CHM
- Discuz代码片段
- Codeforces Round #799 (Div. 4) (AK代码)
- (转)工业机器人用什么语言编程的?
- 顶级区块链开发人员工具:涉及框架、IDE、安全工具、测试网络、区块链预言机和节点服务
- 愿你与生活交手多年,依然满怀新鲜,
- postman——集合——执行集合——脚本的执行顺序——验证
- Java的重载和重写区别(面试常见)
- amCharts 5.1.12 Crack
- 微信H5授权用户和公众号关注用户区别
- Vue数据格式化:JSON、HTML、XML数据的格式化显示
- 项目经历 - 卷积网络识别古日文
- 关键元器件选型设计指引--多端口RJ45及网络变压器
热门文章
- 傻瓜式安装Kubernetes集群
- python语言:五星红旗制作
- [Web]如何利用Boostrap框架搭建一个还可以的静态网站(六_子页)
- 呼叫中心服务器类型,呼叫中心的多种分类
- 曲线(笔迹)简化算法
- Ajax,jQuery ajax,axios和fetch的区别
- 关于“996”的个人看法
- java 双斜杠变单斜杠_java 过滤文本特殊字符 以及单斜杠替换成双斜杠 | 学步园...
- 专栏《乔新亮的CTO成长复盘》读书笔记(一)
- 山东大学RISCV公共开放平台