Spring-data-mongodb使用手册文档信息(Document Info)标题(Title)Spring-data-mongodb使用手册文档编号(No)2012-09-19作者(Author)张瑜最后发布时间(Last Update)2012-09-20概述(Summarize)安装mongodb以及掌握spring-data-mongodb的使用方法,一些最佳实践修订信息(Revise Info)修订日期(Date)修订人(Reviser) 修订内容(Revises)附件信息(Attachment Info)目录文档信息(Document Info) (2)修订信息(Revise Info) (3)附件信息(Attachment Info) (4)1.概述 (5)1.1.目的 (5)1.2.范围 (6)2.准备 (6)2.1.环境配置 (6)2.2.Windows7安装mongodb (6)2.2.1.配置环境变量 (6)2.2.2.启动配置mongodb (7)3.Spring-data-mongodb (8)3.1.背景 (8)3.1.1.高级API (9)3.1.2.低级API (9)3.2.MongoDbFactory (9)3.3.MongoTemplate (9)3.4.Operations (10)3.4.1.常用Api的方法: (10)3.5.项目中如何配置实用mongodb (11)3.6.Callback .................................................................................. 错误!未定义书签。
3.7.Topic和Messaging/PubSub (14)3.8.Cache (14)4.NoSQL数据库设计 (14)4.1.案例1 (14)5.最佳实践 (14)5.1.项目案例1(Tinybee项目) (14)1.概述1.1. 目的让团队成员比较快的上手mongodb的相关功能,思考如何结合自己的项目使用。
1.2. 范围所有工程师。
2.准备mongodb 下载地址:/downloadsmongodb 官方文档下载地址:/docs/mongodb-docs-2012-09-19.pdf十天精通mongodb 下载地址(强烈建议看下,其中包含对mongodb的详细介绍):/file/id_45545890496119199.htm如果你对mongodb希望有更多的了解(其中为mongodb资料专题):/html/3548.htmlmongodb管理工具下载地址:/file/id_45545890496119201.htm2.1. 环境配置在这里提供针对windows7 系统的配置方案2.2. Windows7安装mongodbmongodb及其管理工具下载地址参见准备章节!mongodb启动命令参数详见:/jacky0525/blog/330482.2.1.配置环境变量1、在系统环境变量中添加MONGODB_HOME如图所示:2、在PA TH中添加%MONGODB_HOME%\bin 如图所示:在mongodb 目录中新建data 和log 文件夹(为启动时做准备)2.2.2.启动配置mongodb进入DOS命令窗口输入一下命令:mongod --dbpath D:\mongodb\data --logpath D:\mongodb\log --logappend --directoryperdb--dbpath数据库安装目录--logpath 数据库输出目录--logappend 日志追加,默认为覆盖--directoryperdb 表示每个db一个目录执行命令之后开启新的DOS窗口执行mongo 输出表示启动成功。
目前是以无权限限制的方式启动的,你可以做任何操作。
现在我们需要切换到admin下,创建一个root用户。
执行命令:show dbs 显示所有dbuse admin 使用admin dbdb 显示当前使用的dbdb.addUser(”root”,”root”); 添加用户,用户名为root 密码为rootdb.auth(”root”,”root”); 为用户授权这样我们就为admin db创建好用户,接下来以权限限制方式启动mongodb(记得关掉之前开启的服务),执行命令(在之前启动命令中添加参数-auth即可):mongod --dbpath D:\mongodb\data --logpath D:\mongodb\log --logappend --auth–directoryperdb-auth 安全模式下运行接下来使用之前授权的用户名密码登录,打开新的DOS命令窗口输入如下命令:mongo 数据库名称–u 用户名–p 密码mongo admin –u root –p root注意:为了启动方便可以把mongodb加入windows系统service以管理员身份打开DOS命令窗口键入如下命令:mongod --dbpath D:\mongodb\data --logpath D:\mongodb\log --logappend --auth--directoryperdb –install这时候会在系统服务中增加mongo db 项第一次配置完成后,一定要重启才会有效果重启mongo客户端,不输入-u-p可以直接进入,但是不具有任何权限。
3.Spring-data-mongodb3.1. 背景SQL or NoSQL?That’s a question! SQL 与NoSQL 的争论从来没有停息过,但其实任何一种技术都不会是适合一切应用场景的,重要的是你要充分了解自己的需求,再充分了解你要选择的技术的优劣。
优势:快速!(当然,这和具体的应用方式有关,通常来说,它比一般的关系型数据库快5位左右。
)很高的可扩展性–轻轻松松就可实现PB级的存储(但是可能我们并不需要PB级的存储,10TB可能就够了)他有一个很好的replication 模式(replica sets)有很完善的Java API他的存储格式是Json的,这对Java来说非常好处理,对javascirpt亦然。
运维起来非常方便,你不用专门为它安排一个管理员。
它有一个非常活跃的社区。
他的版本控制非常清楚。
MongoDB 背后的公司(10gen)已经准备好了明天在MongoDB 上面的投入的资金。
劣势:应用经验缺乏,我们都没有相关NoSQL 产品的使用经验。
项目相对来说还比较新。
和以往的存储相比,数据的关系性操作不再存在。
常用Jar:spring-data-mongodbmongo-java-driverspring-core相关JAR在MA VEN包管理中搜索选择对应版本即可3.1.1.高级API3.1.2.低级API3.2. MongoDbFactory就像所有的数据库连接,mongoDbFactory就是连接工厂,通过配置单台服务器或者连接池(pool)的方式获取Mongodb服务器的连接。
3.3. MongoTemplate就像Spring提供的JDBC,hibernate和ibatis的template一样,spring-data-mongodb 也提供了一个基础的泛型MongoTemplate供开发者可以快速的利用代码完成基础的crud工作。
在实践中可以考虑完全省去dao层的设计,直接在service层注入相应的template实例。
在此推荐写一个Repository<T>接口其中提供对mongodb的CRUD操作。
3.4. Operations其实所有的操作都是直接映射Mongodb本身提供的命令行,Spring-data-mongodb 文档来操作。
官网提供的API Javadoc有问题报404,只能看HTML版的参考手册:/spring-data/data-mongodb/docs/current/reference/html/ 404问题修复了(官方API):/spring-data/data-mongodb/docs/current/apidocs/3.4.1.常用Api的方法:新增方法:User user = new User("...");//将user对象保存到"user"这个collection中mongoTemplate.save(user);//将user对象保存到"new collection"这个collection中mongoTemplate.save("new collection",user);//将user对象保存到"user"这个collection中mongoTemplate.insert(user);//将user对象保存到"new collection"这个collection中mongoTemplate.insert("new collection", user);//将user的对象列表(List)保存到"user"collection中去mongoTemplate.insertList(userInList);//将user的对象列表(List)保存到"new collection"collection中去mongoTemplate.insertList("new collection", userInList);另外请注意其中的save和insert的区别。
它们的区别为:1)save意思是,当记录不存在时插入,或者是当记录已存在是更新,实际上就是save or update的意思。
2) insert的意思是:当记录不存在时插入,而如果记录存在时则忽略,继续插入。
查询方法://创建查询条件id = 123 和name = zhangyuQuery query = new Query(Criteria.where("id").is(123).and("name").is("zhangyu"));//执行查询返回结果List<User> user = mongoTemplate.find(query, User.class);//创建查询条件id <= 123 和name = zhangyuQuery query = new Query(Criteria.where("id").lte(123).and("name").is("zhangyu"));删除方法:User user = new User("...");//删除user集合中的user对象mongoOperation.remove(user);//删除test集合下的id=2的user对象mongoOperation.remove("test", new Query(Criteria.where("id").is("2")));//删除test集合下的,id=3的user对象,最后并且返回这个被删除的对象User deletedUser = mongoOperation.findAndRemove("test",new Query(Criteria.where("id").is("3")), User.class);3.5. 项目中如何配置实用mongodb配置文件如图所示:之后通过注解注入mongoTemplate 即可3.6. 基于实体Bean操作1、使用@Document注解指明一个领域对象将被持久化到MongoDB中。