




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Morphia操作 MongoDB上两篇文章:/hoojo/archive/2011/06/01/2066426.html/hoojo/archive/2011/06/02/2068665.html介绍到了在MongoDB的控制台完成MongoDB的数据操作、以及通过Java MongoDB 的驱动完成在Java中对MongoDB的操作,通过前两篇文章我们对MongoDB有了全面、深刻的认识和理解。现在我们就看看利用Morphia库来操作MongoDB。开发环境:System:WindowsIDE:eclipse、MyEclipse 8Database:mongoDB开发依赖库:JavaEE5、mongo-2.5.3.jar、junit-4.8.2.jarEmail:hoojo_126.comBlog:/IBM_hoojo/一、 准备工作1、 首先,下载mongoDB对Java支持的驱动包驱动包下载地址:/mongodb/mongo-java-driver/downloadsmongoDB对Java的相关支持、技术:/display/DOCS/Java+Language+Center驱动源码下载:/mongodb-mongo-java-driver-r2.6.1-7-g6037357.zip在线查看源码:/mongodb/mongo-java-driverMorphia jar包下载:/p/morphia/downloads/list2、 下面建立一个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 .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;/*function:Mongo实例对象的相关方法测试*authorhoojo*createDate2011-5-24下午02:42:29*fileMongoDBTest.java*packagecom.hoo.test*projectMongoDB*blog/IBM_hoojo*emailhoojo_126.com*version1.0*/publicclass MongoDBTest publicstaticvoid 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对象转换成DBObjectDBObject 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;/*function:将Entity/Model转换成DBObject*authorhoojo*createDate2011-5-30下午01:53:08*fileBasicDBObjectUtil.java*packagecom.hoo.util*projectMongoDB*blog/IBM_hoojo*emailhoojo_126.com*version1.0*/publicclass BasicDBObjectUtils publicstatic 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 .UnknownHostException;importjava.util.ArrayList;importjava.util.List;importorg.bson.types.ObjectId;import org.junit.After;import org.junit.Before;importorg.junit.Test;importcom.mongodb.BasicDBObject;importcom.mongodb.Bytes;import com.mongodb.DB;import com.mongodb.DBCollection;importcom.mongodb.DBCursor;importcom.mongodb.DBObject;import com.mongodb.Mongo;import com.mongodb.MongoException;importcom.mongodb.QueryOperators;importcom.mongodb.util.JSON;/* * function:实现MongoDB的Index操作 * authorhoojo * createDate 2011-6-2 下午03:21:23 * fileMongoDB4IndexTest.java * package com.hoo.test * project MongoDB * blog /IBM_hoojo * email hoojo_126.com * version 1.0 */publicclass MongoDB4IndexTest private Mongo mg = null;private DB db;private DBCollection users;Beforepublicvoid 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);Afterpublicvoid destory() if (mg != null)mg.close();mg = null;db = null;users = null;System.gc();publicvoid print(Object o) System.out.println(o);3、 下面完成对象Collection的index的操作/*function:测试Collection的index相关操作*authorhoojo*createDate2012-2-16下午08:32:26*/Testpublicvoid 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_indexcoll.ensureIndex(new BasicDBObject(address, 1), new BasicDBObject( name , default_index);/ 创建索引对象,索引名称user_indexcoll.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;/*function:JavaEntity对象*authorhoojo*createDate2011-5-31上午11:45:21*fileUser.java*packagecom.hoo.entity*projectMorphia*blog/IBM_hoojo*emailhoojo_126.com*version1.0*/利用morphia的annotation进行注解Entitypublicclass User Idprivatelongid;private String name;privatebooleansex;privateintage;private String address;public User() public User(long id, String name, boolean sex, int age, String address) super();this.id = id; = name;this.sex = sex;this.age = age;this.address = address;/getter、setterOverridepublic String toString() returnthis.id + # + + # + this.age + # + this.sex + # + this.address;2、 对Morphia对象一些简单的使用,看看该对象提供了哪些基本的操作方法package com.hoo.test.morphia;import .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;/*function:morphia对象的简单测试*authorhoojo*createDate2011-5-31上午11:30:20*fileTest.java*packagecom.hoo.test*projectMorphia*blog/IBM_hoojo*emailhoojo_126.com*version1.0*/publicclass MorphiaTest private Mongo mongo;private Morphia morphia;Beforepublicvoid init() try mongo = new Mongo(); catch (UnknownHostException e) e.printStackTrace(); catch (MongoException e) e.printStackTrace();morphia = new Morphia();privatevoid print(Object o) if (o != null) System.out.println(o.toString();/*function:morphia对象的简单测试*authorhoojo*/SuppressWarnings(deprecation)Testpublicvoid testMorphia() / 创建一个Datastore,过时的方法不推荐使用Datastore ds = morphia.createDatastore(myTestDB);print(createDatastore: + ds);/ 创建dsds = 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);/会把整个包下面的类都加载进来/ 将对象转成DBObjectprint(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);/*function:对Mapper对象相关操作*authorhoojo*createDate2012-2-16下午10:20:38*/Testpublicvoid 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);/ 所有已经映射的classfor (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);/*function:实体缓存*authorhoojo*/Testpublicvoid 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();Afterpublicvoid destory() mongo = null;morphia = null;System.gc();四、 利用Morphia完成对Datastore对象的CRUD操作1、 首先添加如下准备代码,随后的方法直接添加到该文件中即可package com.hoo.test.ds;import .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;/*function:Datastore增删改查操作*authorhoojo*createDate2011-5-31下午06:29:04*fileDatastoreTest.java*packagecom.hoo.test.ds*projectMorphia*blog/IBM_hoojo*emailhoojo_126.com*version1.0*/publicclass DatastoreTest private Mongo mongo;private Morphia morphia;private Datastore ds;Beforepublicvoid 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);privatevoid print(Object o) if (o != null) System.out.println(o.toString();/*function:查询所有*authorhoojo*createDate2012-2-16下午10:36:13*/privatevoid query() Iterable it = ds.createQuery(User.class).fetch();while(it.iterator().hasNext() print(fetch: + it.iterator().next();Afterpublicvoid destory() mongo = null;morphia = null;ds = null;System.gc();2、 增删改CUD操作/*function:CUD增删改*authorhoojo*createDate2012-2-16下午10:46:08*/Testpublicvoid 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 users = new ArrayList();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 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
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年智能小区门卫投诉处理与和谐邻里关系维护合同
- 2025年智能家居环保陶瓷装饰砖批发销售合同
- 2025年信用卡额度担保个人小微企业融资贷款合同
- 2025养老产业综合体品牌形象设计与推广服务合同
- 2025年学校教师聘任合同-家庭教育指导与家校互动服务
- 2025年环保节能设备区域代理销售合同
- 2025年金融行业专属性英文版商业秘密保护合同
- DB61-T 5100-2024 磁测井法检测基桩钢筋笼长度技术规程
- 2025年纸箱包装材料创新研发与采购合同
- 2024年四川省成都市医疗三严三基理论考试题库及答案
- 知识题库-人社练兵比武竞赛测试题及答案(八)
- 屋顶分布式光伏发电项目EPC总承包工程招投标书范本
- 《育婴师培训》-课件:环境消毒基础知识
- 关于规范村级财务管理的审计建议
- 体检中心礼仪培训课件
- 独立基础教学课件
- 20以内加减法口算题(10000道)(A4直接打印-每页100题)
- 会计从业资格基础知识汇总
- 长安欧尚A800说明书
- 项目干系人管理评估
- 火灾应急预案组织架构图
评论
0/150
提交评论