- 浏览: 150934 次
文章分类
- 全部博客 (141)
- js 异步加载 (1)
- 延迟触发 jquery (1)
- android (2)
- Maven Spring Ibatis (1)
- android多线程 (1)
- 技术文章 (2)
- 面试总结 (3)
- Java (3)
- Java程序员 (1)
- linux (2)
- 【Android开发学习之路】 (1)
- ios 技术点 (1)
- Javascript (2)
- 心得 8月 (1)
- 架构师之路 (1)
- leopard dm365 gstreamer (1)
- Oracle (2)
- VC++ (1)
- BFS (1)
- [C++] (1)
- 管理 (1)
- 图像处理 (1)
- DP (2)
- 数据库(SQL Server) (1)
- 系统分析 (1)
- ACM ----- 做不出来刷水题健身 (1)
- 错误笔记 (1)
- 数据库学习 (1)
- Android学习记录 (1)
- 数据库 (1)
- 排序 (1)
- 线段树 (1)
- 散文 (1)
- android开发 (1)
- 杂谈 (1)
- 业务逻辑层 (1)
- 微软等数据结构与算法面试100题 (1)
- c++ (1)
- 数据结构 (1)
- ACM ----基础题 (1)
- ACM_计算几何 (1)
- 学习 (1)
- python与网络编程 (1)
最新评论
-
不死咸鱼:
需要购买视频
JBPM4+ExtJS实战视频教程 -
iame:
good,打算在新项目中使用,thanks
javascript模版引擎-tmpl的bug修复与性能优化 -
lhf1990729:
图片打不开啊。少年。。
[置顶] 通向架构师的道路(第十四天)Axis2 Web Service安全(二) -
gtrgtr:
不错...
java.lang.IllegalStateException: Immutable bitmap passed to Canvas constructor错误解决办法 -
nodejs:
这个世界这是怎么了?http://nodejs.iteye.c ...
代码之谜 - 为什么 jdk 中把 String 类设计成 final
NoSQL 之 Morphia 操作 MongoDB
上两篇文章:http://www.cnblogs.com/hoojo/archive/2011/06/01/2066426.html
http://www.cnblogs.com/hoojo/archive/2011/06/02/2068665.html
介绍到了在MongoDB的控制台完成MongoDB的数据操作、以及通过Java MongoDB 的驱动完成在Java中对MongoDB的操作,通过前两篇文章我们对MongoDB有了全面、深刻的认识和理解。现在我们就看看利用Morphia库来操作MongoDB。
开发环境:
System:Windows
IDE:eclipse、MyEclipse 8
Database:mongoDB
开发依赖库:
JavaEE5、mongo-2.5.3.jar、junit-4.8.2.jar, morphia-0.99.jar
Email:hoojo_@126.com
Blog:http://blog.csdn.net/IBM_hoojo
一、准备工作
1、 首先,下载mongoDB对Java支持的驱动包
驱动包下载地址:https://github.com/mongodb/mongo-java-driver/downloads
mongoDB对Java的相关支持、技术:http://www.mongodb.org/display/DOCS/Java+Language+Center
驱动源码下载:https://download.github.com/mongodb-mongo-java-driver-r2.6.1-7-g6037357.zip
在线查看源码:https://github.com/mongodb/mongo-java-driver
Morphia jar包下载:http://code.google.com/p/morphia/downloads/list
2、 下面建立一个JavaProject工程,导入下载下来的驱动包。即可在Java中使用Morphia,目录如下:
二、Java操作MongoDB示例
在本示例之前你需要启动mongod.exe的服务,在你安装mongoDB的目录中,找到mongod.exe启动服务后,下面的程序才能顺利执行;
1、 Java操作mongoDB数据库,操作索引
Mongo mongo = new Mongo();
这样就创建了一个MongoDB的数据库连接对象,它默认连接到当前机器的localhost地址,端口是27017。
DB db = mongo.getDB(“test”);
这样就获得了一个test的数据库,如果mongoDB中没有创建这个数据库也是可以正常运行的。如果你读过上一篇文章就知道,mongoDB可以在没有创建这个数据库的情况下,完成数据的添加操作。当添加的时候,没有这个库,mongoDB会自动创建当前数据库。
得到了db,下一步我们要获取一个“聚集集合DBCollection”,通过db对象的getCollection方法来完成。
DBCollection users = db.getCollection("users");
这样就获得了一个DBCollection,它相当于我们数据库的“表”。
查询所有数据
DBCursor cur = users.find();
while (cur.hasNext()) {
System.out.println(cur.next());
}
用BasicDBObjectBuilder,向users对象中添加数据
user = BasicDBObjectBuilder.start("id", 1546555)
.append("name", "jojo").add("address", "gz")
.append("email", "hoojo_@126.com")
.get();
插入数据
users.insert(user);
可以利用JSON工具来序列化对象数据
JSON.serialize(cur)
完整源码
package com.hoo.test; import java.net.UnknownHostException; import com.hoo.entity.User; import com.hoo.util.BasicDBObjectUtils; import com.mongodb.BasicDBObjectBuilder; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.DBObject; import com.mongodb.Mongo; import com.mongodb.MongoException; import com.mongodb.util.JSON; /** * <b>function:</b> Mongo实例对象的相关方法测试 * @author hoojo * @createDate 2011-5-24 下午02:42:29 * @file MongoDBTest.java * @package com.hoo.test * @project MongoDB * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ public class MongoDBTest { public static void main(String[] args) throws UnknownHostException, MongoException { Mongo mg = new Mongo(); System.out.println("查询所有的Database的名称"); for (String name : mg.getDatabaseNames()) { System.out.println("dbName: " + name); } System.out.println("查询test库中的所有collection集合(表)名称"); DB db = mg.getDB("test"); for (String name : db.getCollectionNames()) { System.out.println("collectionName: " + name); } System.out.println("添加测试数据"); DBCollection users = db.getCollection("users"); try { // 用自定义BasicDBObjectUtils工具类,将User Enity对象转换成DBObject DBObject user = BasicDBObjectUtils.castModel2DBObject(new User("345567", "jack", 22, "beijin")); users.insert(user); // 用BasicDBObjectBuilder构建一个DBObject对象 user = BasicDBObjectBuilder.start("id", 1546555).append("name", "jojo").add("address", "gz").append("email", "hoojo_@126.com").get(); users.insert(user); } catch (Exception e) { e.printStackTrace(); } System.out.println("游标查询所有users集合数据"); DBCursor cur = users.find(); while (cur.hasNext()) { System.out.println(cur.next()); } System.out.println("查询游标相关内容"); System.out.println(cur.count()); System.out.println(cur.getCursorId()); System.out.println(cur.getOptions()); System.out.println(cur.getQuery()); System.out.println(cur.getSizes().listIterator()); System.out.println(cur.itcount()); //System.out.println(cur.length()); System.out.println(cur.size()); System.out.println(cur.numGetMores()); System.out.println(cur.curr()); //System.out.println(cur.toArray().get(0)); System.out.println("显示游标查询到的所有内容: " + JSON.serialize(cur)); } }
工具类,将带有getter、setter方法的Java类序列化成DBObject对象
package com.hoo.util; import java.lang.reflect.Method; import com.mongodb.BasicDBObject; import com.mongodb.DBObject; /** * <b>function:</b> 将Entity/Model转换成DBObject * @author hoojo * @createDate 2011-5-30下午01:53:08 * @file BasicDBObjectUtil.java * @package com.hoo.util * @project MongoDB * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ publicclass BasicDBObjectUtils { public static<T> DBObject castModel2DBObject(T entity) throws Exception { Method[] method = entity.getClass().getMethods(); DBObject dbObject = new BasicDBObject(); for (Method m : method) { //System.out.println(m.getName()); if (m.getName().startsWith("get")) { String name = m.getName().replace("get", ""); for (Method m2 : method) { if (m2.getName().equals("set" + name)) { name = name.substring(0, 1).toLowerCase() + name.substring(1); Object returnVal = m.invoke(entity, new Object[] {}); if (returnVal != null) { //System.out.println(name + " : " + m.invoke(shipping, new Object[] {})); dbObject.put(name, returnVal); } } } } } System.out.println("dbObject: " + dbObject); return dbObject; } }
2、 完成索引操作,首先建立一个MongoDB4IndexTest.java,基本测试代码如下:
package com.hoo.test; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; import org.bson.types.ObjectId; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.mongodb.BasicDBObject; import com.mongodb.Bytes; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.DBObject; import com.mongodb.Mongo; import com.mongodb.MongoException; import com.mongodb.QueryOperators; import com.mongodb.util.JSON; /** * <b>function:</b> 实现MongoDB的Index操作 * @author hoojo * @createDate 2011-6-2 下午03:21:23 * @file MongoDB4IndexTest.java * @package com.hoo.test * @project MongoDB * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ public class MongoDB4IndexTest { private Mongo mg = null; private DB db; private DBCollection users; @Before public void init() { try { mg = new Mongo(); //mg = new Mongo("localhost", 27017); } catch (UnknownHostException e) { e.printStackTrace(); } catch (MongoException e) { e.printStackTrace(); } //获取temp DB;如果默认没有创建,mongodb会自动创建 db = mg.getDB("temp"); //获取users DBCollection;如果默认没有创建,mongodb会自动创建 users = db.getCollection("users"); } @After public void destory() { if (mg != null) mg.close(); mg = null; db = null; users = null; System.gc(); } public void print(Object o) { System.out.println(o); } }
3、 下面完成对象Collection的index的操作
/** * <b>function:</b> 测试Collection的index相关操作 * @author hoojo * @createDate 2012-2-16 下午08:32:26 */ @Test public void testIndex() { query(); for (DBObject index : coll.getIndexInfo()) { print("IndexInfo: " + index); } coll.dropIndexes(); //创建索引 coll.createIndex(new BasicDBObject("name", "idx_name")); print(coll.findOne(new BasicDBObject("name", "haha"))); coll.createIndex(coll.findOne(new BasicDBObject("name", "haha"))); DBObject o = new BasicDBObject("unique", true); //coll.createIndex(coll.findOne(), o); // 修改索引,如果存在就修改不存在就添加 coll.ensureIndex(o); coll.ensureIndex("age_1"); coll.ensureIndex(new BasicDBObject("age3_1", 6), new BasicDBObject("ts", -1)); coll.ensureIndex(new BasicDBObject("age_2", 1), new BasicDBObject( "ts" , 1 )); coll.ensureIndex(new BasicDBObject("password", 2), new BasicDBObject( "z" , "idx" )); coll.ensureIndex(new BasicDBObject("password", 1), new BasicDBObject( "etc" , "idx" )); // 创建唯一索引 coll.ensureIndex(new BasicDBObject("emial", 2), new BasicDBObject("unique", false)); // 创建索引,指定索引名称default_index coll.ensureIndex(new BasicDBObject("address", 1), new BasicDBObject( "name" , "default_index")); // 创建索引对象,索引名称user_index coll.ensureIndex(coll.findOne(new BasicDBObject("name", "hoho")), "user_index"); // 唯一索引 coll.ensureIndex(coll.findOne(new BasicDBObject("name", "hehe")), "users_index_unique", true); // 查询所有索引 for (DBObject index : coll.getIndexInfo()) { print("IndexInfo: " + index); } print(DBCollection.genIndexName(coll.findOne())); //coll.dropIndex(coll.findOne()); print(DBCollection.genIndexName(new BasicDBObject("password", 2))); //coll.dropIndex(DBCollection.genIndexName(new BasicDBObject("password", 2))); //coll.dropIndexes(); //coll.dropIndexes("assword_1"); }
三、Morphia基本操作
1、 morphia可以利用annotation对JavaEntity进行注解,那样我们就可以用morphia操作JavaEntity对象
package com.hoo.entity; import com.google.code.morphia.annotations.Entity; import com.google.code.morphia.annotations.Id; /** * <b>function:</b> JavaEntity对象 * @author hoojo * @createDate 2011-5-31上午11:45:21 * @file User.java * @package com.hoo.entity * @project Morphia * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ //利用morphia的annotation进行注解 @Entity public class User { @Id private long id; private String name; private boolean sex; private int age; private String address; public User() { } public User(long id, String name, boolean sex, int age, String address) { super(); this.id = id; this.name = name; this.sex = sex; this.age = age; this.address = address; } //getter、setter @Override public String toString() { return this.id + "#" + this.name + "#" + this.age + "#" + this.sex + "#" + this.address; } }
2、 对Morphia对象一些简单的使用,看看该对象提供了哪些基本的操作方法
package com.hoo.test.morphia; import java.net.UnknownHostException; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.google.code.morphia.Datastore; import com.google.code.morphia.EntityInterceptor; import com.google.code.morphia.Morphia; import com.google.code.morphia.mapping.MappedClass; import com.google.code.morphia.mapping.Mapper; import com.google.code.morphia.mapping.cache.EntityCache; import com.hoo.entity.User; import com.mongodb.BasicDBObjectBuilder; import com.mongodb.Mongo; import com.mongodb.MongoException; /** * <b>function:</b> morphia对象的简单测试 * @author hoojo * @createDate 2011-5-31上午11:30:20 * @file MorphiaTest.java * @package com.hoo.test * @project Morphia * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ public class MorphiaTest { private Mongo mongo; private Morphia morphia; @Before public void init() { try { mongo = new Mongo(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (MongoException e) { e.printStackTrace(); } morphia = new Morphia(); } private void print(Object o) { if (o != null) { System.out.println(o.toString()); } } /** * <b>function:</b> morphia对象的简单测试 * @author hoojo */ @SuppressWarnings("deprecation") @Test public void testMorphia() { // 创建一个Datastore,过时的方法不推荐使用 Datastore ds = morphia.createDatastore("myTestDB"); print("createDatastore: " + ds); // 创建ds ds = morphia.createDatastore(mongo, "myTestDB"); print("createDatastore: " + ds); // 创建一个带用户名、密码的ds //ds = morphia.createDatastore(mongo, "myTestDB", "admin", new char[] { '1', '2', '3', '4', '5', '6' }); // 设置操作资源对象,这里设置User.class 就可以完成对User的一系列操作 //morphia.map(User.class); //morphia.mapPackage("com.hoo.entity");//会把整个包下面的类都加载进来 // 将对象转成DBObject print("toDBObject: " + morphia.toDBObject(new User(System.currentTimeMillis(), "jackson", true, 22, null))); // 将参数2转换成参数1的类型 print("fromDBObject: " + morphia.fromDBObject(User.class, BasicDBObjectBuilder.start("sex", true).get())); print("getMapper: " + morphia.getMapper()); print("isMapped: " + morphia.isMapped(User.class)); } /** * <b>function:</b> 对Mapper对象相关操作 * @author hoojo * @createDate 2012-2-16下午10:20:38 */ @Test public void testMapper() { Mapper mapper = morphia.getMapper(); // 添加对象映射 print("addMappedClass: " + mapper.addMappedClass(User.class)); //print(mapper.addMappedClass(mapper.addMappedClass(User.class)); // 创建实体缓存 print("createEntityCache: " + mapper.createEntityCache()); print(mapper.getCollectionName("myTestDB")); print(mapper.getConverters()); User user = new User(System.currentTimeMillis(), "jackson", true, 22, null); user.setId(1306814012734L); print(mapper.getId(user)); for (EntityInterceptor ei : mapper.getInterceptors()) { System.out.println("EntityInterceptor: " + ei); } // 查询主键 print("getKey: " + mapper.getKey(user)); // 所有已经映射的class for (MappedClass mc : mapper.getMappedClasses()) { System.out.println("getMappedClasses: " + mc); } print("mcMap: " + mapper.getMCMap()); print("getOptions: " + mapper.getOptions()); print("keyToRef: " + mapper.keyToRef(mapper.getKey(user))); print("refToKey: " + mapper.refToKey(mapper.keyToRef(mapper.getKey(user)))); } /** * <b>function:</b> 实体缓存 * @author hoojo */ @Test public void testEntityCache() { EntityCache ec = morphia.getMapper().createEntityCache(); print("EntityCache: " + ec); Datastore ds = morphia.createDatastore(mongo, "myTestDB"); User user = new User(System.currentTimeMillis(), "jackson", true, 22, null); user.setId(1306814012734L); // 添加实体 ec.putEntity(ds.getKey(user), user); // 代理 ec.putProxy(ds.getKey(user), user); print("getKey: " + ds.getKey(user)); print("getProxy: " + ec.getProxy(ds.getKey(user))); print("getEntity: " + ec.getEntity(ds.getKey(user))); print(ec.exists(ds.getKey(user))); print("stats: " + ec.stats()); } @After public void destory() { mongo = null; morphia = null; System.gc(); } }
四、利用Morphia完成对Datastore对象的CRUD操作
1、 首先添加如下准备代码,随后的方法直接添加到该文件中即可
package com.hoo.test.ds; import java.net.UnknownHostException; import java.util.ArrayList; import java.util.List; import org.junit.After; import org.junit.Before; import org.junit.Test; import com.google.code.morphia.Datastore; import com.google.code.morphia.Key; import com.google.code.morphia.Morphia; import com.google.code.morphia.query.UpdateOperations; import com.hoo.entity.User; import com.mongodb.Mongo; import com.mongodb.MongoException; /** * <b>function:</b> Datastore增删改查操作 * @author hoojo * @createDate 2011-5-31下午06:29:04 * @fileDatastore DatastoreTest.java * @package com.hoo.test.ds * @project Morphia * @blog http://blog.csdn.net/IBM_hoojo * @email hoojo_@126.com * @version 1.0 */ public class DatastoreTest { private Mongo mongo; private Morphia morphia; private Datastore ds; @Before public void init() { try { mongo = new Mongo(); } catch (UnknownHostException e) { e.printStackTrace(); } catch (MongoException e) { e.printStackTrace(); } morphia = new Morphia(); morphia.map(User.class); ds = morphia.createDatastore(mongo, "temp"); } private void print(Object o) { if (o != null) { System.out.println(o.toString()); } } /** * <b>function:</b> 查询所有 * @author hoojo * @createDate 2012-2-16 下午10:36:13 */ private void query() { Iterable<User> it = ds.createQuery(User.class).fetch(); while(it.iterator().hasNext()) { print("fetch: " + it.iterator().next()); } } @After public void destory() { mongo = null; morphia = null; ds = null; System.gc(); } }
2、 增删改CUD操作
/** * <b>function:</b> CUD增删改 * @author hoojo * @createDate 2012-2-16 下午10:46:08 */ @Test public void testCUD() { // 添加测试数据 for (int i = 0; i < 50; i++) { User u = new User(System.currentTimeMillis() + i, "test-" + i, ((i % 2 == 0)? true: false), 18 + i, "china-gz#" + i); print(ds.save(u)); } //ds.delete(ds.createQuery(User.class)); List<User> users = new ArrayList<User>(); users.add(new User(1306907246518L, "zhangsan", true, 22, "china-gz")); User user = new User(System.currentTimeMillis() + 3, "zhaoliu", true, 29, "china-beijin"); users.add(user); users.add(new User(System.currentTimeMillis() + 6, "wangwu", true, 24, "china-shanghai")); users.add(new User(System.currentTimeMillis() + 9, "lisi", true, 26, "china-wuhan")); //添加集合 print("save: " + ds.save(users)); //添加数组 print("save: " + ds.save(users.toArray())); this.query(); print("getKey: " + ds.find(User.class, "id", 1306907246518L).getKey()); //修改操作 UpdateOperations<User> uo = ds.createUpdateOperations(User.class); print("update: " + ds.update(ds.find(User.class, "id", 1306907246518L).getKey(), uo).getUpdatedCount()); uo.add("name", "zhaoliuliu").set("age", 29).set("sex", true).add("address", "gzz"); print("update: " + ds.update(ds.find(User.class, "id", 1306907246518L).getKey(), uo).getUpdatedCount()); print("update: " + ds.update(ds.createQuery(User.class).field("id").equal(1306907246518L), uo).getUpdatedCount()); print("update: " + ds.update(ds.find(User.class, "id", 1306907246518L), uo).getUpdatedCount()); uo = ds.createUpdateOperations(User.class); uo.set("name", "zhaoqq").set("age", 29).set("sex", true).add("address", "fzz"); print("update: " + ds.update(ds.find(User.class, "id", 1306907246518L).get(), uo).getUpdatedCount()); print("update: " + ds.update(ds.createQuery(User.class).field("id").equal(1306907246518L), uo, true).getUpdatedCount()); // 修改第一个对象 print("updateFirst: " + ds.updateFirst(ds.createQuery(User.class).field("id").equal(1306907246518L), uo).getUpdatedCount()); //当参数createIfMissing为true的时候,如果修改的对象不存在就会添加这条数据,如果为false的情况下,不存在也不添加 print("updateFirst: " + ds.updateFirst(ds.createQuery(User.class).field("id").equal(1306907246519L), uo, true).getUpdatedCount()); user.setId(1306907246518L); print("updateFirst: " + ds.updateFirst(ds.createQuery(User.class).field("id").equal(1306907246518L), user, true).getUpdatedCount()); user.setId(1306916670518L); // 合并 print("merge: " + ds.merge(user).getId()); this.query(); //删除 print("delete: " + ds.delete(ds.createQuery(User.class).field("id").equal(1306907246518L)).getN()); print("delete: " + ds.delete(ds.find(User.class, "age", 29).get()).getN()); //print("delete: " + ds.delete(User.class, 1306911594631L).getN()); //print("delete: " + ds.delete(User.class, users).getN()); //ds.delete(ds.createQuery(User.class)); this.query(); }
3、 Find查询操作
/** * <b>function:</b> find查询 * @author hoojo * @createDate 2012-2-16 下午10:45:55 */ @Test public void testFind() { print("find: " + ds.find(User.class).asList()); //like print("find-contains: " + ds.find(User.class).field("name").contains("test-1").asList()); //忽略大小写 print("find-containsIgnoreCase: " + ds.find(User.class).field("name").containsIgnoreCase("ja").asList()); print("find-endsWith: " + ds.find(User.class).field("name").endsWith("22").asList()); print("find-endsWithIgnoreCase: " + ds.find(User.class).field("name").endsWithIgnoreCase("CK").asList()); //过滤null或是没有name属性的 print("find-doesNotExist: " + ds.find(User.class).field("name").doesNotExist().asList()); //查询name有值的数据 print("find-doesNotExist: " + ds.find(User.class).field("name").exists().asList()); //age > 48 print("find-greaterThan: " + ds.find(User.class).field("age").greaterThan(66).asList()); //age >= 48 print("find-greaterThan: " + ds.find(User.class).field("age").greaterThanOrEq(66).asList()); List<Integer> ageList = new ArrayList<Integer>(); ageList.add(22); ageList.add(55); ageList.add(66); //all print("find-hasAllOf: " + ds.find(User.class).field("age").hasAllOf(ageList).asList()); //in print("find-hasAnyOf: " + ds.find(User.class).field("age").hasAnyOf(ageList).asList()); //not in print("find-hasNoneOf: " + ds.find(User.class).field("age").hasNoneOf(ageList).asList()); //elemMatch //print("find-hasThisElement: " + ds.find(User.class).field("age").hasThisElement(55).asList()); print("find-hasThisOne: " + ds.find(User.class).field("age").hasThisOne(55).asList()); print("find-in: " + ds.find(User.class).field("age").in(ageList).asList()); print("find-lessThan: " + ds.find(User.class).field("age").lessThan(20).asList()); print("find-lessThanOrEq: " + ds.find(User.class).field("age").lessThanOrEq(18).asList()); //print("find-lessThanOrEq: " + ds.find(User.class).field("age").near(.2, .8).asList()); print("find: " + ds.find(User.class, "id", 1306813979609L).get()); print("find: " + ds.find(User.class, "age", 28, 1, 2).asList()); print("findAndDelete: " + ds.findAndDelete(ds.createQuery(User.class).field("id").equal(1306813979609L))); print("find: " + ds.find(User.class).asList()); }
4、 Query查询操作
/** * <b>function:</b> query查询 * @author hoojo * @createDate 2012-2-16 下午10:40:10 */ @Test public void testQuery() { // 查询所有 print("query: " + ds.createQuery(User.class).asList()); // 查询主键 print("query key: " + ds.createQuery(User.class).asKeyList()); // 结果集数量 print("query: " + ds.createQuery(User.class).countAll()); // 抓取查询所有记录 Iterable<User> it = ds.createQuery(User.class).fetch(); while(it.iterator().hasNext()) { print("fetch: " + it.iterator().next()); } // null it = ds.createQuery(User.class).fetchEmptyEntities(); while(it.iterator().hasNext()) { print("fetchEmptyEntities: " + it.iterator().next()); } // all key Iterable<Key<User>> itkeys = ds.createQuery(User.class).fetchKeys(); while(itkeys.iterator().hasNext()) { print("fetchKeys: " + itkeys.iterator().next()); } // age > 24 print("query: " + ds.createQuery(User.class).filter("age > ", 24).asList()); // age in (20, 28) print("query: " + ds.createQuery(User.class).filter("age in ", newint[] { 20, 28 }).asList()); // limit 3 print("query: " + ds.createQuery(User.class).limit(3).asList()); // 分页类似MySQL print("query: " + ds.createQuery(User.class).offset(11).limit(5).asList()); // order排序,默认asc print("query: " + ds.createQuery(User.class).order("age").asList()); //desc print("query: " + ds.createQuery(User.class).order("-age").asList()); // 组合排序 order by age, name print("query: " + ds.createQuery(User.class).order("age, name").asList()); print("query: " + ds.createQuery(User.class).queryNonPrimary().asList()); print("query: " + ds.createQuery(User.class).queryPrimaryOnly().asList()); //如果include 为true就表示取该属性的值,其他的默认null,反之为false则该属性为null,取其他的值 print("query: " + ds.createQuery(User.class).retrievedFields(false, "age").asList()); }
5、 get和count查询
/** * <b>function:</b> get查询 * @author hoojo * @createDate 2012-2-16 下午10:39:09 */ @Test public void testGet() { User user = new User(); user.setId(1306916670518L); print("get: " + ds.get(user)); List<Long> ids = new ArrayList<Long>(); ids.add(1306907246519L); ids.add(1306916670524L); // 通过id集合查询相当于in () print("get: " + ds.get(User.class, ids).asList()); // id查询 print("get: " + ds.get(User.class, 1306916670524L)); } /** * <b>function:</b> count查询 * @author hoojo * @createDate 2012-2-16 下午10:38:02 */ @Test public void testGetCount() { User user = new User(); user.setId(1306916670518L); print("getCount: " + ds.getCount(user)); print("getCount: " + ds.getCount(User.class)); List<Long> ids = new ArrayList<Long>(); ids.add(1306907246519L); ids.add(1306916670524L); print("getCount: " + ds.getCount(ds.get(User.class, ids))); // age > 22的记录 print("getCount: " + ds.getCount(ds.createQuery(User.class).filter("age > ", 22))); // 所有 print("countAll: " + ds.get(User.class, ids).countAll()); print("countAll: " + ds.find(User.class).countAll()); }
6、 其他操作
@Test public void testOthers() { query(); /** 索引 */ ds.ensureIndexes(); // 同时用annotation也可以给指定的属性建立索引 // 只需用在JavaEntity建立索引的属性上添加annotation /*@Indexed(value = IndexDirection.ASC, name = "address_index") String address; // 建立唯一索引 @Indexed(value = IndexDirection.ASC, name = "bandName", unique = true) String name;*/ ds.ensureCaps(); User user = new User(); user.setId(1306916670518L); print("getDB: " + ds.getDB()); print("getDefaultWriteConcern: " + ds.getDefaultWriteConcern()); print("DBColl: " + ds.getCollection(User.class)); // 查询User对象对应的集合 Key<User> key = ds.getKey(user); // 主键 print("getKey: " + key); print("exists: " + ds.exists(user)); //是否存在该对象 print("exists: " + ds.exists(ds.getKey(user))); print("getByKey: " + ds.getByKey(User.class, key)); List<Key<User>> keys = new ArrayList<Key<User>>(); keys.add(key); user.setId(1306916670521L); keys.add(ds.getKey(user)); print("getByKey: " + ds.getByKeys(keys)); print("getByKey: " + ds.getByKeys(User.class, keys)); query(); }
用Morphia操作对象相对比较简单,它对MongoDB对Java的操作进行了一些封装,特别是查询这方面的。有没有感觉像是在用Hibernate?
相关推荐
NoSQLBooster 管理MongoDB的工具。这个工具还有个曾用名--mongobooster
NoSQL Manager for MongoDB Pro免费版加注册机 MongoDB 可视化工具压缩包内附注册机
nosql实验六- MongoDB的安装与基本操作.docx
NoSQL主流数据库-MongoDB.pptx
NoSQLBooster for MongoDB v4.7.5可用注册码,注意:一定要设置host
教程名称:NoSQL数据库之MongoDB视频讲解(17集附源码)课程目录:【】MongoDB - 1【视频讲解】【】NoSQL数据库之MongoDB - 11【】NoSQL数据库之MongoDB - 16【】NoSQL数据库之MongoDB - 5【】NoSQL数据库之MongoDB-...
破解步骤: 1、hosts添加127.0.0.1 nosqlbooster.com、127.0.0.1 www.nosqlbooster.com 2、覆盖resources文件 3、输入License
亲测可用, NoSQL Manager for MongoDB 2.7.x, 支持MongoDB 3.0, 下载运行 破解.bat即可
Big Data, MongoDB not only enables the user in understanding the buzz words “Big Data” and “NoSQL”, it also delves in understanding one of the popular document-based NoSQL databases “MongoDB”....
NoSQLBooster for MongoDB (formerly MongoBooster) is a shell-centric cross-platform GUI tool for MongoDB v2.6-4.0, which provides comprehensive server monitoring toolsserver monitoring tools, fluent ...
nosql manager for mongodb无限30天使用,运行压缩包中的bat脚本就可,记得运行前保存你的连接信息,不然要重新配置连接信息。
可视化MongoDB数据库管理工具,NoSQL Manager for MongoDB,破解版,解压就可以用。
MongoDB等NoSQL数据库背后蕴涵的哲学是不同的平台应该使用不同类型的数据库,MongoDB通过降低一些特性来达到性能的提高,这在很多大型站点中是可行的。因为MongoDB是非原子性的,所以如果如果应用需要事务,还是需要...
NoSQL数据库之MongoDB源码和PPT,包含9个文件夹,内有源代码与PPT。
NoSQL Manager for MongoDB数据库管理工具
NoSQL之MongoDB的CRUD操作 比较全面的MongoDB操作,支持面向对象. 详情http://blog.csdn.net/dengwanchuan/article/details/7514431
NoSQL Manager for MongoDB中文版,全中文界面,解压即用。
NoSQL Manager for MongoDB是一个mongodb数据库的管理工具