;
this.loc = loc;
}
public Place() {
}
@Override
public String toString() {
return "Place [loc=" + Arrays.toString(loc) + ", name=" + name + "]";
}
//省略getter,setters
}
因为morphia提供了BasicDao,所以这里就准备一个简单的Dao:
package morphia.dao;
import java.util.List;
import morphia.model.Place;
import morphia.model.Store;
import com.google.code.morphia.Datastore;
import com.google.code.morphia.dao.BasicDAO;
import com.google.code.morphia.query.Query;
public class StoreDao extends BasicDAO {
public StoreDao(Datastore ds) {
super(ds);
ds.ensureIndexes();
ds.ensureCaps();
}
/**
* 查找离p 最近的5个店铺
* @param p
* @return
*/
public List findNearPlace(Place p) {
return ds.createQuery(Store.class).field("place.loc").near(p.getLoc()[0], p.getLoc()[1]).limit(5).asList();
}
/**
* 查找离p 最近的5个肯德基店
* @param p
* @return
*/
public List findKFCNearPlace(Place p) {
return ds.createQuery(Store.class).filter("name", "肯德基").field("place.loc").near(p.getLoc()[0], p.getLoc()[1]).limit(5).asList();
}
/**
* 删除所有店铺
*/
public void deleteAllStore(){
Query q = ds.createQuery(Store.class);
ds.delete(q);
}
}
package morphia.dao;
import java.util.List;
import morphia.model.Place;
import morphia.model.Store;
import com.google.code.morphia.Datastore;
import com.google.code.morphia.dao.BasicDAO;
import com.google.code.morphia.query.Query;
public class StoreDao extends BasicDAO {
public StoreDao(Datastore ds) {
super(ds);
ds.ensureIndexes();
ds.ensureCaps();
}
/**
* 查找离p 最近的5个店铺
* @param p
* @return
*/
public List findNearPlace(Place p) {
return ds.createQuery(Store.class).field("place.loc").near(p.getLoc()[0], p.getLoc()[1]).limit(5).asList();
}
/**
* 查找离p 最近的5个肯德基店
* @param p
* @return
*/
public List findKFCNearPlace(Place p) {
return ds.createQuery(Store.class).filter("name", "肯德基").field("place.loc").near(p.getLoc()[0], p.getLoc()[1]).limit(5).asList();
}
/**
* 删除所有店铺
*/
public void deleteAllStore(){
Query q = ds.createQuery(Store.class);
ds.delete(q);
}
}
接下来就可以写测试类了:
package mongo.morphia.test;
import java.util.List;
import morphia.dao.PlaceDao;
import morphia.dao.StoreDao;
import morphia.model.Place;
import morphia.model.Store;
import com.google.code.morphia.Datastore;
import com.google.code.morphia.Morphia;
import com.mongodb.Mongo;
public class StoreDaoTest {
public static String[] STORE_TYPE = {"肯德基","麦当劳","必胜客","吉野家","蒸功夫"};
public static StoreDaoTest m = new StoreDaoTest();
static DaoHolder daoHolder = new DaoHolder();
//测试保存,准备一千家店铺的数据
public void testSave(){
long start = System.currentTimeMillis();
for( int i = 0; i < 1000; i++){
double x = Math.round(Math.random() * 10000)/100.0D |