spring & mongodb java实战mongodb 曹巍 2013年9月22日
mongodb的本身形态
某个collection里面的数据示例
实际的命令 在命令行模式下键入 键入 1 use db; 2 show collections; show dbs; 在命令行模式下键入 mongo 159.226.13.220:27017
如何快速接受mongodb 和关系型 数据库对比 show dbs show collections show databases; Mysql mongodb show dbs show databases; show collections show tablses; SQL 语句
反观认识mongodb 在数据存储领域充斥着各种血腥味的战斗中,mongodb已经完全代表了nosql,nosql在当前可以说就是mongodb,mongodb就是nosql,不要问为什么,我也不知道,反正就是这个理. 为什么要用mongodb而不用传统的关系型数据库,就是因为mongodb在处理大数据的时候快,到底有多快,取决于软件配置和硬件配置,软件配置为数据索引和分片等技术,硬件配置为物理机器性能,数据库集群的整体性能等因素. ..........
在数据管理方面也是抽象为三个层次,mongodb为(数据库,集合,记录),关系型数据库为(数据库,表,记录) 和关系型数据库的异同点 在数据管理方面也是抽象为三个层次,mongodb为(数据库,集合,记录),关系型数据库为(数据库,表,记录) 在记录的存储上,两种数据库存储的记录格式不一样,mongodb没有固定的存储限制,只要是json格式都能存;但是关系型数据库则有严格的类型和长度限制 异同点 原始查询语句不同 都能存储各类型的数据
在java程序中使用,hello world! 配置 在程序中使用
数据库记录的增加 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("datasource.xml"); MongoTemplate mongoTemplate = (MongoTemplate) applicationContext.getBean("mongoTemplate"); Entity entity = new Entity(); entity.setName("caowei"); entity.setAge(26); mongoTemplate.insert(entity,"test");//单条插入 List list = new ArrayList(); Map map1 = new HashMap(); map1.put("姓名", "曹巍"); map1.put("年龄", "26周岁"); Map map2 = new HashMap(); map2.put("time","2013年9月22日10:15:59"); list.add(map1); list.add(map2); mongoTemplate.insert(list,"test");//多条插入
数据库记录的增加后的结果 > db.test.find() { "_id" : ObjectId("523e7db73d50e4c5966c3e3b"), "_class" : "cn.csdb.test.Entity", "name" : "caowei", "age" : 26 } { "_id" : ObjectId("523e7db73d50e4c5966c3e3c"), "_class" : "java.util.HashMap", "姓名" : "曹巍", "年龄" : "26周岁" } { "_id" : ObjectId("523e7db73d50e4c5966c3e3d"), "_class" : "java.util.HashMap", "time" : "2013年9月22日10:15:59" } >
数据库记录的删除 ApplicationContext applicationContext = new ClassPathXmlApplicationContext("datasource.xml"); MongoTemplate mongoTemplate = (MongoTemplate) applicationContext.getBean("mongoTemplate"); Query query = new Query(); query.addCriteria(Criteria.where("age").is(26)); mongoTemplate.remove(query,"test"); 集合名
数据库记录删除后的结果对比
数据库记录的修改 query.addCriteria(Criteria.where("姓名").is("曹巍")); ApplicationContext applicationContext = new ClassPathXmlApplicationContext("datasource.xml"); MongoTemplate mongoTemplate = (MongoTemplate) applicationContext.getBean("mongoTemplate"); Query query = new Query(); query.addCriteria(Criteria.where("姓名").is("曹巍")); Update update = new Update(); update.set("company","cnic"); update.addToSet("email","429214435@qq.com"); mongoTemplate.updateFirst(query,update,"test"); mongoTemplate.updateMulti(query,update,"test");
数据库记录的修改结果
数据库的查询 基本查询 // where age = 26 多条件查询 //where age = 26 and name = 'caowei' 单条件多限制查询 // where age > 25 and age < 27 order by 查询 //order by age desc top(limit)查询 //limit 10,0 分页查询 //limit 1000,10 ---> 1001,1002 ..... 1010
基本查询 Select * from table_user where name = ‘caowei’ 按照spring data对mongodb查询的抽象,将基本的查询分为下面几种对象 executeMethod() mongodbTemplate可以执行的方法 Query 基本的查询条件的组合,包含了where,or,order by….. Criteria 最小的查询条件,基本单位
基本查询//where name = ‘caowei’ Select * from table_user where name = ‘caowei’ 根据上面的描述,将其查询语句转化为spring data中对应的java语句 Criteria criteria = Criteria.where("name").is("caowei"); Query query = new Query(); query.addCriteria(criteria); List list = (List) mongoTemplate.find(query, Object.class, "statistics");
基本查询//where age = 26 and name = ‘caowei’ Select * from table_user where where age = 26 and name = ‘caowei’ 根据上面的描述,将其查询语句转化为spring data中对应的java语句 Criteria criteria = Criteria.where("name").is("caowei").and("age").is(26); Query query = new Query(); query.addCriteria(criteria); List list = (List) mongoTemplate.find(query, Object.class, "statistics");
基本查询举例说明 order by age desc query.sort().on("count", Order.DESCENDING); limit 1000,10 query.skip(1000).limit(10); Select count mongoTemplate.count(new Query(Criteria.where("ACCESSION").is(acc)), "query"); ……
反观配置 <bean id="mongo" class="com.mongodb.Mongo"> <constructor-arg name="host" value=“127.0.0.1"/> <constructor-arg name="port" value="27017"/> </bean> <bean id="mongoTemplate" class="org.springframework.data.mongodb.core.MongoTemplate"> <constructor-arg ref="mongo"/> <constructor-arg name="databaseName" value="test"/>
使用(程序代码截屏)
谢谢大家!