Springboot+mongodb

Basic Concept:

  • 词义解析:mongo 并不是mango(芒果)之意,在拉丁语中mongo 是“巨大”之意。是一种介于关系型与非关系型数据库之间的NoSql(Not only SQL)
  • mongodb 中文网站:www.mongoing.com
  • mongodb 中文文档:docs.mongoing.com
  • nosql 数据库相比传统 sql 数据库少了:实时一致性;事务;多表联合查询。
    杀掉 MongoDB 的进程需使用kill -15或不带参数,不能使用kill -9

SpringBoot 应用mongodb

  • spring-data-mongodb主要有以下注解

    1. @Id
      主键,不可重复,自带索引,可以在定义的列名上标注,需要自己生成并维护不重复的约束。如果自己不设置@Id主键,mongo会自动生成一个唯一主键(_id, ObjectId, 生成规则:UNIX时间戳 +MongoDB的机器 +生成此_id的进程 +随机数),并且插入时效率远高于自己设置主键。
      在实际业务中不建议自己设置主键,应交给mongo自己生成,自己可以设置一个业务id,如int型字段,用自己设置的业务id来维护相关联的表。

    2. @Document
      标注在实体类上,类似于hibernate的entity注解,标明由mongo来维护该表。

      //org.springframework.data.mongodb.core.mapping.Document.class
      //把一个java类声明为mongodb的文档,可以通过collection参数指定这个类对应的文档。
      @Document(collection=”mongodb 对应 collection 名”)
      // 若未加 @Document ,该 bean save 到 mongo 的 user collection
      // 若添加 @Document ,则 save 到 reUser collection
      @Document(collection=”reUser“)
      public class User{
      }

    3. @Indexed
      声明该字段需要加索引,加索引后以该字段为条件检索将大大提高速度。
      唯一索引的话是@Indexed(unique = true)。
      也可以对数组进行索引,如果被索引的列是数组时,MongoDB会索引这个数组中的每一个元素。
      也可以对整个Document进行索引,排序是预定义的按插入BSON数据的先后升序排列。
      也可以对关联的对象的字段进行索引,譬如User对关联的address.city进行索引。(注解怎么写还不清楚,待查)

    4. @CompoundIndex
      复合索引,加复合索引后通过复合索引字段查询将大大提高速度。

      @Document
      @CompoundIndexes({
      @CompoundIndex(name = “age_idx”, def = “{‘lastName’: 1, ‘age’: -1}”)
      })
      public class Person {
      }
      写法如上,lastName和age将作为复合索引,数字参数指定索引的方向,1为正序,-1为倒序。方向对单键索引和随机存不要紧,但如果你要执行分组和排序操作的时候,它就非常重要了。

    5. @Field
      代表一个字段,可以不加,不加的话默认以参数名为列名。
      给映射存储到 mongodb 的字段取别名
      在 java bean 中字段名为 firstName,存储到 mongo 中 key 为 fName

      @Field(“fName”)
      private String firstName;

    6. @Transient
      被该注解标注的,将不会被录入到数据库中。只作为普通的javaBean属性。

    7. @DBRef
      关联另一个document对象。类似于mysql的表关联,但并不一样,mongo不会做级联的操作。
      先来看一下不加DBRef时,mongo保存数据的情况:
      Article类有String title,List pictureList,两个属性,Picture有一个url,一个desc属性。新建数个Picture对象,并赋值给Article的list,执行Article的insert操作,
      list会作为普通的数据存到article里, 并不会为Picture建表,这一点是区别于mysql的级联存储的。 如果给Article的List pictureList 加上注解:

      @DBref
      List<> pictureList;
      然后分别做两个集合的持久化(save)
      这里写图片描述
      这里写图片描述此时,发现就不再是直接显示的Picture的各个属性了,而是只保存了Picture的id和namespace,同时仍然没有创建Picture的collection(等同于mysql的表)。

  • spring-boot 应用mongodb

    1. gradle 中引入mongodb 的包: compile(“org.springframework.boot:spring-boot-starter-data-mongodb:1.5.7.RELEASE”)
    2. 多个IP集群可以采用以下配置: spring.data.mongodb.uri=mongodb://user:pwd@ip1:port1,ip2:port2/database
    3. 创建实体类
    4. 引入mongodbTemplate
  • mongodb 连接池
    官方文档:
    Note: The Mongo object instance actually represents a pool of connections to the database; you will only need one object of class Mongo even with multiple threads. See the concurrency doc page for more information.
    The Mongo class is designed to be thread safe and shared among threads. Typically you create only 1 instance for a given DB cluster and use it across your app. If for some reason you decide to create many mongo intances, note that:
    all resource usage limits (max connections, etc) apply per mongo instance
    to dispose of an instance, make sure you call mongo.close() to clean up resources.
    mongo实例其实已经是一个现成的连接池了,而且线程安全。这个内置的连接池默认初始了10个连接,每一个操作(增删改查等)都会获取一个连接,执行操作后释放连接。
1.了解Spring 2.了解NoSQL和文档数据库 3.要求 4.其他帮助资源 4.1。支持 4.1.1。社区论坛 4.1.2。专业支持 4.2。发展之后 5.新&值得注意的 5.1。Spring Data MongoDB 2.1中的新特性 5.2。Spring Data MongoDB 2.0中的新特性 5.3。Spring Data MongoDB 1.10中的新特性 5.4。Spring Data MongoDB 1.9中的新特性 5.5。Spring Data MongoDB 1.8中的新特性 5.6。Spring Data MongoDB 1.7中有什么新功能 6.依赖 6.1。Spring Boot的依赖管理 6.2。Spring框架 7.使用Spring Data Repositories 7.1。核心概念 7.2。查询方法 7.3。定义存储库接口 7.3.1。微调储存库定义 7.3.2。空处理存储库方法 7.3.3。将存储库与多个Spring Data模块一起使用 7.4。定义查询方法 7.4.1。查询查询策略 7.4.2。查询创建 7.4.3。属性表达式 7.4.4。特殊参数处理 7.4.5。限制查询结果 7.4.6。流式查询结果 7.4.7。异步查询结果 7.5。创建存储库实例 7.5.1。XML配置 7.5.2。JavaConfig 7.5.3。独立使用 7.6。Spring Data存储库的自定义实现 7.6.1。定制个人存储库 7.6.2。自定义基础存储库 7.7。从聚合根发布事件 7.8。Spring数据扩展 7.8.1。Querydsl扩展 7.8.2。Web支持 7.8.3。存储库填充程序 7.8.4。传统网络支持 参考文档 8.介绍 8.1。文档结构 9. MongoDB支持 9.1。入门 9.2。示例存储库 9.3。用Spring连接MongoDB 9.3.1。使用基于Java的元数据注册Mongo实例 9.3.2。使用基于XML的元数据注册Mongo实例 9.3.3。MongoDbFactory接口 9.3.4。使用基于Java的元数据注册MongoDbFactory实例 9.3.5。使用基于XML的元数据注册MongoDbFactory实例 9.4。MongoTemplate简介 9.4.1。实例化MongoTemplate 9.4.2。WriteResultChecking策略 9.4.3。WriteConcern 9.4.4。WriteConcernResolver 9.5。保存,更新和删除文档 9.5.1。如何_id在映射图层中处理该字段 9.5.2。类型映射 9.5.3。保存和插入文件的方法 9.5.4。更新集合中的文档 9.5.5。在集合中插入文档 9.5.6。在集合中查找和插入文档 9.5.7。删除文件的方法 9.5.8。乐观锁定 9.6。查询文件 9.6.1。查询集合中的文档 9.6.2。查询文件的方法 9.6.3。查询不同的值 9.6.4。地理空间查询 9.6.5。GeoJSON支持 9.6.6。全文查询 9.6.7。排序规则 9.6.8。JSON模式 9.6.9。流利的模板API 9.7。按实例查询 9.7.1。介绍 9.7.2。用法 9.7.3。示例匹配器 9.7.4。执行一个例子 9.7.5。无类型示例 9.8。减少地图操作 9.8.1。使用示例 9.9。脚本操作 9.9.1。使用示例 9.10。集团运营 9.10.1。使用示例 9.11。聚合框架支持 9.11.1。基本概念 9.11.2。支持的聚合操作 9.11.3。投影表达式 9.11.4。分面分类 9.12。用自定义转换器覆盖默认映射 9.12.1。使用已注册的Spring Converter进行保存 9.12.2。使用Spring转换器读取 9.12.3。使用MongoConverter注册Spring转换器 9.12.4。转换器消除歧义 9.13。索引和集合管理 9.13.1。创建索引的方法 9.13.2。访问索引信息 9.13.3。使用集合的方法 9.14。执行命令 9.14.1。执行命令的方法 9.15。生命周期事件 9.16。例外翻译 9.17。执行回调 9.18。GridFS支持 9.19。更改流 9.19.1。使用MessageListener更改流 9.19.2。更改流 - 无效 10.反应性的MongoDB支持 10.1。入门 10.2。使用Spring和Reactive Streams Driver连接MongoDB 10.2.1。使用基于Java的元数据注册MongoClient实例 10.2.2。ReactiveMongoDatabaseFactory接口 10.2.3。使用基于
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值