国产一级a片免费看高清,亚洲熟女中文字幕在线视频,黄三级高清在线播放,免费黄色视频在线看

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
NoSQL 之 Morphia 操作 MongoDB

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的數(shù)據(jù)操作、以及通過Java MongoDB 的驅(qū)動完成在Java中對MongoDB的操作,通過前兩篇文章我們對MongoDB有了全面、深刻的認(rèn)識和理解。現(xiàn)在我們就看看利用Morphia庫來操作MongoDB。

開發(fā)環(huán)境:

System:Windows

IDE:eclipse、MyEclipse 8

Database:mongoDB

開發(fā)依賴庫:

JavaEE5、mongo-2.5.3.jar、junit-4.8.2.jar

Email:hoojo_@126.com

Blog:http://blog.csdn.net/IBM_hoojo

http://hoojo.cnblogs.com/

一、準(zhǔn)備工作

1、 首先,下載mongoDB對Java支持的驅(qū)動包

驅(qū)動包下載地址:https://github.com/mongodb/mongo-java-driver/downloads

mongoDB對Java的相關(guān)支持、技術(shù):http://www.mongodb.org/display/DOCS/Java+Language+Center

驅(qū)動源碼下載: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工程,導(dǎo)入下載下來的驅(qū)動包。即可在Java中使用Morphia,目錄如下:

二、Java操作MongoDB示例

在本示例之前你需要啟動mongod.exe的服務(wù),在你安裝mongoDB的目錄中,找到mongod.exe啟動服務(wù)后,下面的程序才能順利執(zhí)行;

1、 Java操作mongoDB數(shù)據(jù)庫,操作索引

Mongo mongo = new Mongo();

這樣就創(chuàng)建了一個MongoDB的數(shù)據(jù)庫連接對象,它默認(rèn)連接到當(dāng)前機器的localhost地址,端口是27017。

DB db = mongo.getDB(“test”);

這樣就獲得了一個test的數(shù)據(jù)庫,如果mongoDB中沒有創(chuàng)建這個數(shù)據(jù)庫也是可以正常運行的。如果你讀過上一篇文章就知道,mongoDB可以在沒有創(chuàng)建這個數(shù)據(jù)庫的情況下,完成數(shù)據(jù)的添加操作。當(dāng)添加的時候,沒有這個庫,mongoDB會自動創(chuàng)建當(dāng)前數(shù)據(jù)庫。

得到了db,下一步我們要獲取一個“聚集集合DBCollection”,通過db對象的getCollection方法來完成。

DBCollection users = db.getCollection("users");

這樣就獲得了一個DBCollection,它相當(dāng)于我們數(shù)據(jù)庫的“表”。

查詢所有數(shù)據(jù)

DBCursor cur = users.find();

while (cur.hasNext()) {

System.out.println(cur.next());

}

用BasicDBObjectBuilder,向users對象中添加數(shù)據(jù)

user = BasicDBObjectBuilder.start("id", 1546555)

.append("name", "jojo").add("address", "gz")

.append("email", "hoojo_@126.com")

.get();

插入數(shù)據(jù)

users.insert(user);

可以利用JSON工具來序列化對象數(shù)據(jù)

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實例對象的相關(guān)方法測試
 * @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("添加測試數(shù)據(jù)");
        DBCollection users = db.getCollection("users");
        try {
            // 用自定義BasicDBObjectUtils工具類,將User Enity對象轉(zhuǎn)換成DBObject
            DBObject user = BasicDBObjectUtils.castModel2DBObject(new User("345567", "jack", 22, "beijin"));
            users.insert(user);
            // 用BasicDBObjectBuilder構(gòu)建一個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("游標(biāo)查詢所有users集合數(shù)據(jù)");
        DBCursor cur = users.find();
        while (cur.hasNext()) {
            System.out.println(cur.next());
        }
        System.out.println("查詢游標(biāo)相關(guān)內(nèi)容");
        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("顯示游標(biāo)查詢到的所有內(nèi)容: " + JSON.serialize(cur));
    }
}

工具類,將帶有g(shù)etter、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轉(zhuǎn)換成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> 實現(xiàn)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;如果默認(rèn)沒有創(chuàng)建,mongodb會自動創(chuàng)建
        db = mg.getDB("temp");
        //獲取users DBCollection;如果默認(rèn)沒有創(chuàng)建,mongodb會自動創(chuàng)建
        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相關(guān)操作
 * @author hoojo
 * @createDate 2012-2-16 下午08:32:26
 */
@Test
public void testIndex() {
    query();
    
    for (DBObject index : coll.getIndexInfo()) {
        print("IndexInfo: " + index);
    }
    
    coll.dropIndexes();
    //創(chuàng)建索引
    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" ));
    // 創(chuàng)建唯一索引
    coll.ensureIndex(new BasicDBObject("emial", 2), new BasicDBObject("unique", false));
    // 創(chuàng)建索引,指定索引名稱default_index
    coll.ensureIndex(new BasicDBObject("address", 1), new BasicDBObject( "name" , "default_index"));
    // 創(chuàng)建索引對象,索引名稱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進(jìn)行注解,那樣我們就可以用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進(jìn)行注解
@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() {
        // 創(chuàng)建一個Datastore,過時的方法不推薦使用
        Datastore ds = morphia.createDatastore("myTestDB");
        print("createDatastore: " + ds);
        // 創(chuàng)建ds
        ds = morphia.createDatastore(mongo, "myTestDB");
        print("createDatastore: " + ds);
        // 創(chuàng)建一個帶用戶名、密碼的ds
        //ds = morphia.createDatastore(mongo, "myTestDB", "admin", new char[] { '1', '2', '3', '4', '5', '6' });
        
        // 設(shè)置操作資源對象,這里設(shè)置User.class 就可以完成對User的一系列操作
        //morphia.map(User.class);
        //morphia.mapPackage("com.hoo.entity");//會把整個包下面的類都加載進(jìn)來
        // 將對象轉(zhuǎn)成DBObject
        print("toDBObject: " + morphia.toDBObject(new User(System.currentTimeMillis(), "jackson", true, 22, null)));
        // 將參數(shù)2轉(zhuǎn)換成參數(shù)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對象相關(guān)操作
     * @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));
        
        // 創(chuàng)建實體緩存
        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));
        // 所有已經(jīng)映射的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、 首先添加如下準(zhǔn)備代碼,隨后的方法直接添加到該文件中即可

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() {
    // 添加測試數(shù)據(jù)
    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));
    
    //添加數(shù)組
    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());
    //當(dāng)參數(shù)createIfMissing為true的時候,如果修改的對象不存在就會添加這條數(shù)據(jù),如果為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有值的數(shù)據(jù)
    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());
    // 結(jié)果集數(shù)量
    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排序,默認(rèn)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就表示取該屬性的值,其他的默認(rèn)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集合查詢相當(dāng)于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對象對應(yīng)的集合
    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的操作進(jìn)行了一些封裝,特別是查詢這方面的。有沒有感覺像是在用Hibernate? 

本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
【MongoDB for Java】Java操作MongoDB
使用Python進(jìn)行MongoDB數(shù)據(jù)查找
Spring Boot MongoDB
為MongoDB增加自增長主鍵生成的功能
Spring Data MongoDB 五:進(jìn)階文檔查詢(分頁、Morphia)(二)
python-18:爬取糗事百科段子源碼
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服